如何用Perl

时间:2017-01-12 11:53:13

标签: perl

我在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');
    

当我双击列时,撇号就会显示:

  

The apostrophes just show when I double click to column

我已经使用该数据绘制图表,但列是格式化文本,所以我认为这就是图表没有显示行的原因。在将数据写入Excel之前,我应该将数组转换为Perl中的时间吗?

我很抱歉,因为上一个问题不明确,我的英语也不好。

谢谢大家的支持。

3 个答案:

答案 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将数字放在左边而不是右边。

number as a string goes to the left

您还可以在左上角看到绿色的小三角形,以及它在所选列旁边显示的<!>

我相信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列中的值来绘制图表。