对于您正在使用的筛选过程,您无需打开工作簿。您可以使用 openpyxl 加载文件并获取工作表名称。
试试这个代码:
from pathlib import Path
import openpyxl
wb = openpyxl.load_workbook('C:/Prueba/GOOG.xlsm')
print("All Sheets:", wb.sheetnames)
def included(sheet_name):
l = ['Report_Data', 'Report_Main']
if sheet_name in l:
return True
wb.__Sheets__ = filter(included, wb.sheetnames) # wb.__Sheets__ doesn't work of course..
print(list(wb.__Sheets__))
如果您更喜欢使用 Win32 并实际打开 Excel,您可以使用以下代码:
from win32com.client import Dispatch
import win32com
import win32com.client as win32
excel = win32com.client.dynamic.Dispatch('Excel.Application')
excel.Visible = True
wb = excel.Workbooks.Open("C:/Prueba/GOOG.xlsm")
print("All Sheets:",[wb.Sheets(i+1).Name for i in range(wb.Sheets.Count)])
def included(sheet_name):
l = ['Report_Data', 'Report_Main']
if sheet_name in l:
return True
ShtList = filter(included, [wb.Sheets(i+1).Name for i in range(wb.Sheets.Count)])
print(list(ShtList))
excel.Quit()
这是删除多余工作表并将工作簿另存为新文件的完整代码。
from win32com.client import Dispatch
import win32com
import win32com.client as win32
from shutil import copyfile
excel = win32com.client.dynamic.Dispatch('Excel.Application')
excel.Visible = True
filename = "C:/Prueba/GOOG.xlsm"
filenamenew = "C:/Prueba/GOOG.New.xlsm"
copyfile(filename, filenamenew)
wb = excel.Workbooks.Open(filenamenew)
print("All Sheets:",[wb.Sheets(i+1).Name for i in range(wb.Sheets.Count)])
def remove(sheet_name):
l = ['Report_Data', 'Report_Main']
if not sheet_name in l:
return True
ShtList = list(filter(remove, [wb.Sheets(i+1).Name for i in range(wb.Sheets.Count)]))
print("DelLst:",ShtList)
excel.DisplayAlerts = False # new prompt for delete
for s in ShtList:
print("del", s)
wb.Worksheets(s).Delete()
wb.Save()
excel.DisplayAlerts = True
excel.Quit()