将CSV转换为Excel会导致文件损坏错误

将CSV转换为Excel会导致文件损坏错误,excel,perl,export-to-excel,Excel,Perl,Export To Excel,我使用下面的perl脚本将多个csv文件转换为excel电子表格,该脚本基本上是中代码的修改版本,但我无法打开输出的excel文件,它会弹出一条消息“文件已损坏” #/usr/intel/bin/perl-W 严格使用; 使用电子表格::WriteExcel::Big; 使用Text::csvxs; #检查参数的有效数量 如果($#ARGV2)){ die(“用法:csv2xls csvfile_dir xlsfile\n”); }; my$csvdir=$ARGV[0]; my$outfile

我使用下面的perl脚本将多个csv文件转换为excel电子表格,该脚本基本上是中代码的修改版本,但我无法打开输出的excel文件,它会弹出一条消息“文件已损坏”

#/usr/intel/bin/perl-W
严格使用;
使用电子表格::WriteExcel::Big;
使用Text::csvxs;
#检查参数的有效数量
如果($#ARGV<1)|($#ARGV>2)){
die(“用法:csv2xls csvfile_dir xlsfile\n”);
};
my$csvdir=$ARGV[0];
my$outfile=$ARGV[1];
#创建新的Excel工作簿
my$工作簿=电子表格::WriteExcel::大->新($outfile);
我的$csvfile=“”;
我的$tab_title=“”;
foreach$csvfile(glob(“$csvdir/*.csv”)){
打印“$csvfile\n”;
#打开逗号分隔的变量文件
打开(CSVFILE,$CSVFILE)或死“$CSVFILE:$!”;
$csvfile=~s/*\//;
$tab_title=(拆分(/\./,$csvfile))[0];
打印“-D-$tab\u title\n”;
#创建新的Excel工作表
my$worksheet=$workbook->add_工作表($tab_title);
#创建新的CSV解析对象
my$csv=Text::csv_XS->new;
#行和列的索引为零
我的$row=0;
而(){
如果($csv->parse($u2;)){
my@Fld=$csv->字段;
打印“-D-@Fld\n”;
我的$col=0;
foreach my$代币(@Fld){
$worksheet->write($row,$col,$token);
$col++;
}
$row++;
}否则{
my$err=$csv->error\u输入;
打印“Text::CSV_XS parse()在参数“,$err,”\n”上失败;
}
}
}

如何修复它?

您需要关闭工作簿

$workbook->close();
另外,将您的Excel模块升级到最新版本,我还遇到了类似的Excel文件损坏问题,这在更新
电子表格::WriteExcel
时得到了解决

也来自

请注意binmode()的要求。Excel文件由以下部分组成: 二进制数据的存储。因此,如果您使用的是文件句柄,您应该 在将其传递给new()之前,请确保将其保存在binmode()中 无论您是否在Windows平台上,都要执行此操作。 这尤其适用于使用UTF-8的系统上的perl 5.8用户 可能正在运行,如RedHat Linux 9。如果你的程序, 无论有意与否,都会将UTF-8数据写入 传递给new()将损坏创建的Excel文件

$workbook->close();