簡體   English   中英

Openpyxl:代碼無法將數據從一個 Excel 電子表格寫入另一個

[英]Openpyxl: Code fails to write data from one Excel spreadsheet to another

我正在嘗試使用 Openpyxl 在一個 Excel 工作簿中搜索數據,並將其寫入另一個(預先存在的)Excel 工作簿。 目標是這樣的:

  1. 在 Workbook1 中搜索包含單詞“Sales”的行(有幾個這樣的行)
  2. 將這些行的 E 列中的數據(數值)復制到 Workbook2 中的特定單元格(第二個工作表,單元格 C3)。

我下面的代碼似乎運行沒有任何錯誤,但是,當我打開 Workbook 2 時,沒有數據被寫入其中。 有誰知道為什么/可以建議修復?

# importing openpyxl module
import openpyxl as xl
import sys

# opening the source excel file
filename ="C:\\Users\\hadam\\Documents\\Testing\\TB1.xlsx"
wb1 = xl.load_workbook(filename)
ws1 = wb1.worksheets[0]

# opening the destination excel file
filename1 = "C:\\Users\\hadam\\Documents\\Testing\\comp2.xlsx"
wb2 = xl.load_workbook(filename1)
ws2 = wb2.worksheets[1]

for sheet in wb1.worksheets:
    for row in sheet.iter_rows():
        for cell in row:
            try:
                if 'Sale' in cell.value:
                    # reading cell value from source excel file
                    c = ws1.cell(row=cell.row, column=4).value

                    # writing the read value to destination excel file
                    ws2.cell(row=2, column=2).value = c.value
            
            except (AttributeError, TypeError):
                continue

            # saving the destination excel file
            wb2.save(str(filename1))
                
sys.exit()

其他信息:

  • 具體來說,我正在搜索的文本字符串 ('Sales') 在 Workbook1 的 A 列中。 這不是完全匹配,但例如給定單元格包含“5301 Sales - Domestic - type4”。 因此,我想將 E 列中包含 A 列中“銷售額”的數值加到 Workbook2 中的單個單元格中。
  • 我對 Python/編碼非常陌生。 但是,我的環境似乎設置得很好,例如,我已經測試了一個代碼(從 Web 的其他地方復制),它可以將一個電子表格中的所有數據寫入另一個預先存在的電子表格)。 我在 Python 3 模式和 openpyxl 模塊中使用 Mu 編輯器。

經過快速觀察,這些線條

c = ws1.cell(row=cell.row, column=4).value
ws2.cell(row=2, column=2).value = c.value

當我讀到它時,您想要來自 E 列的數據,即 'column=5' 並且由於變量 c 只是一個 int,當您在下一行引用它時,它只是 '... = c' 而不是 c.value . Int 沒有名為“值”的屬性最后每個循環都會覆蓋第二個工作簿的同一單元格中的 c,因此您只會獲得找到的最后一個值。 您需要在循環時對 c, '+=' 的值求和,然后寫出最終的總和。 您可以在循環之外執行此操作以及寫入 excel 書,盡管它也可以在每次迭代時更新單元格。 C3 也是第 3 行和第 3 列。

c = 0
for sheet in wb1.worksheets:
    for row in sheet.iter_rows():
        for cell in row:
            try:
                if 'Sale' in cell.value:
                    # reading cell value from source excel file
                    c += ws1.cell(row=cell.row, column=5).value

            except (AttributeError, TypeError):
                continue

# writing the read value to destination excel file
ws2.cell(row=3, column=3).value = c
# saving the destination excel file
wb2.save(str(filename1))

暫無
暫無

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

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