使用perl使单元格空白并使用Excel表格

时间:2012-06-19 15:50:39

标签: perl excel parsing

我有一张excel表,我需要清空一些单元格

到目前为止,这就是它的样子:

我打开工作表,检查M列中的空单元格是否为空。 我将这些单元格添加到我的数组错误中 然后我想使所有那些单元格变黑并保存文件(此步骤不起作用),因为该文件需要是另一个程序的输入/ 谢谢!

$infile = $ARGV[0];

 $columns = ReadData($infile) or die "cannot open excel table\n\n";
 print "xls sheet contains $columns->[1]{maxrow} rows\n";

 my $xlsstartrow;
 if ( getExcel( A . 1 ) ne "text" ) {

$xlsstartrow = 2;   
 }
 else 
 {
$xlsstartrow = 4;
 }


 check_templates();
 print "done";
 sub check_templates {

for ( $row = $xlsstartrow ; $row < ( $columns->[1]{maxrow} + 1 ) ; $row++ ) {

    if (getExcel(M . $row) ne ""  ){ 

        $cell = "M" . $row ;

        push(@mistakes,$cell);

    }

}
 rewritesheet(@mistakes);


 }

 sub rewritesheet {


my $FileName = $infile;
 my $parser   = Spreadsheet::ParseExcel::SaveParser->new();
 my $template = $parser->Parse($FileName);
my $worksheet = $template->worksheet(0);


my $row      = 0;
my $col      = 0;
# Get the format from the cell

my $format   = $template->{Worksheet}[$sheet]
                       ->{Cells}[$row][$col]
                        ->{FormatNo};


    foreach (@mistakes){


$worksheet->AddCell( $_, "" ); 
}          

 $template->SaveAs($infile2);`

1 个答案:

答案 0 :(得分:1)

Excel工作表中的空列值并保存结果?

如果程序的整个目的是从.xls文件中删除所有列M值,那么以下程序(从您的程序中采用)将完全执行:

  use strict;
  use warnings;
  use Spreadsheet::ParseExcel;
  use Spreadsheet::ParseExcel::SaveParser;

   my $infile  = $ARGV[0];
  (my $infile2 = $infile) =~ s/(\.xls)$/_2$1/;
   my $parser  = Spreadsheet::ParseExcel::SaveParser->new();
   my $workbook = $parser->Parse($infile);

   my $sheet = $workbook->worksheet(0);
   print "xls sheet contains rows \[0 .. $sheet->{MaxRow}\]\n";
   my $startrow = $sheet->get_cell(0, 0) eq 'text' ? 4-1 : 2-1;

   my $col_M = ord('M') - ord('A');
   for my $row ($startrow .. $sheet->{MaxRow}) {
      my $c = $sheet->get_cell($row, $col_M);
      if(defined $c && length($c->value) > 0) { # why check?
         $sheet->AddCell($row, $col_M, undef) # delete value
      }
   }
   $workbook->SaveAs($infile2);
   print "done";

但是,如果您真的只想清除M列,为什么要测试值?您可以在没有测试的情况下覆盖它们。也许那不是你的所有程序都需要执行吗?我不知道。

此致

RBO