使用Openpyxl(Python)向现有单元格添加信息

时间:2016-01-06 21:24:21

标签: python excel openpyxl

我正在编写一个脚本,该脚本将从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文档,找不到任何可以帮助我遍历列表的内容,然后将列表中的每个条目(用逗号分隔)添加到同一个单元格中。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

Excel并不是真正用于在单个单元格中存储值集合。每个单元格最多包含一个值,该值基本上是数字或字符串。 (日期,时间和真值是数字的变体。)

在您的情况下,如果您确实需要单个单元格中以逗号分隔的值列表,那么您唯一的选择是使单元格存储该列表的字符串表示形式。 (因此,对于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)