You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas按工作表名称或索引提取指定表生成新Excel文件?

提取Excel指定工作表生成新文件的解决方案

方法一:使用openpyxl(完整保留格式/公式/图表)

适合需要完整保留工作表格式、公式、图表等内容的场景,仅支持.xlsx/.xlsm格式文件。

首先安装依赖:

pip install openpyxl

实现代码:

from openpyxl import load_workbook
from openpyxl.workbook import Workbook

def extract_target_sheets(source_file, output_file, target_sheets):
    # 加载源Excel文件
    source_wb = load_workbook(source_file, read_only=False)
    # 创建空的新工作簿
    new_wb = Workbook()
    # 删除新工作簿默认生成的空白工作表
    new_wb.remove(new_wb.active)
    
    # 提取源文件的工作表列表,用于索引匹配
    source_sheets = source_wb.worksheets
    
    for target in target_sheets:
        if isinstance(target, str):
            # 通过工作表名称获取对象
            sheet = source_wb[target]
        elif isinstance(target, int):
            # 通过索引获取对象,支持负索引(-1对应最后一个工作表)
            sheet = source_sheets[target]
        else:
            raise ValueError("目标参数仅支持字符串(工作表名)或整数(索引)")
        
        # 将目标工作表复制到新工作簿
        new_wb.copy_worksheet(sheet)
    
    # 保存新文件
    new_wb.save(output_file)

# 调用示例
if __name__ == "__main__":
    # 按名称提取
    extract_target_sheets("source.xlsx", "result_by_name.xlsx", ["Sheet16", "Sheet23"])
    # 按索引提取(0=第一个,15=第16个,22=第23个,-1=最后一个)
    extract_target_sheets("source.xlsx", "result_by_index.xlsx", [0, 15, 22, -1])
    # 混合名称和索引提取
    extract_target_sheets("source.xlsx", "result_mixed.xlsx", ["Sheet1", 22, -1])

注意事项:

  • 如果源文件包含宏(.xlsm),加载时需添加keep_vba=True参数:load_workbook(source_file, read_only=False, keep_vba=True)
  • 复杂的工作表元素(如切片器、部分控件)可能无法完整复制,视文件复杂度而定

方法二:使用pandas(仅提取数据)

适合只需要提取工作表数据,无需保留格式、公式的场景,支持多种Excel格式。

首先安装依赖:

pip install pandas openpyxl

实现代码:

import pandas as pd

def extract_sheets_data(source_file, output_file, target_sheets):
    # 获取源文件所有工作表名称
    all_sheet_names = pd.ExcelFile(source_file).sheet_names
    
    with pd.ExcelWriter(output_file) as writer:
        for target in target_sheets:
            if isinstance(target, str):
                sheet_name = target
            elif isinstance(target, int):
                # 转换索引为工作表名称,支持负索引
                sheet_name = all_sheet_names[target]
            else:
                raise ValueError("目标参数仅支持字符串(工作表名)或整数(索引)")
            
            # 读取工作表数据并写入新文件
            df = pd.read_excel(source_file, sheet_name=sheet_name)
            df.to_excel(writer, sheet_name=sheet_name, index=False)

# 调用示例
extract_sheets_data("source.xlsx", "result_data.xlsx", ["Sheet16", 22, -1])

注意事项:

  • 此方法仅保留单元格的数值结果,公式、格式、图表等会丢失
  • 大文件处理时,pandas的内存占用可能较高

内容的提问来源于stack exchange,提问作者dimzev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:01:26