【问题标题】:How do you save dictionary data to the matching excel row but different column using openpyxl如何使用openpyxl将字典数据保存到匹配的excel行但不同的列
【发布时间】:2021-11-23 07:59:27
【问题描述】:

我正在使用 openpyxl 从 Excel 电子表格中读取一列 (A)。然后,我遍历字典以查找匹配信息,然后我想将此数据写回同一个 Excel 电子表格的 (C) 列。

我试图弄清楚如何将数据附加回相应的行,但没有运气。

代码

from openpyxl import load_workbook

my_dict = {
    'Agriculture': 'ET_SS_Agriculture',
    'Dance': 'ET_FA_Dance',
    'Music': 'ET_FA_Music'
}


wb = load_workbook("/Users/administrator/Downloads/Book2.xlsx")  # Work Book
ws = wb['Sheet1']  # Work Sheet
column = ws['A']  # Column
write_column = ws['C']


column_list = [column[x].value for x in range(len(column))]
for k, v in my_dict.items():
    for l in column_list:
        if k in l:
            print(f'The dict for {l} is {v}')
            # append v to row of cell index of column_list

所以,如果我的 excel 电子表格如下所示:

在匹配数据字典后,我希望 C 列看起来像这样。

【问题讨论】:

    标签: python python-3.x excel openpyxl


    【解决方案1】:

    为了使用您的方法执行此操作,您需要索引(即:行)将值分配给 C 列,您可以在运行 column_list 时使用 enumerate 获得此功能

        for i, l in enumerate(column_list):
            if k in l:
                print(f'The dict for {l} is {v}')
                # append v to row of cell index of column_list
                write_column[i].value = v
    
    

    写完所有需要运行的值

    wb.save("/Users/administrator/Downloads/Book2.xlsx")
    

    保存更改

    也就是说,您对电子表格中的数据进行了很多不必要的迭代,并且通过以列而不是行来处理这些数据,也使您自己的事情变得有些困难。您已经有了包含 A 列中值的 dict,因此您可以使用 split 进行直接查找。

    在我看来,您正在添加到每一行,因此循环遍历行是有意义的。

    my_dict = {
        'Agriculture': 'ET_SS_Agriculture',
        'Dance': 'ET_FA_Dance',
        'Music': 'ET_FA_Music'
    }
    
    
    wb = load_workbook("/Users/administrator/Downloads/Book2.xlsx")  # Work Book
    ws = wb['Sheet1']  # Work Sheet
    
    for row in ws:
        try:
            # row[0] = column A
            v = my_dict[row[0].value.split("-")[0]] # get the value from the dict using column A
        except KeyError:
            # leave rows which aren't in my_dict alone
            continue
    
        # row[2] = column C
        row[2].value = v
    
    wb.save("/Users/administrator/Downloads/Book2.xlsx")
    

    【讨论】:

    • 非常感谢您的深入回答。这对清理我的处理确实有意义。我不知道并且我现在正在研究的唯一想法是为什么它没有将这些结果row[2].value 写回电子表格。电子表格上没有任何更新。
    • 使用另一个链接:stackoverflow.com/questions/33920108/…,我尝试使用硬代码ws.cell(row=2, column=3).value = 'hello world' 写入单元格,但这也不起作用。
    • 我尝试了多种方法来写入电子表格。这可能是Mac问题吗?我也尝试过使用这种方法。 stackoverflow.com/questions/31395058/…
    • 你运行 wb.save() 了吗?
    猜你喜欢
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2020-09-10
    • 2020-04-07
    • 2017-10-26
    • 2016-05-07
    • 2018-02-10
    • 1970-01-01
    相关资源
    最近更新 更多