Python - Win32com - 打开工作簿并为每个选项卡创建一个新的 Excel 文件

use*_*821 0 python excel win32com

我有一个 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
Run Code Online (Sandbox Code Playgroud)

以下是不起作用的 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")
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助,我很难过。提前致谢。

Oli*_*ver 5

您可以通过 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)
Run Code Online (Sandbox Code Playgroud)

注意我将 'r' 前缀放在字符串中,否则反斜杠会被 Python 解释为特殊字符,除非加倍混淆了字符串。


use*_*821 5

感谢 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)
Run Code Online (Sandbox Code Playgroud)

谢谢大家。特别是 Schollii 让我走上正轨。也感谢 TankorSmash 的回答。