#coding=utf-8
import numbers
import os
import openpyxl
from openpyxl import load_workbook
from openpyxl.styles import NumberFormatDescriptor
path_sum="C:\\Users\\user\\Desktop\\费用统计2023年1-9月"
path_units="C:\\Users\\user\\Desktop\\费用统计2023年1-9月\\各单位报送"
#遍历文件路径使用os.walk方法
# for i,j,k in os.walk(path_sum):
# print(i,j,k)
#使用os.listdir获取文件名
# 创建工作路径列表
files=[]
for file in os.listdir(path_units):
file_path=os.path.join(path_units,file)
# print(file_path)
files.append(file_path)
# print(files)
# 读取各单位报送工作薄
wb_units=[]
wb_units=[load_workbook(file,data_only=True) for file in files]
#查看列表元素个数
# n=len(wb_units)
# print(n)
# 读取填报范本
file_demo='分产品费用明细表-2023年9月-汇总.xlsx'
file_demo_path=os.path.join(path_sum,file_demo)
wb_sum=load_workbook(file_demo_path)
ws_sum=wb_sum.worksheets[1]
# # 打印工作表名称
# sheet_names = wb_sum.sheetnames
# for sheet_name in sheet_names:
# print(sheet_name)
# 确定要汇总数据的行号和列号
row_start,row_stop=7,39
col_start,col_stop=3,49
for row_num in range(row_start,row_stop):
for col_num in range(col_start,col_stop):
# 单元格初始赋值,确定数值属性。
ws_sum.cell(row_num, col_num).value=0
# 遍历各单位上报工作表
for i in range(0, len(wb_units)):
#循环次数
print(i)
# 此次循环的文件
print(files[i])
ws_units = wb_units[i].worksheets[1]
cell_value_units=ws_units.cell(row_num,col_num).value
print(cell_value_units)
# 判断单元格是否为空,空则赋零。
if cell_value_units is not None:
# 判断是否为字符串,是则转换为数字。
if isinstance(cell_value_units,str):
try:
cell_value_cache=float(cell_value_units)
# 数字错误则赋零。
except ValueError:
cell_value_cache=0
else:
# 累加中间值赋值
cell_value_cache=cell_value_units
else:
cell_value_cache = 0
print(cell_value_cache)
# 累加
ws_sum.cell(row_num,col_num).value += cell_value_cache
print(ws_sum.cell(row_num,col_num).value)
# 输出行列号和值
print(f"Row: {row_num}, Column: {col_num}")
# 保存文件
wb_sum.save("C:\\Users\\user\\Desktop\\费用统计2023年1-9月\\分产品费用明细表-2023年9月-汇总-pythonTest.xlsx")
for i in range(0, len(wb_units)):
wb_units[i].close
wb_sum.close