我有一个MS Excel工作簿,我想打开然后循环选项卡,为原始工作簿中的每个选项卡创建并保存工作簿。所以我打开文件A,有标签1,2,3,并创建并保存文件B,C,D,每个文件都有一个唯一的标签。我有VBA的代码,它创建了工作表的单个副本,但是当我尝试在Python中执行此操作时,我最终得到了每个工作簿中的所有选项卡。以下是有效的VBA:
Sub ConvertTabsToFiles()
Dim currPath As String
currPath = Application.ActiveWorkbook.Path
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each xWs In ThisWorkbook.Sheets
xWs.Copy
Application.ActiveWorkbook.SaveAs Filename:=currPath & "\" & xWs.Name & ".xlsx"
Application.ActiveWorkbook.Close False
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
以下是不起作用的Python代码:
xlApp = win32.com.client.Dispatch("Excel.Application")
xlwb = xlApp.Workbooks.Open("C:\Inputfile.xlsx")
for sheet in xlwb.Worksheets:
sheet.Copy
xlApp.ActiveWorkbook.SaveAs("C:\Users\user\AppData\Local\Temp\\"+ sheet.Name+".xlsx")
非常感谢你的帮助,我很难过。提前谢谢。
答案 0 :(得分:3)
您可以通过SaveAs方法保存单张图片:
for sheet in xlwb.Worksheets:
filename = r"C:\Users\user\AppData\Local\Temp\" + sheet.Name + ".xlsx"
sheet.SaveAs(filename)
print('Saved sheet to', filename)
注意我将'r'前缀添加到字符串中,否则反斜杠会被Python解释为特殊字符,除非doubled混淆了字符串。
答案 1 :(得分:3)
感谢Schollii,我能够走上正轨。以下是对我有用的东西,我希望它可以帮到你:
for sheet in xlwb.Worksheets:
xlApp = win32com.client.Dispatch("Excel.Application")
nwb = xlApp.WorkbookAdd()
sheet.Copy(Before=nwb.Sheet(1))
nwb.SaveAs("C:\Users\user\AppData\Local\Temp\\" +sheet.Name+ ".xlsx")
nwb.Close(True)
谢谢大家。特别是Schollii让我走上正轨。还要感谢TankorSmash的答案。
答案 2 :(得分:1)
对于新版本的excel,代码更改为
xlApp.WorkbookAdd()
到
xlApp.Workbooks.Add()