我在Perl中生成一个Excel::Writer::XLSX的报告。报告已经生成,但不幸的是,格式不正确,附加撇号'
。
从mysql获取的数组:$month[$i][7]
(注意:该列使用time(3)
类型。示例:00:22:12.212
)。
用于将数据写入Excel的Perl命令:$sheet1->write($row,7,$month[$i][7],$format1);#7
列的格式:
my $format1 = $workbook->add_format(
center_across => 1,
bold => 0,
size => 11,
border => 1,
text_wrap => 1,
color => 'black',
bg_color => '#ffffff',
num_format => 'hh:mm:ss.000',
align => 'center',
valign => 'vcenter');
当我双击列时,撇号就会显示:
我已经使用该数据绘制图表,但列是格式化文本,所以我认为这就是图表没有显示行的原因。在将数据写入Excel之前,我应该将数组转换为Perl中的时间吗?
我很抱歉,因为上一个问题不明确,我的英语也不好。
谢谢大家的支持。
答案 0 :(得分:1)
#!/usr/bin/perl
$string = "002212212"; # => 00:22:12.212
$string =~ s/^(\d{2})(\d{2})(\d{2})(\d{3})/$1:$2:$3.$4/;
print $string, "\n\n";
答案 1 :(得分:1)
这是Excel自定义的内容。单引号'
用于强制数字进入Excel中的字符串上下文。它没有显示,但它使Excel将数字放在左边而不是右边。
您还可以在左上角看到绿色的小三角形,以及它在所选列旁边显示的<!>
。
我相信Excel :: Writer :: XLSX会猜测你是否有字符串或数字,但由于你的格式相当奇怪00:22:12.212
它没有看到它。
您可以尝试使用write_number
代替write
。但我们需要知道变量$month[$i][7]
中究竟有什么。如果它是文字00:22:12.212
,这可能无济于事。
答案 2 :(得分:0)
我找到了在perl中使用excel writer插入时间值的方法。
第1步:将数据写入另一列。
$worksheet1->write("A2","00:22:12.212",$datablank);
文字大小= 1且颜色=白色的格式。这样,A2列看起来就像是空的。 (不要再写A2栏了。)
my $datablank = $workbook->add_format(
bold => 0,
size => 1,
border => 0,
text_wrap => 1,
color => 'white',
num_format => '[h]:mm:ss.000'
);
第2步:使用TIMEVALUE
编写一个公式,如下所示:
$worksheet1->write_formula("A1","=TIMEVALUE(A2)",$datatimeformat);
格式:
my $datatimeformat = $workbook->add_format(
center_across => 1,
bold => 0,
size => 11,
border => 1,
text_wrap => 1,
color => 'black',
bg_color => '#ffffff',
num_format => 'hh:mm:ss.000',
align => 'center',
valign => 'vcenter');
注意:我们应该使用A1列中的值来绘制图表。