【问题标题】:.xlsx to xml conversion in PerlPerl 中的 .xlsx 到 xml 转换
【发布时间】:2011-07-08 19:07:54
【问题描述】:

我正在尝试将 .xlsx 文件转换为 .xml 文件。 .xlsx 文件的第一行(标题)将成为 xml 文件的标签。

我在下面编写了运行良好的代码-

 open(XML, ">temp.csv") or die "not able to open $!";

 use Spreadsheet::XLSX;
 my $excel = Spreadsheet::XLSX -> new ('test.xlsx');

 foreach my $sheet (@{$excel -> {Worksheet}}) {
         $sheet -> {MaxRow} ||= $sheet -> {MinRow};
         foreach my $row ($sheet -> {MinRow} .. $sheet -> {MaxRow}) {
                $sheet -> {MaxCol} ||= $sheet -> {MinCol};
                foreach my $col ($sheet -> {MinCol} ..  $sheet -> {MaxCol}) {
                        my $cell = $sheet -> {Cells} [$row] [$col];
                        if ($cell) {
                           print XML $cell -> {Val};
                        }
                        unless($col == $sheet -> {MaxCol}) {print XML ",";} 
                }
                unless( $row == $sheet -> {MaxRow}){print XML "\n";}
         }
  }
 close(XML);
 use XML::CSV; 
 my $csv_obj = XML::CSV->new(); 
    $csv_obj->parse_doc("temp.csv", {headings => 1});
    $csv_obj->print_xml("out.xml");

任何人都可以提出更好的代码(模块),因为我必须处理大型 .xlsx 文件。

提前致谢。

男人

【问题讨论】:

    标签: xml perl excel xlsx


    【解决方案1】:

    如果您的代码正常工作,那么您为什么需要更好的代码?如果只是为了速度,您需要找到一种方法来避免写入临时 .csv 文件。文件 IO 很慢,您正在写入,然后重新读取和重新解析。您能否不将数据读入散列,然后使用XML::Simple 或CPAN 上的任何其他XML 模块将其转储到XML 文件中?再写一个CSV,重读、重解析、写XML会很慢!

    【讨论】:

      【解决方案2】:

      您是否可以访问装有 excel 2007 或更高版本的 Windows 机器?然后你可以这样做:

      my $excel = Win32::OLE->new( 'Excel.Application' )
        or die "Could Not Start Excel.\n";
      $excel->{ 'Visible' }           = 0;
      $excel->{ DisplayAlerts }       = 0;
      
      my $workbook = $excel->Workbooks->Open( 'test.xlsx' );
      
      #save as Spreadsheet XML (46)
      # 51 = xlsx, more mappings here: http://www.datapigtechnologies.com/downloads/Excel_Enumerations.txt
      $workbook->SaveAs( $output_file, 46 );
      $workbook->Close();
      $excel->Quit();
      

      【讨论】:

        【解决方案3】:

        在 githup 上有一个项目来开发一个轻量级的XLSX reader。它目前处于某种 alpha 状态,但它确实有效。喜欢的可以试试。

        【讨论】:

          猜你喜欢
          • 2015-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-30
          • 2014-02-22
          • 1970-01-01
          • 2019-12-10
          • 2017-05-28
          相关资源
          最近更新 更多