微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python excel用2个工作表减去

如何解决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)) 

预期结果:

Figure1

Figure2

Figure3

解决方法

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

[注意] 我只是逐个单元地进行减法运算,所以如果有任何不匹配,例如 同一行但不同的部门 ID相同的列但不同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 文件

第一张:

enter image description here

第二张纸:

enter image description here

生成的工作表:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。