Эта статья описывает скрипт сохранения книги Excel в файлы формата CSV, причём если таблица содержит несколько листов (страниц), то каждый из них будет сохранён в отдельном CSV файле.

Для сравнения, функция экспорта в самом Excel записывает в CSV только один текущий лист.

А используя показанный ниже скрипт, можно выгружать в CSV все листы, то есть даже большую книгу (workbook).

Почему CSV

Файлы формата CSV хороши своей универсальностью – они поддерживаются в самых разных программах, и для них даже есть ODBC драйвер, позволяющий выполнять SQL запросы.

Когда нужен этот скрипт

Скрипт будет полезен, если требуется автоматиечки преобразовывать содержимое книги Excel в файлы CSV для использования в других программах, работающих именно с CSV.

Также скрипт позволяет сделать экспорт всех листов книги за одно выполнение. В Excel есть функция ручного экспорта, но она экспортирует только текущий лист, поэтому если листов несколько , то это придется сделать несколько раз.

Скрипт экспорта

Построен на использовании метода SaveAs, который вызывается для каждого видимого листа таблицы.

var xlCSV = 6;
var xlCSVMac = 22;
var xlCSVMSDOS = 24;
var xlCSVUTF8 = 62;
var xlCSVWindows = 23;

function excel_to_csv(filename,format)
{
    var fso = WScript.CreateObject("Scripting.FileSystemObject");

    var excel = WScript.CreateObject("Excel.Application");
    var workbook = excel.Workbooks.Open(filename, 0, true);

    for ( var i = 1; i <= workbook.Worksheets.Count; ++i ) 
        if ( workbook.Worksheets(i).Visible ) {
            WScript.Echo(workbook.Worksheets(i).Name);
            workbook.Worksheets(i).SaveAs(fso.GetParentFolderName(filename) + "\\" + 
                workbook.Worksheets(i).Name, format);
    }
    workbook.Close(false);
}

Первый параметр — это имя Excel файла.

Второй параметр позволяет выбрать кодировку для экспорта. Удобно, что можно выбрать кодировку просто параметром, а не преобразовывать потом отдельно.

Запуск скрипта

Запуск из другого скрипта

Другой скрипт просто вызывает функцию excel_to_csv с необходимыми аргументами.

excel_to_csv("C:\\ProgramData\\MyProgram\\data.xlsx", xlCSVUTF8);

Скрипты, конечно, должны быть объединены через wsf.

Запуск из bat файла или командной строки

Производится, как обычно, через cscript с передачей параметров в командной строке:

cscript //nologo excel-to-csv.js %ProgramData%\MyProgram\data.xlsx 23

Кодировка для экспорта передается числом, а не переменной.

Если Excel файл находится в текущем каталоге, можно написать с %CD%:

cscript //nologo excel-to-csv.js %cd%\data.xlsx 23

Особенности скрипта

Есть несколько нюансов, которые необходимо учитывать.

  • Необходимо указывать полный путь к Excel файлу. По умолчанию, Excel ищет файл в документах, а не в текущем каталоге.
  • Файлы CSV сохраняются в тот же каталог, где находится файл таблицы Excel.
  • Скрипт обрабатывает только видимые листы таблицы. При необходимо это условие можно удалить.
  • При сохранении в UTF-8 метод SaveAs всегда вставляет BOM. Если это мешает, то потребуется дополнительное преобразование экспортированных файлов, например, программой nhrt.

Расширение возможностей скрипта

Выбор файла пользователем

Базовый вариант скрипта предполагает, что имя файла Excel задается явно в командной строке или bat файле, то есть такое решение подходит, в основном, для выполнения в рамках bat файлов.

Чтобы скрипт мог быть запущен по отношению к файлу, выбранному пользователем, можно использовать диалоговое окно выбора файла в bat файле:

for /F "usebackq" %%a in (`powershell -executionpolicy bypass -file openfiledialog.ps1`) do if not "%%a" == "Cancel" if not "%%a" == "OK" set filename=%%a
if not "%filename%" == "" cscript //nologo excel-to-csv.js "%filename%" 62

Зависимости

Скрипт использует компонент Excel.Application, поэтому на компьютере должен быть установлен Microsoft Excel.

Файлы для скачивания

Скачать скрипт экспорта Excel в csv с Яндекс.Диска

Скачать все скрипты с Яндекс.Диска

Полезные ссылки

Worksheet.SaveAs method (Excel)

XlFileFormat enumeration (Excel)

Экспорт таблицы Excel в CSV в командной строке
Метки:            

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *