Подтвердить что ты не робот

Преобразование файла Excel (xls) в файл с разделителями-запятыми (csv) без GUI

Есть ли простой способ перевести XLS в файл в формате CSV без запуска оконного приложения Excel?

Мне нужно обработать некоторые книги Excel XLS со сценариями. Для этого мне нужно преобразовать файл xls в файл csv. Это можно сделать с помощью save-as из приложения 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 script, с которым может быть легко работать; as-is from этот блог MSDN и ссылку SO.

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

4b9b3361

Ответ 1

Используйте perl script. Использование модуля Spreadsheet:: ParseExcel perl из CPAN для анализа файла xls, за которым следует вывод, поскольку csv должен работать нормально.

http://search.cpan.org/dist/Spreadsheet-ParseExcel

Вы также можете попробовать использовать VBScript.

Ответ 2

Вы можете использовать xls2csv из пакета catdoc, если вы используете Debian/Ubuntu

Ответ 3

В мире Java вы можете использовать apache poi. Вы можете начать со следующего Groovy фрагмента.

FileInputStream fis = new FileInputStream(filename);
Workbook wb = new HSSFWorkbook(fis); 
Sheet sheet = wb.getSheetAt(0);
for (Row row : sheet) {
  for (Cell cell : row) {
    doSomething(cell.toString())
  }

}

Ответ 4

Из Gnumeric docs:

Gnumeric может автоматически конвертировать файлы без вмешательства пользователя. Это позволяет преобразовать большое количество файлов с помощью script. Gnumeric распространяется вместе с программой под названием ssconvert, которая является программой, используемой для автоматического преобразования файлов. Все форматы файлов, поддерживаемые Gnumeric, могут использоваться, кроме форматов файлов Postscript и PDF, которые работают через систему печати. ​​

Это приложение используется из командной строки, указывая любые желаемые параметры, входной файл и выходной файл. Например,

ssconvert myfile.xls myfile.gnumeric

преобразует файл формата Excel в файл формата Gnumeric.

Доступные форматы файлов импорта и экспорта, которые ssconvert может читать, могут быть перечислены с помощью

ssconvert --list-importers

или

ssconvert --list-exporters

соответственно.

Как и другие приложения командной строки GNU, ssconvert включает страницу руководства. Доступ к этой странице можно получить, набрав:

man ssconvert

который откроет страницу руководства. Эту страницу можно перемещать, введя пробел или используя кнопки "вверх" и "вниз". Программа man может быть уволена, набрав ключ q.

Я использую его и хорошо работаю.

Ответ 5

Используйте одну из портативных библиотек [Python]:

pyxlreader.sourceforge.net/

sourceforge.net/projects/pyexcelerator

и добавьте над ним слой script.

Ответ 6

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

1.) Создайте и откройте подключение к файлу EXCEL, который вы хотите преобразовать в CSV.

2.) Выполните запрос типа "SELECT * From Sheet1", который загрузит все данные Sheet1 в набор записей или datatable.

3.) Поскольку я использую .net, я могу хранить эти записи в datatable и преобразовывать в CSV, используя следующий метод расширения.

        public static string ToCSV(this DataTable _dataTable)
        {
            StringBuilder csv = new StringBuilder();
            StringWriter sw = new StringWriter(csv);
            int icolcount = _dataTable.Columns.Count;
            for (int i = 0; i < icolcount; i++)
            {
                sw.Write(_dataTable.Columns[i]);
                if (i < icolcount - 1)
                {
                    sw.Write(",");
                }
            }
            sw.Write(sw.NewLine);
            foreach (DataRow drow in _dataTable.Rows)
            {
                for (int i = 0; i < icolcount; i++)
                {
                    if (!Convert.IsDBNull(drow[i]))
                    {
                        sw.Write(drow[i].ToString());
                    }
                    if (i < icolcount - 1)
                    {
                        sw.Write(",");
                    }
                }
                sw.Write(sw.NewLine);
            }
            sw.Close();
            return csv.ToString();
        }

Вы можете применить этот подход на платформу, над которой вы работаете.

Спасибо.

Ответ 7

VBS script, и он работает потрясающе http://www.go4expert.com/forums/showthread.php?t=18188

Установить objArgs = WScript.Arguments Для я = 0 для objArgs.Count - 1

FullName = objArgs(I)
FileName = Left(objArgs(I), InstrRev(objArgs(I), ".") )

Set objExcel = CreateObject("Excel.application")
set objExcelBook = objExcel.Workbooks.Open(FullName)

objExcel.application.visible=false
objExcel.application.displayalerts=false

objExcelBook.SaveAs FileName & "csv", 23

objExcel.Application.Quit
objExcel.Quit   

Set objExcel = Nothing
set objExcelBook = Nothing

Далее

Ответ 8

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

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

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

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

Ответ 9

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

Ответ 10

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

Я не использовал старый пакет pyXLreader, но создаю сообщение с xlrd;)

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

WBR

Ответ 11

iam довольно новичок в этих форумах, и было бы неплохо, если бы они поставили год на отметки времени (pet peeve), поэтому я знаю, сколько лет сообщений. iam собирается предположить, что они с 2009 года.

но хорошим решением в python является использование xlrd для чтения в ваших xls файлах. вот довольно простой вводный учебник: http://scienceoss.com/read-excel-files-from-python/ это не мое.

Единственная проблема, с которой я столкнулся, - это отличные даты. вот для них быстрое решение:

date = xlrd.xldate_as_tuple (int (sheet.cell(rowNum, colNum).value), workBookName.datemode)

чем создать файл csv с встроенным модулем csv, так как я новый пользователь, я могу опубликовать только одну гипер ссылку. но google модуль csv api.

надеюсь, что это было полезно

Ответ 12

мое решение:

use Spreadsheet::BasicRead;

my $xls = 'file.xls';   
my $csv = 'file.csv';

   my $ss = new Spreadsheet::BasicRead($xls) or die "Could not open '$xls': $!";
   my $name = '';
   my $row = 0;

   open(FILE, ">$csv") or die "Could not open : $!\n";
      flock(FILE, 2) or die "Could not lock file\n"; 

        while (my $data = $ss->getNextRow()){
            $row++;
            $name = join(';',@$data);         
            print FILE $name."\n" if ($name ne "");
        }

      flock(FILE, 8); 
   close FILE; 

Ответ 13

Вы можете сделать это с помощью утилиты командной строки Alacon для Alasql.

Он работает с Node.js, поэтому вам нужно установить Node.js, а затем Alasql:

> npm install alasql

Чтобы преобразовать файл Excel в CVS (от TSV), вы можете ввести:

> node alacon "SELECT * INTO CSV('mydata.csv', {headers:true}) FROM XLS('mydata.xls', {headers:true})"

Alacon поддерживает преобразования типа другого типа (CSV, TSV, TXT, XLSX, XLS) и SQL (см. Руководство пользователя).