Excel :: Writer :: XLSX单元格(带date和时间)需要刷新

我可以使用Excel :: Writer :: XLSX包从DBI查询的结果中成功创buildxlsx。

唯一的麻烦是在Excel 2010中打开的date和时间单元格需要刷新,即F2 <enter>才能正确显示。

显示示例2012-12-02 17:48:33.000电子表格打开时

一旦刷新: 02/12/2012 17:49 F2 <enter>后的所需格式

我将不胜感激任何提示/指导什么可能会导致这一点,如果这个问题可以在我的Perl脚本中解决?

非常感谢…

PS自动计算启用,Win 7的StrawberryPerl 5.16

更新:为了完整起见,并且可能对其他人有所帮助:我正在使用以下构造来从查询中写入logging,这些logging可能是纯string或date时间。

如果一个muff或者正则expression式捕获date,或者将sprintf放入write_excel_date方法所要求的正确格式string中, write_excel_date一个普通string写入单元格。 那是我的问题。

 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 ); } 

如果使用工作表write_date_time()方法编写date,则不必在Excel中刷新它们,因为它们只是格式化的数字,不需要重新计算。

但是,如果您将date写入string,则需要在Excel中执行某些操作以将其转换为date。 你不应该这样做,因为Excel :: Writer :: XLSX提供了一个写date的专用方法:

 #!/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文档的date和时间部分,了解如何处理date的详细说明。

如何将一行VBA代码添加到Workbook_Open()事件?

 Private Sub Workbook_Open() Application.Calculate End Sub 

会满足你的需求吗?