电子表格帮助::WriteExcel perl
我很难找到让电子表格::WriteExcel的write_row/write_col打印excel工作表中的行的方法 我有这种工作方法,可以将它们打印为文本文件。但将它们作为行/列写入excel工作表是我失败的地方。 我的$com_sam是这样的。它是一个多级散列,保存所有匹配的样本及其作为键的百分比,以及它们与每个样本匹配的所有其他详细信息。(X3、X32、E32_P、E32_PL是样本) 下面是我试图使用WriteExcel将它们打印到excel的代码电子表格帮助::WriteExcel perl,perl,Perl,我很难找到让电子表格::WriteExcel的write_row/write_col打印excel工作表中的行的方法 我有这种工作方法,可以将它们打印为文本文件。但将它们作为行/列写入excel工作表是我失败的地方。 我的$com_sam是这样的。它是一个多级散列,保存所有匹配的样本及其作为键的百分比,以及它们与每个样本匹配的所有其他详细信息。(X3、X32、E32_P、E32_PL是样本) 下面是我试图使用WriteExcel将它们打印到excel的代码 foreach my $pe
foreach my $percent ( sort { $b $a } keys %{ $com_sam->{ $s1 } } ){
249
250 my $match_samples = $com_sam->{ $s1 }->{ $percent };
251
252 foreach my $matSam( @ { $match_samples } ){
253 if( ( $s1 ne $matSam->{ sample } ) and ($matSam->{ percent } >= $top_percent) ) {
254
255 next if compare($s1, $matSam->{sample});
256 # print "****,$s1,$matSam->{ sample },$matSam->{ percent },$top,$top_percent,$matSam->{ NoofCalls },$matSam->{ match }, $matSam->{ NoofNs },****\n" ;
257 push @$log_array,($s1,$matSam->{ sample },$matSam->{ percent },$top,$top_percent,$matSam->{ NoofCalls },$matSam->{ match }, $matSam->{ NoofNs } );
258 push @$array_ref_log, @$log_array;
259 for my $col (0 ..7) {
260
261 for my $row (1 .. scalar(@sam2com) ) {
262
263 $worksheet->write_row($row,$col,$array_ref_log);#Wat I get with this is just a single sample compared rather than all the sample.
264 }
265
266
267 }
268 }else{
269
270 my $total_calls = $matSam->{ NoofCalls } + $matSam->{ NoofNs };
271
272 my $l = sprintf "%s, %s, %0.2f, %s, %0.2f,%s,%s,%s", $s1, $matSam->{ sample }, $matSam->{ percent }, $top, $top_percent,$matSam->{ NoofCalls },$matSam->{ match }, $matSam->{ NoofNs } ;
273
274 if( $total_calls == 97 ) {
275
276 # print "$l\n" if ( $matSam->{ NoofNs } { NoofNs } sample
287 }#end of percentage foreach loop
我希望看到这样的结果
X3,X3,100.00,X3,100.00,30,30, 0
X3,X32_P,100.00,X3,100.00,30,30, 0
X3,E32,100.00,X3,100.00,30,30, 0
但是我在excel中得到的是这样的。(当然不是逗号分隔:)
如何处理写入行/写入列的数组\u ref?
提前感谢仅从这段代码很难看出问题所在,但我可以提出一些建议 第一种方法是不要使用
write_row()
,因为它只是语法上的糖分,而是使用您自己的for()
循环和write()
第二个问题是,如果使用write_row()
,请确保清楚它在嵌套数组引用中的行为方式。研究中的示例,看看它是否符合您的期望。您可能需要write\u col()
最后,这不是一个真正的问题,更多地涉及到数据结构的处理。您可以用一个简单的
print()
语句替换write*函数,直到您确定已经捕获了需要捕获的数据,然后添加所需的WriteExcel函数。仅从这段代码很难判断问题出在哪里,但我可以提出一些建议
第一种方法是不要使用write_row()
,因为它只是语法上的糖分,而是使用您自己的for()
循环和write()
第二个问题是,如果使用write_row()
,请确保清楚它在嵌套数组引用中的行为方式。研究中的示例,看看它是否符合您的期望。您可能需要write\u col()
最后,这不是一个真正的问题,更多地涉及到数据结构的处理。您可以用一个简单的
print()
语句替换write*函数,直到您确定已经捕获了需要捕获的数据,然后添加所需的WriteExcel函数。可以使用Excel\U Writer\U XLSX perl mudule在XLSX文件中写入大量数据。在XLSX中迭代和打印数据非常简单,如下所示
my@records = ( [ "10001", "1/5/2011", "Jan", "Midwest", "Ami", "Binder", "94", "20" ],
[ "10002", "1/13/2011", "May", "West Coast", "Stevenson", "Pencil", "3", "275" ],
[ "10051", "2/24/2011", "Nov", "Midwest", "Jones", "Desk", "35", "4.99" ],
[ "10086", "3/7/2011", "Apr", "New England", "Andrews", "Pen Set", "16", "20" ],
[ "10450", "4/10/2011", "Dec", "Midwest", "Adams", "Ball", "20", "57.2" ],
[ "16001", "7/19/2011", "Mar", "West Coast", "Thompson", "Note Book", "28", "33.5" ],
[ "19565", "6/23/2011", "Jul", "Midwest", "Dwyer", "Scale", "15", "16" ],
[ "20048", "6/15/2011", "Oct", "Midwest", "Morgan", "Stickers", "96", "12" ],
[ "50962", "2/7/2011", "Feb", "New England", "Howard", "Clips", "52", "5.5" ],);
my $workbook = Excel::Writer::XLSX->new($outputFile);
$workbook->set_optimization();
my $worksheet = $workbook->add_worksheet('Test');
my $row = 0;
my $col = 0;
foreach my $record (@records){
$row++;
$col = 0;
foreach my $data (@{$record}){
$worksheet->write($row,$col,$data);
$col++;
}
}
有关更多详细信息,请参阅此链接中的“Write_largeData_XLSX.pl”。要在XLSX文件中写入大量数据,可以使用Excel\u Writer\u XLSX perl mudule。在XLSX中迭代和打印数据非常简单,如下所示
my@records = ( [ "10001", "1/5/2011", "Jan", "Midwest", "Ami", "Binder", "94", "20" ],
[ "10002", "1/13/2011", "May", "West Coast", "Stevenson", "Pencil", "3", "275" ],
[ "10051", "2/24/2011", "Nov", "Midwest", "Jones", "Desk", "35", "4.99" ],
[ "10086", "3/7/2011", "Apr", "New England", "Andrews", "Pen Set", "16", "20" ],
[ "10450", "4/10/2011", "Dec", "Midwest", "Adams", "Ball", "20", "57.2" ],
[ "16001", "7/19/2011", "Mar", "West Coast", "Thompson", "Note Book", "28", "33.5" ],
[ "19565", "6/23/2011", "Jul", "Midwest", "Dwyer", "Scale", "15", "16" ],
[ "20048", "6/15/2011", "Oct", "Midwest", "Morgan", "Stickers", "96", "12" ],
[ "50962", "2/7/2011", "Feb", "New England", "Howard", "Clips", "52", "5.5" ],);
my $workbook = Excel::Writer::XLSX->new($outputFile);
$workbook->set_optimization();
my $worksheet = $workbook->add_worksheet('Test');
my $row = 0;
my $col = 0;
foreach my $record (@records){
$row++;
$col = 0;
foreach my $data (@{$record}){
$worksheet->write($row,$col,$data);
$col++;
}
}
有关更多详细信息,请参阅此链接中的“Write_largeData_XLSX.pl”。
$array\u ref\u log
似乎未设置-这不可能是您为获得该输出而运行的实际代码…?抱歉,我已对其进行了注释。但在我运行脚本时没有注释。问题就在这一点上。这就是为什么我不能发布整个脚本。$array\u ref\u log
似乎没有设置-这不可能是您运行以获得该输出的实际代码…?抱歉,我已经对其进行了注释。但在我运行脚本时没有注释。问题就在这一点上。这就是为什么我不能发布整个脚本。
my@records = ( [ "10001", "1/5/2011", "Jan", "Midwest", "Ami", "Binder", "94", "20" ],
[ "10002", "1/13/2011", "May", "West Coast", "Stevenson", "Pencil", "3", "275" ],
[ "10051", "2/24/2011", "Nov", "Midwest", "Jones", "Desk", "35", "4.99" ],
[ "10086", "3/7/2011", "Apr", "New England", "Andrews", "Pen Set", "16", "20" ],
[ "10450", "4/10/2011", "Dec", "Midwest", "Adams", "Ball", "20", "57.2" ],
[ "16001", "7/19/2011", "Mar", "West Coast", "Thompson", "Note Book", "28", "33.5" ],
[ "19565", "6/23/2011", "Jul", "Midwest", "Dwyer", "Scale", "15", "16" ],
[ "20048", "6/15/2011", "Oct", "Midwest", "Morgan", "Stickers", "96", "12" ],
[ "50962", "2/7/2011", "Feb", "New England", "Howard", "Clips", "52", "5.5" ],);
my $workbook = Excel::Writer::XLSX->new($outputFile);
$workbook->set_optimization();
my $worksheet = $workbook->add_worksheet('Test');
my $row = 0;
my $col = 0;
foreach my $record (@records){
$row++;
$col = 0;
foreach my $data (@{$record}){
$worksheet->write($row,$col,$data);
$col++;
}
}