Преобразование CSV в XLS не работает с Office 2003 - PullRequest
0 голосов
/ 14 января 2019

При попытке запустить указанный ниже сценарий на ПК с MS Office 365 он работал нормально, но выдает ошибку, если я пытаюсь запустить этот же сценарий на ПК с установленным MS Office 2003.

Windows-скрипт Хост
Линия 36
Чар 17
Ошибка метода SaveAs класса Workbook
Код 800A03EC
Источник Miscrosoft Office Excel

Цель: Конвертировать все файлы CSV в указанной папке в XLS каждую минуту. Как упоминалось выше, он отлично работает на машине, на которой установлен Office 365, но выдает ошибку, если я запускаю его на машине с установленным Office 2003. они оба отдельные машины. Пожалуйста, помогите мне решить эту проблему совместимости, чтобы я мог запустить этот скрипт на компьютере с установленным MS Office 2003.

Dim waittime: waittime = 1 * 60 * 1000
'Constants
Const xlOpenXMLWorkbook = 51             '(without macro's in 2007-2016, xlsx)
Const xlOpenXMLWorkbookMacroEnabled = 52 '(with or without macro's in 2007-2016, xlsm)
Const xlExcel12 = 50                     '(Excel Binary Workbook in 2007-2016 with or without macro's, xlsb)
Const xlExcel8 = 56

Do
    ' Extensions for old and new files
    strExcel = "xls"
    strCSV = "csv"

    ' Set up filesystem object for usage
    Set objFSO = CreateObject("Scripting.FileSystemObject")

   ' Access the folder to process
    Set objFolder = objFSO.GetFolder("C:\Users\User\Desktop\CSV to XL")

    ' Load Excel (hidden) for conversions
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = False
    objExcel.DisplayAlerts = False

    ' Process all files
    For Each objFile In objFolder.Files
        ' Get full path to file
        strPath = objFile.Path
        ' Only convert CSV files
        If LCase(objFSO.GetExtensionName(strPath)) = LCase(strCSV) Then
            ' Display to console each file being converted
            'WScript.Echo "Converting """ & strPath & """"
            ' Load CSV into Excel and save as native Excel file
            Set objWorkbook = objExcel.Workbooks.Open(strPath, False, True)
            objWorkbook.SaveAs Replace(strPath, strCSV, strExcel), xlOpenXMLWorkbook
            objWorkbook.Close False
            Set objWorkbook = Nothing
        End If
    Next

    WScript.Sleep (waittime)
Loop

1 Ответ

0 голосов
/ 14 января 2019

Значение xlOpenXMLWorkbook перечисления xlFileFormat сохраняет файл как книгу Open XML , которая поддерживается только с Office 2007 . Теперь, поскольку вы хотите сохранить его в формате файла Excel 2003, вы должны использовать соответствующее значение для этого , которое в этом случае будет xlExcel8.

Вот список всех значений для перечисления xlFileFormat:

Перечисление xlFileFormat (Excel) .

Итак, вам нужно заменить xlOpenXMLWorkbook из вашего вызова метода SaveAs на xlExcel8:

objWorkbook.SaveAs outputFilePath, xlExcel8 

Edit:

Если у вас установлен только Office 2003, похоже, что xlExcel8 не будет поддерживаться, поэтому вам нужно использовать xlExcel9795. Сначала добавьте эту константу вверху вашего файла:

Const xlExcel9795 = 43

Затем вы можете передать его методу SaveAs следующим образом:

objWorkbook.SaveAs outputFilePath, xlExcel9795 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...