преобразование файла Excel (xls) в файл с разделителями-запятыми (csv) без графического интерфейса - PullRequest
21 голосов
/ 03 июня 2009

Есть ли простой способ перевести 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 на этот ответ суперпользователя , который может быть полезен для некоторых людей.

Ответы [ 13 ]

0 голосов
/ 12 июня 2009

@ Джон Мачин: Я не могу добавить комментарий, как я newbee для этого форума:)

Я не использовал старый пакет pyXLreader , но пишу свой пост с учетом xlrd ;)

Я видел это месяц назад, но не использовал в проектах.

WBR

0 голосов
/ 03 июня 2009

Если у вас есть Cygwin, скорее всего, у вас будет Python. Если нет - установите Python и используйте этот скрипт . Это намного больше, чем нужно, но конвертируется легко и быстро.

0 голосов
/ 03 июня 2009

Рекомендовать конвертировать XLS: http://www.softinterface.com/Convert-XLS%5CConvert-XLS.htm

‘Convert XLS’ - простая в использовании, но в то же время сложная утилита для конвертации Excel, специально разработанная для Excel, текстовых и CSV-файлов (с разделителями / запятыми). Если вам нужно конвертировать / манипулировать одним или тысячами файлов, расположенных в одной или нескольких папках, это инструмент! Преобразование может быть сделано в 10-15 раз быстрее без MS Excel.

Автоматизируйте задачи преобразования Excel с помощью:

  • Встроенный планировщик
  • Командная строка
  • интерфейс COM интерфейс
...