簡體   English   中英

如何使用 openpyxl 將字典數據保存到匹配的 excel 行但不同的列

[英]How do you save dictionary data to the matching excel row but different column using openpyxl

我正在使用 openpyxl 從 excel 電子表格中讀取列 (A)。 然后我遍歷字典以查找匹配信息,然后我想將此數據寫回同一 Excel 電子表格的 (C) 列。

我試圖弄清楚如何將 append 數據返回到相應的行,但沒有運氣。

代碼

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 看起來像這樣。

最終數據輸入

為了使用您的方法執行此操作,您需要索引(即:行)將值分配給列 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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM