使用perl在excel和excel工作表中创建空白单元格
我有一张excel表格,需要清空其中的一些单元格 到目前为止,它看起来是这样的: 我打开表格,检查M列中是否有不为空的单元格。 我将这些单元格添加到我的数组中 然后我想把所有的单元格变成黑色并保存文件(这个步骤不起作用),因为这个文件需要作为另一个程序的输入/ 谢谢使用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
$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";