Конвертируйте xlsx файл в csv используя batch - PullRequest
41 голосов
/ 10 марта 2011

Как преобразовать несколько файлов xlsx в файлы csv с помощью пакетного сценария?

Ответы [ 6 ]

21 голосов
/ 23 апреля 2015

Попробуйте in2csv !

Использование:

in2csv file.xlsx > file.csv
8 голосов
/ 05 декабря 2014

Чтобы проконтролировать ответ пользователя 183038, вот сценарий оболочки для пакетного переименования всех файлов xlsx в csv с сохранением имен файлов. Инструмент xlsx2csv необходимо установить перед запуском.

for i in *.xlsx;
 do
  filename=$(basename "$i" .xlsx);
  outext=".csv" 
  xlsx2csv $i $filename$outext
done
7 голосов
/ 30 марта 2017

Получить все элементы файла и отфильтровать их по суффиксу, а затем использовать объект PowerShell Excel VBA для сохранения файлов Excel в CSV-файлы.

$excelApp = New-Object -ComObject Excel.Application 
$excelApp.DisplayAlerts = $false 

$ExcelFiles | ForEach-Object { 
    $workbook = $excelApp.Workbooks.Open($_.FullName) 
    $csvFilePath = $_.FullName -replace "\.xlsx$", ".csv" 
    $workbook.SaveAs($csvFilePath, [Microsoft.Office.Interop.Excel.XlFileFormat]::xlCSV) 
    $workbook.Close() 
} 

Полный пример можно найти здесь Как преобразоватьExcel xlsx файл в CSV-файл в пакетном режиме PowerShell

5 голосов
/ 14 марта 2011

Вам необходим внешний инструмент, например: SoftInterface.com - конвертировать XLSX в CSV .

После установки вы можете использовать в пакете следующую команду:

"c:\Program Files\Softinterface, Inc\Convert XLS\ConvertXLS.EXE" /S"C:\MyExcelFile.xlsx" /F51 /N"Sheet1" /T"C:\MyExcelFile.CSV" /C6 /M1 /V

1 голос
/ 30 марта 2017

Требуется установить Excel, поскольку он использует Excel.Application com-объект . Сохраните его как .bat файл:

@if (@X)==(@Y) @end /* JScript comment
    @echo off


    cscript //E:JScript //nologo "%~f0" %*

    exit /b %errorlevel%

@if (@X)==(@Y) @end JScript comment */


var ARGS = WScript.Arguments;

var xlCSV = 6;

var objExcel = WScript.CreateObject("Excel.Application");
var objWorkbook = objExcel.Workbooks.Open(ARGS.Item(0));
objExcel.DisplayAlerts = false;
objExcel.Visible = false;

var objWorksheet = objWorkbook.Worksheets(ARGS.Item(1))
objWorksheet.SaveAs( ARGS.Item(2), xlCSV);

objExcel.Quit();

Он принимает три аргумента - абсолютный путь к файлу xlsx, имя листа и абсолютный путь к целевому CSV-файлу:

call toCsv.bat "%cd%\Book1.xlsx" Sheet1 "%cd%\csv.csv"
1 голос
/ 22 марта 2017

Добавление к @ marbel's answer (что является отличным предложением!), Вот сценарий, который работал для меня на Mac OS X El Captain's Terminal, для пакетного преобразования (поскольку эточто ОП спросил).Я думал, что было бы просто сделать цикл for, но это не так!(пришлось изменить расширение с помощью манипуляции со строками, и похоже, что bash для Mac немного отличается)

for x in $(ls *.xlsx); do x1=${x%".xlsx"}; in2csv $x > $x1.csv; echo "$x1.csv done."; done

Примечание:

  1. ${x%”.xlsx”} - это манипуляция строкой bash, которая обрезает.xlsx от конца строки.
  2. in2csv создает отдельные файлы csv (не перезаписывает файлы xlsx).
  3. Приведенное выше не будет работать, если в именах файлов есть пробелы.Хорошо преобразовывать пробелы в подчеркивание или что-то еще, прежде чем запускать скрипт.
...