konversi file CSV ke XLS di linux

10

Skrip Perl berikut dapat mengonversi file CSV ke file XLS

masalahnya adalah bahwa saya perlu menginstal pada mesin Linux pelanggan banyak modul Perl

untuk menjalankan skrip Perl ini, dan sebenarnya saya tidak bisa karena mesin Linux adalah mesin pelanggan (tidak memungkinkan untuk menginstal modul)

Jadi saya perlu mencari beberapa alternatif lain untuk skrip Perl ini

Pelanggan pertama memiliki Linux red-hat machine versi 5.X

Dan saya ingin menemukan beberapa skrip bash / ksh / sh / awk yang dapat melakukan pekerjaan sama seperti skrip perl

jadi saya ingin mencari alternatif lain yang mengkonversi file CSV ke XLS

Mohon saran bagaimana menemukan skrip ini? atau saran lain untuk mengonversi CSV ke XLS di mesin 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, [email protected]
#

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";
    }
}
maihabunash
sumber
4
Saya sangat tergoda untuk memberikan jawaban ini . cheat: ganti nama file.csv ke file.xls. excel membukanya dan Anda tidak pernah melihat perbedaannya .
Ramesh
pertanyaan juga ditanyakan di stackoverflow.com/q/26101554/7552
glenn jackman
ya tapi tidak ada jawaban dari stackoverflow jadi mungkin di sini saya akan mendapatkan jawaban yang bagus - :)
maihabunash
2
@maihabunash, Anda harus menghapus pertanyaan yang diposting di stack overflow atau di sini. Jika Anda mempostingnya di 2 tempat, itu akan ditutup.
Ramesh
File CSV (secara umum) sulit diurai, Anda memiliki nilai sel dengan baris baru, kutipan, dan koma. File XLS (yang lama, bukan file xml XLSM yang lebih modern) adalah file biner yang non-sepele untuk dibuat.
Anthon

Jawaban:

22

Untuk mengonversi file CSV secara otomatis ke file XLS / XLSX Anda juga dapat menggunakan ssconvert (yang dilengkapi dengan Gnumeric) atau unoconv (yang menggunakan LibreOffice).

Contoh 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

Di mana ssconvertpanggilan pertama membuat file MS Excel 2007/2010 dan yang kedua sekolah Excel 2007 yang lama.

Anda dapat memeriksa file melalui 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+

Anda dapat mendaftar semua format file output yang didukung melalui:

$ 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
[..]

Contoh Unoconv

$ unoconv --format  xls example.csv

yang menciptakan example.xls, yang merupakan file Excel 97/2000 / XP.

Periksa melalui file:

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

Anda dapat membuat daftar semua format file yang didukung melalui:

$ 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]
[..]
maxschlepzig
sumber
tolong saran tentang sintaks bagaimana sintaks untuk mengkonversi csv ke xls?
maihabunash
@maihabunash, saya telah menambahkan beberapa contoh.
maxschlepzig
Ini: soffice --convert-to xlsx:"Calc MS Excel 2007 XML" filename.csv --headlesscukup berguna juga.
TryTryAgain