使用python将Excel文件中的所有sheet页拆分成独立的工作簿文件,保留所有格式和内容。

使用 Python 将 Excel 文件中的所有 sheet 页拆分成独立的工作簿文件,并保留所有格式和内容(包括公式、样式、图表、数据验证等) ,是一个常见的需求。

然而,标准的 Python 数据处理库如 pandasopenpyxl 不支持完整地复制格式和图表等内容 。要实现“原模原样”的复制,我们需要借助更强大的库:


✅ 推荐方案:使用 win32com.client(仅限 Windows)

📌 原理说明:

  • win32com.client 是 Python 对 Windows COM 自动化接口的封装。
  • 它可以调用 Microsoft Excel 应用程序本身的功能,从而实现完全保留原始格式、图表、公式等 的复制。

✅ 步骤如下:

1. 安装依赖

pip install pywin32

 ⚠️ 注意:此方法只能在 Windows 系统 上运行,且需要安装了 Microsoft Excel

2. 示例代码

import os
import win32com.client as win32

def split_excel_sheets_to_workbooks(input_file, output_folder=None):
    """
    将一个Excel文件的所有sheet分别保存为独立的工作簿文件。
    
    参数:
        input_file (str): 原始Excel文件路径
        output_folder (str): 输出目录(默认为原文件所在目录)
    """
    # 如果未指定输出目录,则创建与原文件同目录下的 "split_sheets" 文件夹
    if not output_folder:
        base_dir = os.path.dirname(input_file)
        output_folder = os.path.join(base_dir, "split_sheets")

    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # 启动 Excel 应用程序
    excel = win32.Dispatch("Excel.Application")
    excel.Visible = False  # 不显示 Excel 界面
    excel.DisplayAlerts = False  # 禁止弹窗

    try:
        # 打开原始工作簿
        workbook = excel.Workbooks.Open(os.path.abspath(input_file))

        for sheet in workbook.Sheets:
            # 复制当前工作表到新工作簿
            sheet.Copy()
            new_workbook = excel.ActiveWorkbook

            # 构建保存路径
            safe_sheet_name = sheet.Name.replace('/', '_').replace('\\', '_') \
                                        .replace('?', '_').replace('*', '_') \
                                        .replace('[', '_').replace(']', '_')
            output_path = os.path.join(output_folder, f"{safe_sheet_name}.xlsx")

            # 保存并关闭新工作簿
            new_workbook.SaveAs(Filename=output_path)
            new_workbook.Close(SaveChanges=False)

        workbook.Close(SaveChanges=False)
        excel.Quit()

        print(f"✅ 拆分完成,文件已保存至: {output_folder}")
    except Exception as e:
        print(f"❌ 发生错误: {e}")
    finally:
        del excel  # 释放资源

# 使用示例
if __name__ == "__main__":
    input_excel = r"C:\path\to\your\file.xlsx"
    split_excel_sheets_to_workbooks(input_excel)

✅ 输出效果:

  • 每个 sheet 都会被保存为一个独立的 .xlsx 文件;
  • 文件名以 sheet 名命名(自动替换非法字符);
  • 保留所有原始格式、图表、公式、批注、数据验证、条件格式等
  • 输出目录默认为原文件目录下的 split_sheets 文件夹。

🧪 测试建议:

  • 可先用一个小的测试 Excel 文件尝试;
  • 确保你的电脑上已安装 Microsoft Excel
  • 该脚本不会修改原文件,只读取并导出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值