当前位置:首页>python>哈萨克斯坦会计人宝藏教程!用Python一键合并哈萨克斯坦电子发票明细,告别季度报表手动汇总

哈萨克斯坦会计人宝藏教程!用Python一键合并哈萨克斯坦电子发票明细,告别季度报表手动汇总

  • 2026-10-11 08:40:29
哈萨克斯坦会计人宝藏教程!用Python一键合并哈萨克斯坦电子发票明细,告别季度报表手动汇总

在哈萨克斯坦从事会计工作的朋友,几乎都会遇到一个共同难题:

哈萨克斯坦电子发票平台(ЭСФ)导出的发票明细,仅支持按季度下载。

如果需要核对 2—3 年的历史发票,手动合并几十张表格不仅效率极低,还非常容易出错。

如果你也希望提高效率、减少重复劳动,不妨使用 Python 自动完成表格合并,只需几分钟,就能把所有季度发票自动汇总成一张总表。

重要说明

Python 无法自动登录发票系统并下载数据,这一步必须由会计手动完成。

但下载后的多表格合并,可以完全交给 Python 自动化处理,安全、快速、零错误。 

准备工作(只需 5 步,零基础可操作)

第一步:安装 Python 环境

在电脑上安装 Python 程序(建议 3.10 及以上版本)。

安装教程网络上非常丰富,全程默认设置即可,完成后你的电脑就具备运行自动化脚本的能力。

第二步:从电子发票系统导出所有季度明细

登录哈萨克斯坦电子发票平台,按季度依次导出发票明细 Excel 文件。

例如:

•2024年6月—9月

•2024年10月—12月

•2025年1月—3月

•2025年4月—6月

•2025年7月—9月

•2025年10月—12月

将所有导出的 Excel 文件,统一放在一个新文件夹中。

第三步:新建 Python 脚本文件

1.在发票文件夹内,右键新建一个文本文档(.txt)。

2.将文末提供的代码完整复制进去。

3.保存并关闭文件。

第四步:修改文件后缀为 .py

将新建的文本文档后缀从 .txt 改为 .py。

修改后图标会变为 Python 文件图标,表示脚本已生效。

第五步:一键运行合并

双击运行 .py 文件,程序会自动:

1.读取文件夹内所有发票 Excel

2.将所有表格完整合并到一张总表

3.同时保留所有原始表格

4.自动输出最终合并文件

整个过程无需手动操作,一分钟即可完成。

合并效果说明(最终输出文件)

运行后会自动生成一个合并后的 Excel 文件,包含两部分内容:

1. 第一个工作表:合并输出(总表)

所有季度发票数据自动汇总到一张表,表头统一、无重复、格式规范,可直接用于对账、统计、申报。

2. 后续工作表:原始季度表

每个原始文件都会被完整保留,格式、公式、样式完全不变,方便回溯核对。

为什么推荐这种方式?

1.安全合规:不登录系统、不抓数据、不破解接口,仅处理本地已下载文件。

2.格式完全保留:保留颜色、边框、公式、列宽、行高,不会乱版。

3.速度极快:几十张表几秒合并完成。

4.零错误:避免手动复制粘贴造成的漏行、错行、乱序。

5.长期可用:适用于所有年度、所有季度、表头一致的发票明细。

完整 Python 合并代码(直接复制使用)

