如何使用xlutils、xlwt、xlrd和python删除excel文件中的现有工作表

2024-04-26 23:53:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图搜索很多地方,但是没有看到任何关于如何使用xlutils或xlwt和python删除excel文件中现有工作表的示例代码片段。请问谁能帮我?


Tags: 文件代码示例地方excelxlwtxlutils
3条回答

我只是想用大卫给出的答案来确认我的工作。下面是一个例子,我有一个电子表格(工作簿),其中有40多张工作表,需要拆分成它们自己的工作簿。我复制了主工作簿,删除了除一个工作表以外的所有工作表,并将其保存到新的电子表格中:

from xlrd import open_workbook
from xlutils import copy

workbook = open_workbook(filepath)

# Process each sheet
for sheet in workbook.sheets():
    # Make a copy of the master worksheet
    new_workbook = copy.copy(workbook)

    # for each time we copy the master workbook, remove all sheets except
    #  for the curren sheet (as defined by sheet.name)
    new_workbook._Workbook__worksheets = [ worksheet for worksheet in new_workbook._Workbook__worksheets if worksheet.name == sheet.name ]

    # Save the new_workbook based on sheet.name
    new_workbook.save('{}_workbook.xls'.format(sheet.name))

我刚刚处理过这个问题,虽然这通常不是一个好的编码选择,但是您可以使用内部工作簿来访问和设置工作簿对象的工作表。

write_book._Workbook__worksheets = [write_book._Workbook__worksheets[0]]

这将删除除与工作簿关联的第一个工作表之外的所有内容

以下方法可以满足您的需要:

def deleteAllSheetBut(workingFolder, xlsxFILE, sheetNumberNotToDelete=1):
import win32com.client as win32
import os
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = False
excel.DisplayAlerts = False
wb = excel.Workbooks.Open( os.path.join( workingFolder, xlsxFILE ) )
for i in range(1, wb.Worksheets.Count):
    if i != sheetNumberNotToDelete:
        wb.Worksheets(i).Delete()
wb.Save()
excel.DisplayAlerts = True
excel.Application.Quit()
return

相关问题 更多 >