Linux

在 Linux 上將 CSV 轉換為 XLS 文件

  • March 26, 2021

以下 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 &lt; 1 ) || ( $#ARGV &gt; 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-&gt;new( $ARGV[1] );
my $worksheet = $workbook-&gt;add_worksheet();

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

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

while (&lt;CSVFILE&gt;) {
   if ( $csv-&gt;parse($_) ) {
       my @Fld = $csv-&gt;fields;

       my $col = 0;
       foreach my $token (@Fld) {
           $worksheet-&gt;write( $row, $col, $token );
           $col++;
       }
       $row++;
   } else {
       my $err = $csv-&gt;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' \
    &gt; 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]
[..]

引用自:https://unix.stackexchange.com/questions/158254