python实现报送数据合并

#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

 

posted @ 2023-10-12 11:09  汶淏  阅读(47)  评论(0)    收藏  举报