我正在尝试使用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);
答案 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模块的内容。