import pandas as pdimport openpyxlfrom openpyxl.styles import Font, PatternFill, Border, Side, Alignmentimport osfrom pathlib import Pathdef copy_cell_style(source_cell, target_cell):    """复制单元格样式(字体、填充、边框、对齐、数字格式)"""    # 字体    target_cell.font = Font(        name=source_cell.font.name,        size=source_cell.font.size,        bold=source_cell.font.bold,        italic=source_cell.font.italic,        color=source_cell.font.color    )    # 填充色    target_cell.fill = PatternFill(        fill_type=source_cell.fill.fill_type,        start_color=source_cell.fill.start_color,        end_color=source_cell.fill.end_color    )    # 边框    target_cell.border = Border(        left=source_cell.border.left,        right=source_cell.border.right,        top=source_cell.border.top,        bottom=source_cell.border.bottom    )    # 对齐方式    target_cell.alignment = Alignment(        horizontal=source_cell.alignment.horizontal,        vertical=source_cell.alignment.vertical,        wrap_text=source_cell.alignment.wrap_text    )    # 数字格式    target_cell.number_format = source_cell.number_formatdef copy_sheet_format(source_ws, target_ws):    """复制Sheet格式(列宽、行高)"""    # 复制列宽    for col in source_ws.columns:        col_letter = col[0].column_letter        target_ws.column_dimensions[col_letter].width = source_ws.column_dimensions[col_letter].width    # 复制行高    for row in range(1, source_ws.max_row + 1):        target_ws.row_dimensions[row].height = source_ws.row_dimensions[row].heightdef merge_excel_files(excel_dir, output_file="合并报表文件-棉花树下好乘凉.xlsx"):    """    合并多个Excel文件:    - Sheet1:汇总所有文件数据    - Sheet2及以后:保留原文件所有Sheet(命名:原文件名_原Sheet名)    """    # 1. 初始化输出工作簿    output_wb = openpyxl.Workbook()    # 删除默认的Sheet,重新创建汇总Sheet(Sheet1)    output_wb.remove(output_wb.active)    summary_ws = output_wb.create_sheet(title="合并输出")  # 汇总表固定为Sheet1    has_header = False  # 标记是否已添加表头(仅添加第一个文件的表头)    # 2. 遍历所有Excel文件    excel_files = list(Path(excel_dir).glob("*.xlsx"))    if not excel_files:        print("未找到Excel文件!")        return    # 用于记录原文件Sheet,避免重复命名    sheet_count = 1  # Sheet1是汇总表,从Sheet2开始计数    for file in excel_files:        file_name = file.stem  # 原文件名(不含后缀)        print(f"正在处理文件:{file_name}.xlsx")        # 用openpyxl读取原文件(保留格式)        source_wb = openpyxl.load_workbook(file, data_only=False)  # data_only=False保留公式和格式        # 3. 提取当前文件所有Sheet数据,写入汇总表(Sheet1)        for source_sheet_name in source_wb.sheetnames:            source_ws = source_wb[source_sheet_name]            # 获取当前Sheet的有效数据范围(排除空行空列)            max_row = source_ws.max_row            max_col = source_ws.max_column            if max_row == 0 or max_col == 0:                continue  # 跳过空Sheet            # 写入汇总表:首行作为表头(仅第一次写入)            start_row = summary_ws.max_row + 1            for row in range(1, max_row + 1):                for col in range(1, max_col + 1):                    source_cell = source_ws.cell(row=row, column=col)                    target_cell = summary_ws.cell(row=start_row + row - 1, column=col)                    # 写入单元格值(保留公式)                    if source_cell.value is not None:                        target_cell.value = source_cell.value                    # 复制单元格样式                    copy_cell_style(source_cell, target_cell)            # 仅第一次写入时,复制表头行高和列宽            if not has_header:                copy_sheet_format(source_ws, summary_ws)                has_header = True            # 4. 原封不动复制当前Sheet到输出文件(Sheet2及以后)            sheet_count += 1            new_sheet_name = f"{file_name}_{source_sheet_name}"  # 避免重名:原文件名_原Sheet名            # 若Sheet名过长,截取前30个字符(Excel Sheet名最大31字符)            if len(new_sheet_name) > 31:                new_sheet_name = new_sheet_name[:30] + "..."            # 创建新Sheet并复制内容和格式            new_ws = output_wb.create_sheet(title=new_sheet_name)            # 复制数据和样式            for row in range(1, max_row + 1):                for col in range(1, max_col + 1):                    source_cell = source_ws.cell(row=row, column=col)                    target_cell = new_ws.cell(row=row, column=col)                    if source_cell.value is not None:                        target_cell.value = source_cell.value                    copy_cell_style(source_cell, target_cell)            # 复制列宽和行高            copy_sheet_format(source_ws, new_ws)        source_wb.close()  # 关闭原文件,释放资源    # 5. 保存合并后的文件    output_wb.save(output_file)    print(f"\n✅ 合并完成!输出文件:{os.path.abspath(output_file)}")    print(f"📊 汇总表:Sheet1(包含所有文件数据)")    print(f"📋 原文件Sheet:Sheet2及以后(命名格式:原文件名_原Sheet名)")# ------------------- 运行代码 -------------------if __name__ == "__main__":    # !!!关键:修改为你的Excel文件所在文件夹路径!!!    # 示例1:如果文件在桌面,路径类似 "C:/Users/admin/Desktop/Excel文件"    # 示例2:如果文件和代码在同一文件夹,路径写 "."    EXCEL_FOLDER = "."  # 此处替换为你的Excel文件文件夹路径    # 执行合并(输出文件默认名为"合并后的Excel文件.xlsx",可自定义)    merge_excel_files(excel_dir=EXCEL_FOLDER, output_file="合并报表文件-棉花树下好乘凉.xlsx")

本文原创,搬运请注明出处!

最新文章

随机文章