Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.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
使用perl在excel和excel工作表中创建空白单元格_Perl_Excel_Parsing - Fatal编程技术网

使用perl在excel和excel工作表中创建空白单元格

使用perl在excel和excel工作表中创建空白单元格,perl,excel,parsing,Perl,Excel,Parsing,我有一张excel表格,需要清空其中的一些单元格 到目前为止,它看起来是这样的: 我打开表格,检查M列中是否有不为空的单元格。 我将这些单元格添加到我的数组中 然后我想把所有的单元格变成黑色并保存文件(这个步骤不起作用),因为这个文件需要作为另一个程序的输入/ 谢谢 $infle=$ARGV[0]; $columns=ReadData($infle)或die“无法打开excel表\n\n”; 打印“xls工作表包含$columns->[1]{maxrow}行\n”; 我的$xlsstartrow

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

到目前为止,它看起来是这样的:

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

$infle=$ARGV[0];
$columns=ReadData($infle)或die“无法打开excel表\n\n”;
打印“xls工作表包含$columns->[1]{maxrow}行\n”;
我的$xlsstartrow;
if(getExcel(A.1)ne“文本”){
$xlsstartrow=2;
}
其他的
{
$xlsstartrow=4;
}
检查_模板();
打印“完成”;
子检查模板{
对于($row=$xlsstartrow;$row<($columns->[1]{maxrow}+1);$row++){
如果(getExcel(M.$row)ne“”){
$cell=“M”。$row;
推送(@错误,$cell);
}
}
重写工作表(@错误);
}
子表{
我的$FileName=$infle;
my$parser=Spreadsheet::ParseExcel::SaveParser->new();
我的$template=$parser->Parse($FileName);
我的$工作表=$模板->工作表(0);
我的$row=0;
我的$col=0;
#从单元格中获取格式
我的$format=$template->{sheet}[$sheet]
->{Cells}[$row][$col]
->{FormatNo};
foreach(@错误){
$worksheet->AddCell($\“”);
}          
$template->SaveAs($infile2)`
是否在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

您使用哪些模块来处理Excel文件?看起来是这样的。请发布一个完整的脚本,并使用
使用严格;
使用警告;
开始您的脚本。然后-计算出现在将显示的许多错误消息和警告。如果您无法解决问题,请尝试将程序减少到几行(只按你的要求做)。
  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";