Linux
在 Linux 上將 CSV 轉換為 XLS 文件
以下 Perl 腳本可以將 CSV 文件轉換為 XLS 文件
問題是我需要在客戶 Linux 機器上安裝許多 Perl 模組
為了執行這個 Perl 腳本,實際上我不能,因為 Linux 機器是客戶機器(不允許安裝模組)
所以我需要為這個 Perl 腳本找到一些其他的替代方案
第一個客戶有 Linux red-hat 機器版本 5.X
我想找到一些bash/ksh/sh/awk腳本,它們可以像 perl 腳本一樣完成這項工作
所以我想找到其他將 CSV 轉換為 XLS 文件的替代方法
請指教如何找到這個腳本?或在 Linux 機器上將 CSV 轉換為 XLS 的其他建議
#!/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"; } }
要將 CSV 文件自動轉換為 XLS/XLSX 文件,您還可以使用ssconvert(Gnumeric 附帶)或unoconv(使用 LibreOffice)。
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
第一個
ssconvert
呼叫創建一個 MS Excel 2007/2010 文件,第二個呼叫創建一個老式 Excel 2007 文件。您可以通過以下方式檢查文件
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+
您可以通過以下方式列出所有支持的輸出文件格式:
$ 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 [..]
Unoconv 範例
$ unoconv --format xls example.csv
它創建了 example.xls,它是一個 Excel 97/2000/XP 文件。
通過文件檢查:
$ file example.xls example.xls: Composite Document File V2 Document, Little Endian, Os: Windows, Version 1.0, Code page: -535, Revision Number: 0
您可以通過以下方式列出所有支持的文件格式:
$ 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] [..]