如果在 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】:

这通常是在函数中处理dies 的方式:

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 的进度条?

如何从 Perl 快速访问许多大型 CSV 文件中的数据?

在 xlsx 文件中查找损坏的数据

怎样在Android中解析doc,docx,xls,xlsx格式文

Perl学习15之perl读excel表格