0

一部のセルを空にする必要がある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);`
4

1 に答える 1

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

于 2012-06-19T18:28:38.257 に答える