问题描述
是否可以创建一个自动的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 中这样做会更容易。可能有更聪明的方法来编写此代码。
[注意] 我只是逐个单元地进行减法运算,所以如果有任何不匹配,例如 同一行但不同的部门 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 文件
第一张:
第二张纸:
生成的工作表: