首页 > 解决方案 > python excel减去2个工作表

问题描述

是否可以创建一个自动的python脚本,在一个excel文件中用2个工作表减去单元格值?我检查了一些文档,似乎使用pandasopenpyxl的方法来做到这一点。但我不能那样做。你对我有什么建议吗?非常感谢。

脚本:

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)) 

预期结果:

图1 图2 图3

标签: pythonexcelpandasopenpyxlsubtraction

解决方案


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

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

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 文件

第一张:

在此处输入图像描述

第二张:

在此处输入图像描述

生成的表:

在此处输入图像描述


推荐阅读