【问题标题】:What is a good CPAN parser for HTML MS Excel files?什么是 HTML MS Excel 文件的好 CPAN 解析器?
【发布时间】:2023-03-03 05:50:21
【问题描述】:

我知道可以通过Spreadsheet::ParseExcel 处理常规(二进制)Excel 文件。

但是,我有一个 HTML 格式的文件:

<html xmlns:x="urn:schemas-microsoft-com:office:excel">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=windows-1252">
<!--[if gte mso 9]>
<xml>
<x:ExcelWorkbook>
<x:ExcelWorksheets>
<x:ExcelWorksheet>
<x:Name>Holdings</x:Name>
<x:WorksheetOptions>

没有手动将其解析为通用 HTML 文件(例如 TreeBuilder 等),是否有 CPAN 模块可以解析并让我以电子表格的形式访问此类文件,类似于 Spreadsheet::ParseExcel

这是模块不起作用的地方:

#!/usr/local/bin/perl
use strict; use warnings;
use Spreadsheet::ParseExcel;
my $parser   = Spreadsheet::ParseExcel->new();
my $file     = 'file1.xls';
my $workbook;
eval {$workbook   = $parser->Parse($file);}; 
#($Workbook returned here is ‘undef’)

【问题讨论】:

    标签: perl parsing html-parsing excel


    【解决方案1】:

    我使用 XPath 解析器从这样的文件中提取我需要的内容,在 //Row 节点内的 ./Cell/Data 节点上进行迭代,但这与 Spreadsheet::ParseExcel 使用的接口不同。

    我还发现您需要先进行一些源过滤,然后才能使用 XML 解析器。至少你必须运行

    s/<xml version>/<!-- xml version -->/;
    s/&/&amp;/g
    

    关于输入。


    这是一个简洁但完整的解决方案,将这样的文件提取到二维数组:

    use XML::XPath;
    open F, '<', $dirty_file_name;
    open G, '>', $clean_file_name;
    while(<F>) { 
        s/<xml version>/<!-- xml version -->/;
        s/&/&amp;/g;
        print G
    }
    close G;
    close F;
    
    @table = map { [ map { $_->string_value } $_->find('./Cell/Data')->get_nodelist ]
      } XML::XPath->new( filename => $clean_file_name )->find('//Row')->get_nodelist;
    

    【讨论】:

    • 没有专门构建的 CPAN 模块?我很震惊!
    • 这是您的错误机会。将 @mob 的解决方案与一些额外的辅助方法捆绑在一起,你就赢了。
    猜你喜欢
    • 2011-03-08
    • 2010-12-20
    • 1970-01-01
    • 2011-04-12
    • 2010-10-03
    • 2011-09-19
    • 2013-08-03
    • 1970-01-01
    相关资源
    最近更新 更多