Есть ли простой способ перевести XLS в файл в формате CSV без запуска оконного приложения Excel?
Мне нужно обработать некоторые книги Excel XLS со скриптами. Для этого мне нужно преобразовать файл XLS в файл CSV. Это можно сделать с помощью сохранения из приложения Excel. Но я хотел бы автоматизировать это (поэтому не открывайте окно приложения Excel).
Достаточно, если первый лист из рабочей книги будет переведен в формат CSV.
Мне нужно просто обработать данные на этом листе.
В моей системе установлены Cygwin и Excel - если это поможет.
Редактировать: Хорошо, у меня есть рабочее решение с Perl. Обновление для будущего использования другими пользователями.
Я установил модуль Spreadsheet :: ParseExcel .
а затем использовал read-excel.pl образец.
Мой код представляет собой небольшое изменение этого примера кода, как показано ниже.
#!/usr/bin/perl -w
# For each tab (worksheet) in a file (workbook),
# spit out columns separated by ",",
# and rows separated by c/r.
use Spreadsheet::ParseExcel;
use strict;
my $filename = shift || "Book1.xls";
my $e = new Spreadsheet::ParseExcel;
my $eBook = $e->Parse($filename);
my $sheets = $eBook->{SheetCount};
my ($eSheet, $sheetName);
foreach my $sheet (0 .. $sheets - 1) {
$eSheet = $eBook->{Worksheet}[$sheet];
$sheetName = $eSheet->{Name};
print "#Worksheet $sheet: $sheetName\n";
next unless (exists ($eSheet->{MaxRow}) and (exists ($eSheet->{MaxCol})));
foreach my $row ($eSheet->{MinRow} .. $eSheet->{MaxRow}) {
foreach my $column ($eSheet->{MinCol} .. $eSheet->{MaxCol}) {
if (defined $eSheet->{Cells}[$row][$column])
{
print $eSheet->{Cells}[$row][$column]->Value . ",";
} else {
print ",";
}
}
print "\n";
}
}
Обновление : Вот сценарий Powershell, с которым также может быть легко работать;
как есть с этого блога MSDN и SO Reference .
$excel = New-Object -comobject Excel.Application
$workbooks = $excel.Workbooks.Open("C:\test.xlsx")
$worksheets = $workbooks.Worksheets
$worksheet = $worksheets.Item(1)
$range = $worksheet.UsedRange
foreach($row in $range.Rows)
{
foreach($col in $row.Columns)
{
echo $col.Text
}
}
Обновление: я недавно столкнулся с инструментом Windows CSVed на этот ответ суперпользователя , который может быть полезен для некоторых людей.