Преобразование файлов xls / xlsx (все листы) в csv с использованием VBScript (с разделителями по точкам с запятой)

Мне нужно преобразовать файл excel (* .xls, * .xlsx), включая ВСЕ рабочие листы внутри файла CSV, разбитого на лист. Выходные CSV-файлы должны быть названы SheetName (-ами) и разделены запятыми вместо запятых. Я сделал это, связав несколько сценариев VBS в один, но у меня все еще есть ошибка. Мой код ниже выполняет преобразование для всех листов в файле XLS, разделенных точками с запятой, именованных листами. НО небольшая ошибка заключается в том, что если имеется более 1 листа, содержимое следующих листов перезаписывается первым листом. Что там не так? Я запускаю его в cmd с помощью: xls_to_csv.vbs ExcelFile.xls OutPutdir

'------------------- SET SEMI-COLON DELIMITER VIA WIN REGISTERS --------------- strDelimiter = ";" strSystemDelimiter = "" ' This will be used to store the current sytem value Const HKEY_CURRENT_USER = &H80000001 ' Get the current List Separator (Regional Settings) from the registry strKeyPath = "Control Panel\International" strValueName = "sList" strComputer = "." Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv") objRegistry.GetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strSystemDelimiter ' Set it temporarily to our custom delimiter objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strDelimiter '----------------------------- CONVERT XLS TO CSV ------------------------------ Dim strExcelFileName Dim strCSVFileName Dim objFSO Set objFSO = CreateObject("scripting.filesystemobject") strPath = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(1)) strExcelFileName = WScript.Arguments.Item(0) 'file name to parses rem get path where script is running Set fso = CreateObject ("Scripting.FileSystemObject") 'use this to find current path strScript = Wscript.ScriptFullName strScriptPath = fso.GetAbsolutePathName(strScript & "\..") rem If the Input file is NOT qualified with a path, default the current path LPosition = InStrRev(strExcelFileName, "\") if LPosition = 0 Then 'no folder path strExcelFileName = strScriptPath & "\" & strExcelFileName strScriptPath = strScriptPath & "\" else 'there is a folder path, use it for the output folder path also strScriptPath = Mid(strExcelFileName, 1, LPosition) End If rem msgbox LPosition & " - " & strExcelFileName & " - " & strScriptPath ' use this for debugging Dim objXL Dim objWorkBook, local Set objXL = CreateObject("Excel.Application") Set objWorkBook = objXL.Workbooks.Open(strExcelFileName) objXL.DisplayAlerts = False rem loop over worksheets For Each sheet In objWorkBook.Sheets 'only saveAS sheets that are NOT empty if objXL.Application.WorksheetFunction.CountA(sheet.Cells) <> 0 Then rem sheet.Rows(1).delete ' this will remove Row 1 or the header Row local = true call objWorkBook.SaveAs(strPath & "\" & sheet.Name & ".csv", 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, local) End If Next rem clean up objWorkBook.Close objXL.quit Set objXL = Nothing Set objWorkBook = Nothing Set fso = Nothing '------------------------- RETURN REGISTRY CHANGES BACK -------------------- ' Reset the system setting to its original value objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strSystemDelimiter rem end script 

Вы пытаетесь сохранить рабочий лист, но вы используете объект WorkBook. Попробуйте использовать объект WorkSheet, который вы извлекли, с помощью оператора For

  Dim WorkSheet For Each WorkSheet In objWorkBook.Sheets If objXL.Application.WorksheetFunction.CountA(WorkSheet.Cells) <> 0 Then WorkSheet.SaveAs strPath & "\" & WorkSheet.Name & ".csv", 6 End If Next 

Это работает для меня.

Я изменил ваш «лист» на «WorkSheet», чтобы подчеркнуть разницу. Конечно, «лист» или любое другое имя объекта будет работать нормально.

Мое предложение было бы использовать для этого разные языки. Редактирование записей в реестре ради изменения разделителя – это, по крайней мере, «хакерский».

Это можно сделать с помощью простого скрипта Python и использования пакетов xlrd и csv. Это позволит использовать его на нескольких платформах. Вы можете легко преобразовать свой скрипт Python в .exe с помощью Py2exe.

  • Как сохранить данные в файле excel xls с помощью perl?
  • App_WorkbookOpen не отвечает при открытии книг XLS
  • Использование JExcelApi для записи BigInteger в xls с помощью $ и, форматирование
  • Создание XML-файла из Excel с 50k строк
  • Экспорт в файл excel, разрыв строки ячейки, ALT + ВВОД
  • Создание файлов Excel с # в имени столбца
  • Mac: как конвертировать файлы Excel (и другие) в PDF программно
  • Как сделать текст подходящим для размера столбца xls в java
  • Чтение файла XLS из VB6
  • Слишком сложный кодекс запаха для решения (из-за двух отдельных библиотек) c ++
  • Как я могу читать файлы .xls (Excel) с помощью PHP?
  • Давайте будем гением компьютера.