Есть ли альтернатива Scripting.FileSystemObject в Excel 2011 VBA для Mac? - PullRequest
1 голос
/ 13 января 2011

Ответы на Как я могу установить / использовать «Scripting.FileSystemObject» в Excel 2011 для MAC? , кажется, указывают, что использование Scripting.FileSystemObject в Excel 2010 для 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 job ?, service?) Будет открывать файл excel каждые 10 минут, что, в свою очередь, будет выглядеть в каталог, преобразуйте все остальные файлы Excel в файлы .csv, а затем закройте его самостоятельно.

Без Scripting.FileSystemObject, как я могу сделать это преобразование Excel в CSV полностью автоматическим на Mac?

1 Ответ

1 голос
/ 14 января 2011

Единственный способ, которым я могу думать, - это использовать функцию «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
...