编写多个excel工作簿的更改脚本

2024-10-06 11:21:51 发布

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

我试图对一些excel工作簿(超过20本)进行大的修改。每个工作簿包含大约16个单独的工作表,我想编写一个脚本,在每个工作簿中循环,工作表包含在其中,并编写/修改我需要的单元格。我需要保留所有的字符串验证、宏和格式。所有的工作簿都是2007格式的。在

我已经看过pythonexcel库和PHPexcel,但是宏、按钮、公式、字符串验证和格式在编写新工作簿时没有保留。有没有一个简单的方法可以做到这一点,或者我将不得不单独打开每个工作簿并提交更改。我尽量避免在VBscript中创建宏,并且必须单独打开每个工作簿来提交所需的更改。在


Tags: 方法字符串脚本格式excel按钮公式phpexcel
3条回答

{/strong>在使用{/strong>循环的文件名时,使用{/strong}的通配符来使用{/strong}命令。在

Function FileList(fldr As String, Optional fltr As String = "*.*") As Variant
    Dim sTemp As String, sHldr As String
    If Right$(fldr, 1) <> "\" Then fldr = fldr & "\" 'append backslash if not already supplied
    sTemp = Dir(fldr & fltr)
    If sTemp = "" Then
        FileList = False
        Exit Function
    End If
    Do
        sHldr = Dir
        If sHldr = "" Then Exit Do
        sTemp = sTemp & "|" & sHldr 'ensures an array is returned
     Loop
    FileList = Split(sTemp, "|")
End Function

再加上我的一些代码来利用它:

^{pr2}$

您还可以使用PyWin32库,使用典型的COM技术编写Python脚本。这使您可以使用Python进行处理,并且仍然保存每个工作簿中其他pythonexcel库可能无法处理的所有额外部分。在

我避免使用多个工作簿,如瘟疫,这是一个痛苦,如果这是一个持续的需求,那么我建议您回顾一下您的工作簿设计,看看是否可以合并回一个工作簿。我经常看到每个月保存的工作簿都应该有一个工作簿,其中一个工作表包含原始数据,每行表示一个月,然后是另一个显示工作表,用于查找用户选择的原始数据。这是一个非常大的概括,你很可能处于完全不同的情况。在

如果这是一次性的-我知道这不是你想要的,但我认为你最好使用VBA循环查看工作簿。类似(未经测试):

Excel 2003:

Sub AdjustMultipleFiles()
Dim lCount As Long
Dim wbLoopBook As Workbook
Dim wsLoopSheet As Worksheet

With Application
    .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False
End With

With Application.FileSearch
        .NewSearch
        '// Change path to suit
        .LookIn = "C:\MyDocuments"
        '// ALL Excel files
        .FileType = msoFileTypeExcelWorkbooks
        '// Uncomment if file naming convention needed
        '.Filename = "Book*.xls"

            '// Check for workbooks
            If .Execute > 0 Then
                '// Loop through all.
                For lCount = 1 To .FoundFiles.Count
                    '// Open Workbook x and Set a Workbook variable to it
                    Set wbLoopBook = Workbooks.Open(Filename:=.FoundFiles(lCount), UpdateLinks:=0)
                        '// Loop through all worksheets
                        For Each wsLoopSheet In wbLoopBook.Worksheets
                            '//Update your worksheets here...



                        Next wsLoopSheet
                    '// Close Workbook & Save
                    wbLoopBook.Close SaveChanges:=True
                    '// Release object variable
                    Set wbLoopBook = Nothing
            Next lCount
        End If

End With

With Application
    .ScreenUpdating = True: .DisplayAlerts = True: .EnableEvents = True
End With

End Sub

对于EXCEL 2007+:

^{pr2}$

Excel 2007+(文件系统对象-LateBinding)

Sub AdjustMultipleFiles()
    Dim wbLoopBook As Workbook
    Dim wsLoopSheet As Worksheet

    With Application
       .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False
    End With

    With CreateObject("Scripting.FileSystemObject")
        '// Change path to suit
        For Each File In .GetFolder("C:\Documents").Files
            '// ALL Excel 2007 files
            If .GetExtensionName(File) = "xlsx" Then
                '// Open Workbook x and Set a Workbook variable to it
                Set wbLoopBook = Workbooks.Open(Filename:=File.Path, UpdateLinks:=0)
                '// Loop through all worksheets
                For Each wsLoopSheet In wbLoopBook.Worksheets
                    '//Update your worksheets here...
                Next wsLoopSheet
                '// Close Workbook & Save
                wbLoopBook.Close SaveChanges:=True
                '// Release object variable
                Set wbLoopBook = Nothing
            End If
        Next File
    End With


    With Application
        .ScreenUpdating = True: .DisplayAlerts = True: .EnableEvents = True
    End With
End Sub

相关问题 更多 >