【问题标题】:How can I write to specific Excel columns using openpyxl?如何使用 openpyxl 写入特定的 Excel 列?
【发布时间】:2021-08-02 14:44:21
【问题描述】:

我正在编写一个 Python 脚本,该脚本需要将数据集合写入 Excel 文档中的特定列。

更具体地说,我正在调用一个返回项目列表的 API。列表中的每个项目都包含多个数据字段(项目名称、项目版本等)。我想遍历列表中的每个项目,然后将选定的数据字段写入 Excel 中的特定列。

目前,我正在遍历项目列表,然后将我想要的数据字段作为列表附加到一个空列表中(创建一个列表列表)。完成对项目列表的迭代后,我将迭代列表列表并附加到 Excel 文档的每一行。这可行,但会使写入特定列变得复杂。

这是我目前拥有的大致代码:

import requests
import json
from openpyxl import Workbook

def main():
    wb = Workbook()
    ws = wb.active

    r = requests.get(api_url)    # Can't provide URL
    items_list = r.json()['items']

    filler_list = []
    for item in items_list:
        item_name = item['itemName']
        item_version = item['itemVersion']
        # etc...

        filler_list.append([item_name, item_version])

    for i in filler_list:
        ws.append(i)

    wb.save('output.xlsx')

if __name__ == "__main__":
    main()

上面的代码将在第 1 行、第 2 行等写入 Excel 文档,因为填充列表中附加了许多列表。我更愿意做的是指定我希望将每个项目名称或项目版本添加到我想要的任何列字母中。这对openpyxl可行吗?主函数看起来像这样:

def main():
    wb = Workbook()
    ws = wb.active

    r = requests.get(api_url)    # Can't provide URL
    items_list = r.json()['items']

    for item in items_list:
        item_name = item['itemName']
        item_version = item['itemVersion']

        # Add item name to next open cell in column B (any column)
        # Add item version to next open cell in column D (any column)

    wb.save('output.xlsx')

【问题讨论】:

  • 你不能用像append这样简单的东西来做到这一点,但你仍然可以做到......
  • 这能回答你的问题吗? How to write a list to Excel column?
  • 您的链接解决方案与@sj95126 的解决方案比较相似。我认为在我的情况下两者都会很好用。

标签: python openpyxl


【解决方案1】:

有两种通用方法可以访问openpyxl中的特定单元格。

一种是使用工作表的cell() 方法,指定行号和列号。例如:

ws.cell(row=1, column=1).value = 5

设置第一个单元格。

第二种方法是使用 Excel 样式的单元格表示法来索引工作表。例如:

ws["A1"].value = 5

做和上面一样的事情。

如果您要在每一行中设置相同的列位置,可能最简单的做法是使items_list 成为一个迭代器并遍历您要设置的列。这是您上面代码中的一个简化示例:

columns = ["B", "D", "G", etc. etc.]
items_list = iter(r.json()['items'])
row = 1
for col in columns:
    ws[f"{col}{row}"].value = next(items_list)

【讨论】:

    猜你喜欢
    • 2017-06-14
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多