Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 什么是读取XLSM文件的Perl模块?_Excel_Csv_Perl_Xlsm - Fatal编程技术网

Excel 什么是读取XLSM文件的Perl模块?

Excel 什么是读取XLSM文件的Perl模块?,excel,csv,perl,xlsm,Excel,Csv,Perl,Xlsm,我的代码对XLSX文件非常有效,但在XLSM输入文件中会中断 要求 读取Excel的整行而不是单元格值 我不想使用我的$parser=电子表格::ParseXLSX->new(); 我的$工作簿=$parser->parse($prvs\u excel\u文件); 因为它只解析单元格值 我已经有一段时间没有查看可用的内容了,但是电子表格::Reader::ExcelXML解决的问题之一是访问xlsm文件。这部分是因为潜在危险的宏可以存储在带有xlsm扩展的电子表格中。大多数其他软件包通过故意不允

我的代码对XLSX文件非常有效,但在XLSM输入文件中会中断

要求

  • 读取Excel的整行而不是单元格值
  • 我不想使用我的$parser=电子表格::ParseXLSX->new(); 我的$工作簿=$parser->parse($prvs\u excel\u文件); 因为它只解析单元格值

  • 我已经有一段时间没有查看可用的内容了,但是电子表格::Reader::ExcelXML解决的问题之一是访问xlsm文件。这部分是因为潜在危险的宏可以存储在带有xlsm扩展的电子表格中。大多数其他软件包通过故意不允许这种扩展来避免这种风险。电子表格::Reader::ExcelXML通过不提供通过接口访问宏二进制子文件的权限,避免了恶意宏的风险。虽然包装很旧,但在这一点上有些易碎。然而,听起来Håkon Hægland表示有兴趣帮助解决脆性问题,这是个好消息

    要潜在地解决OP问题,请参见下面的代码:From
    还要检查“fetchrow\u array”和“fetchrow\u hashref”方法

    use strict;
    use warnings;
    use Data::Dumper;
     
    use Spreadsheet::Reader::ExcelXML;
    my $workbook =  Spreadsheet::Reader::ExcelXML->new( #similar style to Spreadsheet::XLSX
                                            file => 't/test_files/TestBook.xlsx',# in the test folder of this package
                                            group_return_type => 'value',
                                    );
     
    if ( !$workbook->file_opened ) {
            die $workbook->error(), ".\n";
    }
     
    my      $worksheet = $workbook->worksheet( 'Sheet5' );
            $worksheet->set_custom_formats( {
                    2 =>'yyyy-mm-dd',
            } );
    my $value;
    while( !$value or $value ne 'EOF' ){
            $value = $worksheet->fetchrow_arrayref;
            print Dumper( $value );
    }
     
    ###########################
    # SYNOPSIS Output
    # $VAR1 = [ 'Superbowl Audibles', 'Column Labels' ];
    # $VAR1 = [         'Row Labels',     2016-02-06', '2017-02-14', '2018-02-03', 'Grand Total' ];
    # $VAR1 = [               'Blue',            '10',          '7',           '',          '17' ];
    # $VAR1 = [              'Omaha',              '',           '',          '2',           '2' ];
    # $VAR1 = [                'Red',            '30',          '5',          '3',          '38' ];
    # $VAR1 = [        'Grand Total',            '40',         '12',          '5',          '57' ];
    # $VAR1 = 'EOF';
    ###########################
    

    你试过了吗?是的,我试过了。它不符合我的行读取“读取Excel的整行而不是单元格值”的要求。我正在研究它。目前,我甚至无法安装模块Spreadsheet::Reader::ExcelXML(由于测试失败)。另一个问题是,在cpan发挥神奇作用之前,必须从github安装该包。
    use strict;
    use warnings;
    use Data::Dumper;
     
    use Spreadsheet::Reader::ExcelXML;
    my $workbook =  Spreadsheet::Reader::ExcelXML->new( #similar style to Spreadsheet::XLSX
                                            file => 't/test_files/TestBook.xlsx',# in the test folder of this package
                                            group_return_type => 'value',
                                    );
     
    if ( !$workbook->file_opened ) {
            die $workbook->error(), ".\n";
    }
     
    my      $worksheet = $workbook->worksheet( 'Sheet5' );
            $worksheet->set_custom_formats( {
                    2 =>'yyyy-mm-dd',
            } );
    my $value;
    while( !$value or $value ne 'EOF' ){
            $value = $worksheet->fetchrow_arrayref;
            print Dumper( $value );
    }
     
    ###########################
    # SYNOPSIS Output
    # $VAR1 = [ 'Superbowl Audibles', 'Column Labels' ];
    # $VAR1 = [         'Row Labels',     2016-02-06', '2017-02-14', '2018-02-03', 'Grand Total' ];
    # $VAR1 = [               'Blue',            '10',          '7',           '',          '17' ];
    # $VAR1 = [              'Omaha',              '',           '',          '2',           '2' ];
    # $VAR1 = [                'Red',            '30',          '5',          '3',          '38' ];
    # $VAR1 = [        'Grand Total',            '40',         '12',          '5',          '57' ];
    # $VAR1 = 'EOF';
    ###########################