1

如何在 Excel 2011 for MAC 中安装/使用“Scripting.FileSystemObject”的答案?似乎表明无法Scripting.FileSystemObject在 Excel 2010 for mac 中使用。

还有什么其他选择,所以我可以:

  • 获取特定目录中所有 Excel 文件的集合
  • 遍历每个文件中的每个工作表并将其导出到.csv文件

目前,每个文件都有六个步骤:

--how to create CSV files for all worksheets in a file:
1. open file
2. click "Developer"
3. click editor
4. click ThisWorkbook
5. copy in:
Sub save_all_csv()
    On Error Resume Next
    Dim ExcelFileName As String
    ExcelFileName = ThisWorkbook.Name
    For Each objWorksheet In ThisWorkbook.Worksheets
        Filename = "FILE-" & ExcelFileName & "-WORKSHEET-" & objWorksheet.Name & ".csv"
        objWorksheet.SaveAs Filename:="Macintosh HD:Users:edward:Documents:temporaryNoBackup:" & Filename, FileFormat:=xlCSV, CreateBackup:=False
    Next
    Application.DisplayAlerts = False
    Application.Quit
End Sub
6. click run (it closes by itself)

我正在寻找一种在 Mac 上自动执行此操作的方法,理想情况下,(cron 作业?,服务?)将每 10 分钟打开一次 excel 文件,然后在目录中查找,将所有其他 Excel 文件转换为.csv 文件,然后自行关闭。

在没有 Scripting.FileSystemObject 的情况下,如何在 Mac 上全自动完成 Excel 到 CSV 的转换?

4

2 回答 2

1

我能想到的唯一方法是使用“Dir”功能。由于 mac 支持文件名中的额外字符,通配符不适用于“Dir”功能。这是一个示例。

Function GetFileList(folderPath As String) As Collection
'mac vba does not support wildcards in DIR function

    Dim file As String
    Dim returnCollection As New Collection

    If Right$(folderPath, 1) <> "/" Then
        folderPath = folderPath & "/"
    End If

    file = Dir$(folderPath) 'setup initial file

    Do While Len(file)
        returnCollection.Add folderPath & file
        file = Dir$
    Loop

    Set GetFileList = returnCollection
End Function
于 2011-01-13T21:43:44.317 回答
0

您可以将 VBA 放在附加到 Excel 本身而不是工作簿的加载项(.xlam 文件)中。对于您的示例代码,唯一的修改是针对ActiveWorkbook而不是ThisWorkbook.

Sub save_all_csv()
    On Error Resume Next
    Dim ExcelFileName As String
    ExcelFileName = ActiveWorkbook.Name
    For Each objWorksheet In ActiveWorkbook.Worksheets
        Filename = "FILE-" & ExcelFileName & "-WORKSHEET-" & objWorksheet.Name & ".csv"
        objWorksheet.SaveAs Filename:="Macintosh HD:Users:edward:Documents:temporaryNoBackup:" & Filename, FileFormat:=xlCSV, CreateBackup:=False
    Next
    Application.DisplayAlerts = False
    Application.Quit
End Sub

您还可以利用 auto_open() 自动绑定热键。完成后,您只需打开工作簿、按热键并获取 CSV 文件。

Public Sub auto_open()

'   Register hotkeys

'   See key codes here
'   https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-onkey-method-excel

'   ^ = CTRL
'   % = ALT
'   + = SHIFT

    Application.OnKey "^+e", "save_all_csv" ' Ctrl+Shift+E will call save_all_csv()

End Sub
于 2021-02-15T22:20:27.137 回答