python - python excel减去2个工作表
问题描述
是否可以创建一个自动的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 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 文件
第一张:
第二张:
生成的表:
推荐阅读
- c# - Task.Wait() 和 ((IAsyncResult)Task).AsyncWaitHandle.WaitOne() 有什么区别
- angular - 具有多个表单组的Angular 6动态表单
- android - 库可以依赖并从另一个多风格库中读取资源吗?
- java - Apache Tomcat 无法在 Mac 上启动
- rest - 使用 groovy 脚本在 SoapUI 中比较 JDBC 响应和 REST API 响应
- kubernetes - StatefulSet、ReplicaSet 或 DaemonSet。单个 Pod 最好的是什么?
- r - LaTeX 错误:CRAN Debian 版本上包 xcolor 的选项冲突
- angular - Azure 广告 B2C 密码重置链接默认使用注册/登录策略端点重定向
- powershell - 祖父母文件夹名称到文件名
- javascript - 如何使用 webpack 从项目根目录导入外部文件?