Python 将每个电子表格导出到单独的工作簿(VBA除外)

Python 将每个电子表格导出到单独的工作簿(VBA除外),python,excel,vba,python-3.x,Python,Excel,Vba,Python 3.x,我有大量的Excel工作簿和大量的工作表 这是一个简单的解决方案,使用VBA将每张工作表导出到不同的工作簿文件中 主要问题是,它是缓慢的 子拆分簿 MyPath=ThisWorkbook.Path 对于此工作簿中的每个sht。工作表 收到 ActiveSheet.Cells.Copy ActiveSheet.Cells.Paste特殊粘贴:=xlPasteValues ActiveSheet.Cells.Paste特殊粘贴:=xlPasteFormats ActiveWorkbook.SaveA

我有大量的Excel工作簿和大量的工作表

这是一个简单的解决方案,使用VBA将每张工作表导出到不同的工作簿文件中

主要问题是,它是缓慢的

子拆分簿 MyPath=ThisWorkbook.Path 对于此工作簿中的每个sht。工作表 收到 ActiveSheet.Cells.Copy ActiveSheet.Cells.Paste特殊粘贴:=xlPasteValues ActiveSheet.Cells.Paste特殊粘贴:=xlPasteFormats ActiveWorkbook.SaveAs_ 文件名:=MyPath&\XXX&sht.Name&.xlsx ActiveWorkbook.Close savechanges:=False 下一步 端接头
寻找任何与VBS、Python相关的想法。。。因为基于互联网研究,我找不到任何相关信息。

所以这里有一些观察结果:

您可以关闭那些不需要的、消耗资源的功能,例如Application.ScreenUpdate。我借了一个可以关掉普通物品的潜艇。 与语句一起使用 仅使用UsedRange而不是整个工作表 您可能会忽略这一点,因为我忽略了粘贴的格式部分,但只是通过设置转换的.Value=.Value来转换为值

Option Explicit

Public Sub Splitbook()

    Dim MyPath As String
    Dim sht As Worksheet

    appTGGL bTGGL:=False

    MyPath = ThisWorkbook.Path

    For Each sht In ThisWorkbook.Sheets

        sht.Copy

        With ActiveSheet.UsedRange
            .Value = .Value
        End With

        ActiveWorkbook.SaveAs _
        Filename:=MyPath & "\XXX" & sht.Name & ".xlsx"

        ActiveWorkbook.Close savechanges:=False

    Next sht

    appTGGL bTGGL:=True

End Sub


Public Sub appTGGL(Optional bTGGL As Boolean = True) 'https://stackoverflow.com/questions/36467663/make-the-vba-code-go-faster

    With Application
        .ScreenUpdating = bTGGL
        .EnableEvents = bTGGL
        .DisplayAlerts = bTGGL
        .Calculation = IIf(bTGGL, xlCalculationAutomatic, xlCalculationManual)
        .CutCopyMode = False
        .StatusBar = vbNullString
    End With

End Sub

VBA是最快的。你的代码很慢,用任何其他语言做的事情都会更慢。我假设你必须定期这样做,就像为每张工作表创建新文件一样。如果是这样,您是否考虑过为每个工作表创建一次文件,然后只参考这些文件中的工作表?@AMagpie有关于代码优化的建议吗?@Zac这就是他们想要的。。。。不做决定。。。目前正试图找到更快的方法。你可以先做很多事情,比如应用程序、屏幕更新、计算模式等。因此,这不是真正的代码优化——尽管你会在这里找到很多优化信息。优化问题可能是代码审查站点的候选问题。您是否应该在最后重新打开appTGGL?@ajd绝对应该。谢谢