converti CSV in file XLS su Linux


10

Il seguente script Perl può convertire i file CSV in file XLS

il problema è che devo installare sulla macchina Linux del cliente molti moduli Perl

per eseguire questo script Perl, e in realtà non posso perché la macchina Linux è macchina del cliente (non consentire l'installazione di moduli)

Quindi ho bisogno di trovare qualche altra alternativa per questo script Perl

Il primo cliente ha Linux Red Hat versione 5.X

E voglio trovare alcuni script bash / ksh / sh / awk che possono fare il lavoro allo stesso modo dello script perl

quindi voglio trovare altre alternative che convertano CSV in file XLS

Per favore, consigli su come trovare questo script? o altri consigli per convertire CSV in XLS su macchine Linux

#!/usr/bin/perl -w

###############################################################################
#
# Example of how to use the WriteExcel module
#
# Simple program to convert a CSV comma-separated value file to an Excel file.
# This is more or less an non-op since Excel can read CSV files.
# The program uses Text::CSV_XS to parse the CSV.
#
# Usage: csv2xls.pl file.csv newfile.xls
#
#
# NOTE: This is only a simple conversion utility for illustrative purposes.
# For converting a CSV or Tab separated or any other type of delimited
# text file to Excel I recommend the more rigorous csv2xls program that is
# part of H.Merijn Brand's Text::CSV_XS module distro.
#
# See the examples/csv2xls link here:
#     L<http://search.cpan.org/~hmbrand/Text-CSV_XS/MANIFEST>
#
# reverse('©'), March 2001, John McNamara, jmcnamara@cpan.org
#

use strict;
use Spreadsheet::WriteExcel;
use Text::CSV_XS;

# Check for valid number of arguments
if ( ( $#ARGV < 1 ) || ( $#ARGV > 2 ) ) {
    die("Usage: csv2xls csvfile.txt newfile.xls\n");
}

# Open the Comma Separated Variable file
open( CSVFILE, $ARGV[0] ) or die "$ARGV[0]: $!";

# Create a new Excel workbook
my $workbook  = Spreadsheet::WriteExcel->new( $ARGV[1] );
my $worksheet = $workbook->add_worksheet();

# Create a new CSV parsing object
my $csv = Text::CSV_XS->new;

# Row and column are zero indexed
my $row = 0;

while (<CSVFILE>) {
    if ( $csv->parse($_) ) {
        my @Fld = $csv->fields;

        my $col = 0;
        foreach my $token (@Fld) {
            $worksheet->write( $row, $col, $token );
            $col++;
        }
        $row++;
    } else {
        my $err = $csv->error_input;
        print "Text::CSV_XS parse() failed on argument: ", $err, "\n";
    }
}

4
Sono così tentato di dare questa risposta. cheat: rinomina file.csv in file.xls. Excel lo apre e non si nota mai la differenza .
Ramesh,


si ma nessuna risposta da StackOverflow quindi forse qui avrò una bella risposta - :)
maihabunash,

2
@maihabunash, dovresti eliminare la domanda pubblicata nello stack overflow o qui. Se lo hai pubblicato in 2 posti, verrà chiuso.
Ramesh,

I file CSV (in generale) sono difficili da analizzare, hai valori di cella con newline, virgolette e virgole. I file XLS (i vecchi, non i più moderni file xml XLSM) sono file binari che non sono banali da generare.
Anthon,

Risposte:


22

Per convertire automaticamente i file CSV in file XLS / XLSX puoi anche usare ssconvert (che viene fornito con Gnumeric) o unoconv (che usa LibreOffice).

Esempio SSConvert

$ echo -e 'surname,name,age\nCarlo,Smith,23\nJohn,Doe,46\nJane,Doe,69\nSarah,Meyer,23\n' \
     > example.csv
$ unix2dos example.csv
$ ssconvert example.csv example.xlsx
$ ssconvert example.csv example.xls

Dove la prima ssconvertchiamata crea un file MS Excel 2007/2010 e la seconda una Excel 2007 vecchia scuola.

Puoi controllare i file tramite file:

$ file example.csv
example.csv: ASCII text, with CRLF line terminators
$ file example.xls
example.xls: Composite Document File V2 Document, Little Endian, Os: Windows, Version 4.10,
   Code page: 1252, Create Time/Date: Tue Sep 30 20:23:18 2014
$ file example.xlsx 
example.xlsx: Microsoft Excel 2007+

Puoi elencare tutti i formati di file di output supportati tramite:

$ ssconvert --list-exporters
ID                           | Description
[..]
Gnumeric_Excel:xlsx2         | ISO/IEC 29500:2008 & ECMA 376 2nd edition (2008);
                               [MS Excel 2010]
Gnumeric_Excel:xlsx          | ECMA 376 1st edition (2006); [MS Excel 2007]
Gnumeric_Excel:excel_dsf     | MS Excel 97/2000/XP & 5.0/95
Gnumeric_Excel:excel_biff7   | MS Excel 5.0/95
Gnumeric_Excel:excel_biff8   | MS Excel 97/2000/XP
[..]

Esempio Unoconv

$ unoconv --format  xls example.csv

che crea example.xls, che è un file Excel 97/2000 / XP.

Verifica tramite file:

$ file example.xls 
example.xls: Composite Document File V2 Document, Little Endian, Os: Windows, Version 1.0,
  Code page: -535, Revision Number: 0

Puoi elencare tutti i formati di file supportati tramite:

$ unoconv --show
[..]
The following list of spreadsheet formats are currently available:

  csv      - Text CSV [.csv]
  dbf      - dBASE [.dbf]
[..]
  ooxml    - Microsoft Excel 2003 XML [.xml]
[..]
  xls      - Microsoft Excel 97/2000/XP [.xls]
  xls5     - Microsoft Excel 5.0 [.xls]
  xls95    - Microsoft Excel 95 [.xls]
[..]

per favore consigli sulla sintassi come la sintassi per convertire CSV in XLS?
maihabunash,

@maihabunash, ho aggiunto alcuni esempi.
maxschlepzig,

Questo: soffice --convert-to xlsx:"Calc MS Excel 2007 XML" filename.csv --headlessè anche abbastanza utile.
Prova TryAgain

Si prega di aggiungere opzioni per unire CSV anche a singoli xls. Non è stato possibile trovare in nessuna pagina man di Unoconv o SSconvert
Curious
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.