簡體   English   中英

將CSV轉換為Excel會導致文件損壞錯誤

[英]Convert CSV to Excel gives file corrupted error

我使用下面的perl腳本將多個csv文件轉換為excel電子表格,該腳本基本上是鏈接中代碼的修改版本,但是我無法打開輸出excel文件,它會彈出消息“文件已損壞”。

#!/usr/intel/bin/perl -W

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

# Check for valid number of arguments
if (($#ARGV < 1) || ($#ARGV > 2)) {
   die("Usage: csv2xls csvfile_dir xlsfile\n");
};

my $csvdir  = $ARGV[0];
my $outfile = $ARGV[1];


# Create a new Excel workbook
my $workbook  = Spreadsheet::WriteExcel::Big->new($outfile);
my $csvfile   = "";
my $tab_title = "";

foreach $csvfile (glob("$csvdir/*.csv")) {
    print "$csvfile\n";
    # Open the Comma Separated Variable file
    open (CSVFILE, $csvfile) or die "$csvfile: $!";
    $csvfile =~ s/.*\///;
    $tab_title = (split(/\./,$csvfile))[0];
    print "-D- $tab_title\n";

    # Create a new Excel worksheet
    my $worksheet = $workbook->add_worksheet($tab_title);

    # 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;
            print "-D- @Fld\n";
            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";
        }
    }
}

我該如何解決?

您需要關閉工作簿。

$workbook->close();

還要將您的Excel模塊升級到最新版本,我還遇到了類似的Excel文件損壞問題,該問題已通過更新Spreadsheet::WriteExcel解決。

也是從文檔

注意有關binmode()的要求。 Excel文件由二進制數據組成。 因此,如果您使用的是文件句柄,則應確保在將其傳遞給new()之前先對其進行binmode()處理,無論您是否在Windows平台上都應這樣做。 這尤其適用於可能運行UTF-8的系統(例如RedHat Linux 9)上的perl 5.8的用戶。如果您的程序有意或無意地將UTF-8數據寫入傳遞給new()的文件句柄中它將損壞創建的Excel文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM