Перетворіть .xlsx (MS Excel) файл у .csv в командному рядку з розділеними комою крапкою


31

Я розумію, що це не зовсім unix / linux питання. Але оскільки це я щось робитиму на Linux, я сподіваюся, що хтось відповість.

У мене є онлайн-файл excel ( .xlsx), який періодично оновлюється (кимось іншим). Я хочу написати сценарій і поставити його як cronjob, щоб обробити цей лист excel. Але для цього мені потрібно перетворити це в текстовий файл (так a .csv) із стовпцями, розділеними крапкою з комою. На жаль, це не може бути відокремлено комою, на жаль, оскільки деякі стовпці містять коми. Чи взагалі можливо зробити це перетворення з оболонки? У мене встановлений Open Office, і я можу це зробити, використовуючи його графічний інтерфейс, але хочу знати, чи можна це зробити з командного рядка. Спасибі!

PS: У мене також є машина Mac, тож якщо якесь рішення може працювати там, це добре. :)

Відповіді:


21

OpenOffice поставляється з програмою unoconv для виконання перетворень форматів у командному рядку.

unoconv -f csv filename.xlsx

Для складніших вимог ви можете проаналізувати файли XLSX Spreadsheet::XLSXу Perl або openpyxlPython. Наприклад, ось сценарій швидкого доступу, щоб роздрукувати робочий аркуш у вигляді CSV-файлу, розділеного крапкою з комою (попередження: не перевірено, набрано безпосередньо у веб-переглядачі):

perl -MSpreadsheet::XLSX -e '
    $\ = "\n"; $, = ";";
    my $workbook = Spreadsheet::XLSX->new()->parse($ARGV[0]);
    my $worksheet = ($workbook->worksheets())[0];
    my ($row_min, $row_max) = $worksheet->row_range();
    my ($col_min, $col_max) = $worksheet->col_range();
    for my $row ($row_min..$row_max) {
        print map {$worksheet->get_cell($row,$_)->value()} ($col_min..$col_max);
    }
' filename.xlsx >filename.csv

unoconv не прийшов з моїм OO, але я встановив його, і він чудово працює (перетворює файл, розділений комами, а не крапкою з комою)! Спасибі! Мені ще потрібно буде розібратися, як я отримаю свої поля, що містять коми. Але дякую все одно.
allrite

@allrite О, я пропустив вимогу крапки з комою як роздільники. Моя пропозиція зробити обробку в Python або Perl досі залишається. Але я також додав сценарій (неперевірений) для перетворення в CSV за ;допомогою роздільника.
Жил "ТАК - перестань бути злим"

Спасибі! Я використовував Spreadsheet :: XLSX, але використовував код у наданому вами посиланні CPAN. Працює :)
allrite

1
Анонімний користувач мав проблеми з цим
Майкл Мрозек

9

https://github.com/dilshod/xlsx2csv

Добре працював для мене. Близько 85 Мб XLSX-файлу конвертується за 3 хвилини на SSD-диску Mac Book Pro.


1
Добре працював в OSX, $ python xlsx2csv.py -d ";" my.xlsx my.csvдобре працював і вміння визначати роздільник, дякую +!
hhh

6

Я використовую xls2csv Perl для перетворення xlsфайлів у csv.

Не впевнений, що він xlsxтеж працює .

Про:

На жаль, це не може бути відокремлено комою, на жаль, оскільки деякі стовпці містять коми

ось чому було введено цитування:

1,2,"data,data, more data"

дякую за пораду, я спробую це. Я все ще віддаю перевагу крапці з комою, оскільки після перетворення CSV файл переходить через awkскрипти. І просто простіше пропустити крапку з комою як роздільник поля awk. Я міг би шукати коми всередині цитат, щоб замінити їх на щось інше ... тепер це вже інше питання :)
allrite

Дякую @neurino Замість цього я використав метод Жиля, але все одно дякую за відповідь.
allrite

1

Я використовую PHP. Просто встановіть бібліотеку PHPExel з http://phpexcel.codeplex.com/, і, ймовірно, вам знадобляться і функції XML.

Це мій код:

<?php

error_reporting(E_ALL);
date_default_timezone_set('Europe/London');

/** PHPExcel_IOFactory */

require_once '/home/markov/Downloads/1.7.6/Classes/PHPExcel/IOFactory.php';

$file="RIF394305.xlsx"; //PATH TO CSV FILE

// Check prerequisites

if (!file_exists($file)) {
    exit("Please run 06largescale.php first.\n");
}

$objReader = PHPExcel_IOFactory::createReader('Excel2003XML');

$objPHPExcel = $objReader->load($file);

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');

$objWriter->save(str_replace('.xlsx', '.csv',$file));
?>

Ви можете відновити процес або використовувати інший формат Excel / CSV. Подивіться на різні файли PHP в каталозі PHPExcel.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.