我可以使用Excel :: Writer :: XLSX包从DBI查询的结果中成功创建xlsx。
唯一的麻烦是日期和时间单元格在Excel 2010中打开时需要刷新,即F2 <enter>
才能正常显示。
显示示例:打开电子表格时2012-12-02 17:48:33.000
在02/12/2012 17:49
F2 <enter>
所需格式
对于可能导致此问题的任何提示/指导以及是否可以在我的Perl脚本中解决此问题,我将不胜感激?
非常感谢......
启用PS自动计算,Win 7上的StrawberryPerl 5.16
更新:为了完整起见,并且可能对其他人有所帮助:我使用以下构造从查询中写入记录,这些记录可能是纯字符串或日期时间。
如果一个套接字是正则表达式捕获日期,或者sprintf
将其置于write_excel_date
方法所需的正确格式字符串中,则会向该单元格写入一个纯字符串。那是我的问题。
if ( $item =~ qr[(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})\.000] ) {
my $date = sprintf "%4d-%02d-%02dT%02d:%02d:%02d", $1, $2, $3, $4, $5, $6;
$worksheet->write_date_time( $row, $col++, $date, $date_format);
}
else {
$worksheet->write( $row, $col++, $item );
}
答案 0 :(得分:3)
如果使用工作表write_date_time()
方法编写日期,则不必在Excel中刷新它们,因为它们只是格式化的数字,不需要重新计算。
但是,如果您将日期写为字符串,则需要在Excel中执行某些操作以将日期转换为日期。您不应该这样做,因为Excel :: Writer :: XLSX提供了一种写日期的专用方法:
#!/usr/bin/perl
use strict;
use warnings;
use Excel::Writer::XLSX;
my $workbook = Excel::Writer::XLSX->new( 'date_example.xlsx' );
my $worksheet = $workbook->add_worksheet();
my $date_format = $workbook->add_format( num_format => 'dd/mm/yyyy hh:mm' );
# Increase the column width to make the output clearer.
$worksheet->set_column( 'A:A', 20 );
# Write the date.
$worksheet->write_date_time( 'A1', '2012-12-02T17:48:33.000', $date_format );
__END__
有关如何处理日期的详细说明,请参阅Excel :: Writer :: XLSX文档的Dates and Times部分。
答案 1 :(得分:0)
如何在Workbook_Open()
事件中添加一行VBA代码呢?
Private Sub Workbook_Open()
Application.Calculate
End Sub
会满足你的需求吗?