【发布时间】:2011-09-15 13:55:24
【问题描述】:
我很难找到让 Spreadsheet::WriteExcel 的 write_row/write_col 打印 Excel 工作表中的行的方法。
我有这种工作方法可以将它们打印为文本文件。但是将它们作为行/列写入excel工作表是我失败的地方。 我的 $com_sam 是这样的。它是一个多级哈希,它包含所有匹配的样本及其百分比作为键,以及它们与每个样本匹配的所有其他细节。(X3,X32,E32_P,E32_PL 是样本)
'X3' => {
'100.00' => [
{
'NoofCalls' => 30,
'percent' => '100.00',
'NoofNs' => 0,
'match' => 30,
'sample' => 'X3'
},
{
'NoofCalls' => 30,
'percent' => '100.00',
'NoofNs' => 0,
'match' => 30,
'sample' => 'X32'
},
{
'NoofCalls' => 30,
'percent' => '100.00',
'NoofNs' => 0,
'match' => 30,
'sample' => 'E32_P'
},
{
'NoofCalls' => 30,
'percent' => '100.00',
'NoofNs' => 0,
'match' => 30,
'sample' => 'E32_PL'
},
这是我尝试使用 WriteExcel 将它们打印到 excel 的代码。
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 中得到这样的结果。 (当然不是逗号分隔:))
X3,X32,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
X3,X32,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
X3,X32,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
X3,X32,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
X3,X32,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
X3,X32,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
X3,X32,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
X3,X32,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
应该如何处理 write_row/write_col 的 array_ref? 提前致谢
【问题讨论】:
-
$array_ref_log似乎没有设置 - 这不可能是您运行以获得该输出的实际代码...? -
对不起,我已经评论过了。但是我运行脚本时没有注释。问题就在这一点上。这就是我努力发布整个脚本的原因。
标签: perl