如何用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
相关产品推荐
相关产品推荐

