it-swarm-eu.dev

Převést soubor .xlsx (MS Excel) na .csv na příkazovém řádku se středníky oddělenými poli

Uvědomuji si, že se jedná o ne zcela unixovou/linuxovou otázku. Ale protože to je něco, co udělám na Linuxu, doufám, že někdo má odpověď.

Mám online soubor Excel (.xlsx) který se pravidelně aktualizuje (někým jiným). Chci napsat skript a vložit ho jako cronjob, abych mohl zpracovat tento list Excelu. Ale abych toho dosáhl, musím to převést do textového souboru (takže .csv) se sloupci oddělenými středníkem. Bohužel ji nelze oddělit čárkami, protože v některých sloupcích je čárka. Je vůbec možné provést tuto konverzi z shellu? Mám nainstalovanou Open Office a mohu to udělat pomocí jeho GUI, ale chci vědět, jestli je to možné z příkazového řádku. Dík!

PS: Mám také počítač Mac, takže pokud tam nějaké řešení může fungovat, je to také dobré. :)

32
allrite

OpenOffice přichází s programem noconv , který provádí převody formátu na příkazovém řádku.

unoconv -f csv filename.xlsx

Pro složitější požadavky můžete analyzovat soubory XLSX pomocí Spreadsheet::XLSX v Perlu nebo openpyxl v Pythonu. Například zde je skript pro rychlé vytištění listu jako soubor CSV oddělený středníkem (varování: netestováno, napsáno přímo v prohlížeči):

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

https://github.com/dilshod/xlsx2csv

Fungovalo to pro mě dobře. Přibližně 85 MB souboru XLSX převedeno přibližně za 3 minuty na Mac Book Pro SSD.

9

Používám Perl's xls2csv k převodu souborů xls na csv.

Nejste si jisti, jestli to funguje s xlsx.

O:

Bohužel ji nelze oddělit čárkami, protože v některých sloupcích je čárka

proto byla zavedena nabídka:

1,2,"data,data, more data"
6
neurino

Používám PHP. Stačí nainstalovat knihovnu PHPExel z http://phpexcel.codeplex.com/ a pravděpodobně budete také potřebovat funkce XML.

Toto je můj kód:

<?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));
?>

Můžete vrátit proces nebo použít jiný formát Excel/CSV. Podívejte se na různé php soubory v adresáři PHPExcel.

1
magilda