问题是:
我有一个包含许多工作表(“Sheet1”、“Sheet2...”)的文件,需要使用某些工作表(例如:“Sheet16”、“Sheet23”)或按工作表索引创建一个新文件,例如 0(第一个)、15、22、-1(最后一个)。 可以帮助我吗?
正如 Suraj 已经提到的,您可以使用
xlsxwriter
来达到预期的目标。这是一个稍微简单且更具交互性的方法来解决您的问题,使用 pandas
。
要从 Excel 文件中提取单个工作表,您可以使用
ExcelFile
的 pandas
属性。以下是将工作表提取为数据框的方法:
xls = pd.ExcelFile(filename)
target_sheets = ['Sheet16', 'Sheet23', 'Sheet32']
或者您可以将
target_sheets
设置为索引列表,例如 [16, 23, 32]
for sheet in target_sheets:
if isinstance(sheet, int):
sheet = xls.sheet_names[sheet]
df = pd.read_excel(xls, sheet)
print(df)
这将为您提供作为 pandas 数据框的各个工作表,您可以根据需要查看/修改。如果您想创建一个合并列出的工作表数量的单独 Excel 文件,您可以使用
pd.ExcelWriter
。这是一个例子:
writer = pd.ExcelWriter(outfile)
for sheet in target_sheets:
if isinstance(sheet, int):
sheet = xls.sheet_names[sheet]
df = pd.read_excel(xls, sheet)
print(df)
df.to_excel(writer, sheet_name=sheet, index=False)
writer.save()
随意调整变量并确保包含
import pandas as pd
。
正如 BigBen 在评论中提到的,你应该使用 xl 特定的库。
一种方法是使用 xlsxwriter,这样的代码可能适合您的用例:
import xlsxwriter
# Open org workbook
wb1 = xlsxwriter.Workbook('workbook.xlsx')
# Open the destination workbook
wb2 = xlsxwriter.Workbook('dest.xlsx')
# define the sheetnames that need to be copied
sheets = ["Sheet1", "Sheet2"]
for sheet in sheets:
ws1 = wb1.get_sheet_by_name(sheet)
# Create a new worksheet
ws2 = wb2.add_worksheet(sheet)
# Copy data
ws2.copy_worksheet(ws1)
# Close the workbooks
wb_source.close()
wb_dest.close()
openpyxl也可以使用与上面示例类似的代码结构