Perl SpreadSheet :: XLSX错误:“无法打开Zip存档”

时间:2016-03-12 00:02:06

标签: excel perl spreadsheet

我正在尝试使用Spreadsheet:XLSX来读取Excel文件,但是我收到了包含CSV,XLS和XLSX文件上传的错误消息。我之前使用过Spreadsheet::Read和CSV文件。

代码很简单,我只是不知道要解决什么问题。

文件正确上传,我有正确的路径和文件名。

错误讯息:

Cannot open c:\Website\cgi-bin\bidprocess\files\SEIPA-request-0307123509.xlsx as Zip archive at C:/strawberry/perl/site/lib/Spreadsheet/XLSX.pm line 279.

代码:

# CHECK FOR VALID FILE 
my $filename = shift or die "ERROR: File not received.  Please try again.";

#DEBUG
print $filename;

# READ EXCEL FILE 
my $workbook = Spreadsheet::XLSX->new($filename);

3 个答案:

答案 0 :(得分:1)

哇,这就是这么简单的事情。

解决方案是以“二进制模式”打开文件,因为我使用Windows来区分文本和二进制数据。

http://perldoc.perl.org/functions/binmode.html

use CGI qw(:standard);

# upload file
my $upload_filehandle = upload("filename"); 

# open the uploaded file
open ( UPLOADFILE, ">$upload_dir/$filename" ) or die "$!";

# use binary mode (for Excel files on Windows)
binmode UPLOADFILE;

答案 1 :(得分:0)

您无法使用Spreadsheet:XLSX打开CSV或XLS文件。顾名思义,它是XLSX文件,它是压缩的XML文件。如果它不会打开这些,那么你的文件可能已损坏

答案 2 :(得分:-1)

由于您似乎在Windows上,如果您在该系统上安装了Excel,则可以使用一个选项:Win32::OLE模块直接控制Excel以读取/写入Excel文件。

对于CSV文件,可能更容易直接解析内容,就像它是文本文件一样,或使用类似Text::CSV模块的内容。