使用 Openpyxl (Python) 向现有单元格添加信息
Using Openpyxl (Python) to add information to existing cell
我正在编写一个脚本,该脚本将从 API 中提取数据并将其存储在 Excel 电子表格中。我在这个过程中使用 Openpyxl。我 运行 遇到的唯一问题是,当我尝试添加到现有单元格的末尾时,该单元格被删除并替换为我添加的内容。有人能告诉我一个好方法吗我可以在同一个单元格中用逗号分隔这些值,而不是让它们相互替换,我真的很感激。
#Make sure that there is a game listed for them
try:
while games['games'][x]['name']:
alist.append(games['games'][x]['name'])
x = x + 1
#After there are no more games, iterate through the list of games
# and add them to the spreadsheet
except IndexError:
y = 0
try:
while alist[y]:
ws['B'+str(namecount+1)] = alist[y]
y = y + 1
except IndexError:
alist.clear()
看起来每当它经过第二个 while 循环时,它并没有添加到现有的单元格中,而是只是删除了它。我查看了 Openpyxl 文档,找不到任何可以帮助我遍历列表然后将列表中的每个条目添加到同一个单元格中的内容,以逗号分隔。任何帮助将不胜感激!
Excel 并不是真正为在单个单元格中存储值集合而构建的。每个单元格最多包含一个值,并且该值基本上是数字或字符串。 (日期、时间和真值是数字的变体。)
在你的情况下,如果你真的想要 单个 单元格中的 comma-separated 值列表,那么你唯一的选择是让单元格存储字符串表示那个名单。 (所以对于 Excel,它只是一个值,它是一个字符串。)然后,每次您要向该单元格添加一个条目时,您必须将逗号和该新条目的字符串表示附加到现有字符串值的结尾。
有几种方法可以做到这一点。最有经验的 Python 程序员可能会使用
ws[cell_address] = ', '.join(ws[cell_address], str(new_value))
您可能还会看到
ws[cell_address] = ws[cell_address] + ', ' + str(new_value)
或
ws[cell_address] += ', ' + str(new_value)
(我特意使用了问题文本以外的名称,希望能更好地说明一般概念。)
现在,仔细查看您的实际代码,在我看来您真的根本不需要重复分配该单元格,因为值列表在您尝试时已经完全形成第一次分配它。因此,您可以只采用整个列表的字符串表示形式,一次性将其分配给该单元格,而无需使用循环。
我可能会这样做:
ws[cell_address] = str(my_list)[1:-1]
其中 [1:-1]
跳过第一个和最后一个字符,这将是 Python 列表的标准字符串表示形式中的前导和尾随括号。另一种可能性是
ws[cell_address] = ', '.join(str(elem) for elem in my_list)
现在,如果您知道所有元素都已经是字符串,那么后一个元素可以简化为
ws[cell_address] = ', '.join(my_list)
我正在编写一个脚本,该脚本将从 API 中提取数据并将其存储在 Excel 电子表格中。我在这个过程中使用 Openpyxl。我 运行 遇到的唯一问题是,当我尝试添加到现有单元格的末尾时,该单元格被删除并替换为我添加的内容。有人能告诉我一个好方法吗我可以在同一个单元格中用逗号分隔这些值,而不是让它们相互替换,我真的很感激。
#Make sure that there is a game listed for them
try:
while games['games'][x]['name']:
alist.append(games['games'][x]['name'])
x = x + 1
#After there are no more games, iterate through the list of games
# and add them to the spreadsheet
except IndexError:
y = 0
try:
while alist[y]:
ws['B'+str(namecount+1)] = alist[y]
y = y + 1
except IndexError:
alist.clear()
看起来每当它经过第二个 while 循环时,它并没有添加到现有的单元格中,而是只是删除了它。我查看了 Openpyxl 文档,找不到任何可以帮助我遍历列表然后将列表中的每个条目添加到同一个单元格中的内容,以逗号分隔。任何帮助将不胜感激!
Excel 并不是真正为在单个单元格中存储值集合而构建的。每个单元格最多包含一个值,并且该值基本上是数字或字符串。 (日期、时间和真值是数字的变体。)
在你的情况下,如果你真的想要 单个 单元格中的 comma-separated 值列表,那么你唯一的选择是让单元格存储字符串表示那个名单。 (所以对于 Excel,它只是一个值,它是一个字符串。)然后,每次您要向该单元格添加一个条目时,您必须将逗号和该新条目的字符串表示附加到现有字符串值的结尾。
有几种方法可以做到这一点。最有经验的 Python 程序员可能会使用
ws[cell_address] = ', '.join(ws[cell_address], str(new_value))
您可能还会看到
ws[cell_address] = ws[cell_address] + ', ' + str(new_value)
或
ws[cell_address] += ', ' + str(new_value)
(我特意使用了问题文本以外的名称,希望能更好地说明一般概念。)
现在,仔细查看您的实际代码,在我看来您真的根本不需要重复分配该单元格,因为值列表在您尝试时已经完全形成第一次分配它。因此,您可以只采用整个列表的字符串表示形式,一次性将其分配给该单元格,而无需使用循环。
我可能会这样做:
ws[cell_address] = str(my_list)[1:-1]
其中 [1:-1]
跳过第一个和最后一个字符,这将是 Python 列表的标准字符串表示形式中的前导和尾随括号。另一种可能性是
ws[cell_address] = ', '.join(str(elem) for elem in my_list)
现在,如果您知道所有元素都已经是字符串,那么后一个元素可以简化为
ws[cell_address] = ', '.join(my_list)