如果在 perl 中解析大型 xlsx 文件,则处理异常 [关闭]
Posted
技术标签:
【中文标题】如果在 perl 中解析大型 xlsx 文件,则处理异常 [关闭]【英文标题】:Handle exception if parsing large xlsx file in perl [closed] 【发布时间】:2021-09-17 05:03:55 【问题描述】:如果脚本无法解析大型 xlsx 文件,我想显示弹出窗口。
my $parser = Spreadsheet::ParseXLSX->new;
my $workbook = $parser->parse("file.xlsx");
如果我提交了大的 xlsx 文件,我的 perl cgi 页面会变成空白。 在这里我需要处理如果下面的解析函数不成功,那么将在 catch/finally 方法中添加 javascript 以弹出“无效文件”。
my $workbook = $parser->parse("file.xlsx");
【问题讨论】:
如果你提交一个大文件,你真的拿到文件了吗?各种框架对上传大小都有限制。备份几个步骤以查看文件是否完全存在,如果是问题所在,则处理那里的错误。 我正在从 perl/CGI 页面提交该文件,并在服务器位置获取该文件,因为在解析它之前,我正在将该文件复制到服务器位置。 【参考方案1】:这通常是在函数中处理die
s 的方式:
eval # try block
my $workbook = $parser->parse("file.xlsx");
# ...other operations
;
if($@) # catch
print "$@"; # print the message
【讨论】:
在使用这个时,我在网络浏览器中获得了内部服务器 500。我们需要任何库吗? @Bakli 对不起,没有。不过,浏览器中的内部 500 听起来很奇怪。你确定这不是来自服务器吗?无论如何,我的回答是否回答了您的问题并可以捕获异常? 500 内部错误可能来自在标题之前打印“Got exception”。 @TLP 是的,这是一个新事物。我读过它,但从未使用过它。我现在查了一下,它似乎是 5 个月前合并的(我猜是从实验性提升的)。 @TedLyngmo 在编写 CGI 项目时,我发现将 cgi 脚本 STDERR 重定向到本地日志文件很有用,因此我可以轻松找到最新的相关错误消息。【参考方案2】:这在documentation:
解析($filename, $formatter)
Parser parse() 方法返回一个“工作簿”对象。
my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse('Book1.xls');
如果发生错误,parse() 返回 undef。一般来说,程序应该 包含一个解析失败的测试,如下所示:
my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse('Book1.xls');
if ( !defined $workbook )
die $parser->error(), ".\n";
您使用的模块的文档,Spreadsheet::ParseXLSX
指向主模块 Spreadsheet::ParseExcel
的文档:
此模块是用于读取 XLSX 文件的 Spreadsheet::ParseExcel 的适配器。有关可以从这些类中检索的各种数据的文档,请参阅 Spreadsheet::ParseExcel、Spreadsheet::ParseExcel::Workbook、Spreadsheet::ParseExcel::Worksheet 和 Spreadsheet::ParseExcel::Cell。
【讨论】:
谢谢,但我已经读过了,我也在使用它。但是应用程序本身并没有从我的 $workbook = $parser->parse('Book1.xls'); 中移动,所以我只需要处理这个特定的行,它进入停止模式然后将在 catch 中处理。 @Bakli 您可以编辑您的问题以显示您如何处理这种情况。它通常比试图用文字描述要清楚得多。 @Bakli 为什么你不说你已经尝试过建议的解决方案? 感谢您的建议,但这就是为什么我只提到下面需要处理的代码行my $workbook = $parser->parse('Book1.xls');
。因为在调试同一系统时进入停止模式并且它不会从这个。
@Bakli 进程还在服务器上运行吗?尝试杀死它。这里缺少一些信息。如果您尝试在命令提示符下运行该脚本,它会起作用吗? IE。是文件解析有问题,还是与网络服务器相关?以上是关于如果在 perl 中解析大型 xlsx 文件,则处理异常 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在javascript中读取本地xls/xlsx文件[关闭]
如何制作从大型 xlsx 文件加载 pandas DataFrame 的进度条?