python excel 用 2 个工作表减去

python excel subtract with 2 worksheet

是否可以创建一个 python 自动脚本,即在一个 excel 文件中用 2 个工作表减去单元格值? 我查了一些文档,好像是用pandas或者openpyxl的方法来实现的。但我不能那样做。你对我有什么建议吗?非常感谢。

脚本:

from datetime import datetime
import pandas as pd
import openpyxl as xl;

currDateTime = datetime.now()

Sheet1 ="C:\Users\peter\Downloads\" + currDateTime.strftime('%Y%m%d') + "\5250A" + "\5250A.xlsx"
wb3 = xl.load_workbook(Sheet1) 
ws3 = wb3.worksheets[0] 
wb4 = xl.load_workbook(Sheet1) 
ws4 = wb4.worksheets[1] 
wb5 = xl.load_workbook(Sheet1) 
ws5 = wb5.create_sheet("Done")

wb4.subtract(wb3)

wb5.save(str(Sheet1)) 

预期结果:

我认为在 excel 中这样做会更容易。可能有更聪明的方法来编写这段代码。

[注意] 我只是一个单元一个单元地做减法,所以如果有任何不匹配,比如 同一行但不同 dept.id or same col but different item 会出错。如果您可能遇到这种情况,您将在下面的代码中进行一些更改。

import openpyxl as xl

def get_row_values(worksheet):
    """
    return data structure:
    [
        [A1, B1, C1, ...],
        [A2, B2, C2, ...],
        ...
    ]
    """
    result = []
    for i in worksheet.rows:
        row_data = []
        for j in i:
            row_data.append(j.value)
        result.append(row_data)
    return result


if __name__ == '__main__':
    # load excel file
    wb = xl.load_workbook('test1.xlsx')
    ws1 = wb.worksheets[0]
    ws2 = wb.worksheets[1]

    # get data from the first 2 worksheets
    ws1_rows = get_row_values(ws1)
    ws2_rows = get_row_values(ws2)

    # calculate and make a new sheet
    ws_new = wb.create_sheet('Done')
    # insert header
    ws_new.append(ws1_rows[0])
    for row in range(1, len(ws1_rows)):
        # do the substract cell by cell
        row_data = []
        for column, value in enumerate(ws1_rows[row]):
            if column == 0:
                # insert first column
                row_data.append(value)
            else:
                if ws1_rows[row][0] == ws2_rows[row][0]:
                    # process only when first column match
                    row_data.append(value - ws2_rows[row][column])
        ws_new.append(row_data)
    wb.save('test2.xlsx')

这是我的示例 excel 文件

第一sheet:

秒sheet:

生成sheet: