需要更多关于如何使用Spreadsheet :: ParseExcel的例子

我一直在使用Spreadsheet :: ParseExcel列出电子表格的内容。 我已经看到了几个关于如何转储整个电子表格的例子。 我真的很想看看如何更有select地使用这个脚本。

IBM下面的例子基本上转储了所有有数据的单元格的内容。

#!/usr/bin/perl -w use strict; use Spreadsheet::ParseExcel; my $oExcel = new Spreadsheet::ParseExcel; die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV; my $oBook = $oExcel->Parse($ARGV[0]); my($iR, $iC, $oWkS, $oWkC); print "FILE :", $oBook->{File} , "\n"; print "COUNT :", $oBook->{SheetCount} , "\n"; print "AUTHOR:", $oBook->{Author} , "\n" if defined $oBook->{Author}; for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) { $oWkS = $oBook->{Worksheet}[$iSheet]; print "--------- SHEET:", $oWkS->{Name}, "\n"; for(my $iR = $oWkS->{MinRow} ; defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) { for(my $iC = $oWkS->{MinCol} ; defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) { $oWkC = $oWkS->{Cells}[$iR][$iC]; print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC); } } } 

有人可以给我一个例子,我怎么可以指定一些行动,为每一行的某一列?

例如,我有一个7列和n行的电子表格。 我想以某种方式重新格式化每一列中的数据。 也许我想为每一行取第6列,并在存储在单元格中的string末尾附加一些文本。 那将如何build立?

要修改Excel文件, Spreadsheet :: ParseExcel :: SaveParser模块非常有用。 它允许您读取文件,进行修改,然后将修改后的内容写入新文件。 这是一个简单的例子:

 use strict; use warnings; use Spreadsheet::ParseExcel; use Spreadsheet::ParseExcel::SaveParser; my $excel_file_name = $ARGV[0]; my $parser = Spreadsheet::ParseExcel::SaveParser->new(); my $workbook_orig = $parser->Parse($excel_file_name); # We will edit column 7 of the first worksheet. my $worksheet = $workbook_orig->worksheet(0); my $EDIT_COL = 6; my ($row_min, $row_max) = $worksheet->row_range(); for my $r ($row_min .. $row_max){ my $cell = $worksheet->get_cell($r, $EDIT_COL); unless (defined $cell){ next; # Modify as needed to handle blank cells. } my $val = $cell->value . '_append_text'; $worksheet->AddCell( $r, $EDIT_COL, $val, $cell->{FormatNo} ); } # You can save the modifications to the same file, but when # you are learning, it's safer to write to a different file. $excel_file_name =~ s/\.xls$/_new.xls/; $workbook_orig->SaveAs($excel_file_name); 

对于其他许多示例,请参阅优秀的文档:

  • 电子表格:: ParseExcel的:: SaveParser
  • 电子表格:: WriteExcel
  • 电子表格:: WriteExcel ::例子
  • 电子表格:: ParseExcel的

要以某种方式重新格式化每列中的数据,可以使用Spreadsheet::ParseExcelSpreadsheet::WriteExcel模块的组合

通过Spreadsheet::WriteExcel模块创build一个新的Excel,并在其中添加工作表。然后parsing现有的Excel,并将内容写入新的excel并格式化。

这里是一个示例:

 use strict; use Spreadsheet::ParseExcel; use Spreadsheet::WriteExcel; die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV; my $oBook = $oExcel->Parse($ARGV[0]); my($iR, $iC, $oWkS, $oWkC); my $workbook = Spreadsheet::WriteExcel->new('/root/Desktop/test_simple.xls'); my $worksheet = $workbook->add_worksheet(); $worksheet->set_column('A:A', 50); my $format = $workbook->add_format(); $format->set_size(10); $format->set_bold(); $format->set_color('black'); $format->set_font('Verdana'); $format->set_text_wrap(); for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) { $oWkS = $oBook->{Worksheet}[$iSheet]; for(my $iR = $oWkS->{MinRow} ;defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ;$iR++) { for(my $iC = $oWkS->{MinCol} ;defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ;$iC++) { $oWkC = $oWkS->{Cells}[$iR][$iC]; $worksheet->write($iR , $iC, $oWkC->Value, $format) if($oWkC); #writing a new excel from existing excel } } } 

在从现有的Excel中写入一个新的Excel后,可以使用Spreadsheet::WriteExcel API来添加数据。它将解决像

  1. 首先它会保留你现有的Excel文件。
  2. 您可以在不修改原始Excel文件的情况下,格式化为新的Excel文件。