【问题标题】:Excel::Writer::XLSX cells (with date and time) need to be refreshedExcel::Writer::XLSX 单元格(带有日期和时间)需要刷新
【发布时间】:2012-12-03 19:21:24
【问题描述】:

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

唯一的问题是日期和时间单元格,在 Excel 2010 中打开时,需要刷新,即 F2 <enter> 才能正常显示。

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

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

我将不胜感激任何关于可能导致此问题的提示/指导以及是否可以在我的 Perl 脚本中解决此问题?

非常感谢...

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

更新:为了完整起见,并且可能对其他人有所帮助:我使用以下构造从查询中写入记录,可能是纯字符串或日期时间。

如果一个 muff 是捕获日期的正则表达式,或者是 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 );
}

【问题讨论】:

  • 您使用的是$worksheet->write_date_time() 和适当的格式吗?
  • 是的。正如下面约翰的帖子所评论的那样,我的脚本无法捕获日期和时间“令牌”,因此只是将其打印为字符串。奇怪,因为它看起来很简单......要再努力一点......谢谢

标签: perl excel


【解决方案1】:

如果您使用 Worksheet 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 部分。

【讨论】:

  • 您的基本示例当然有效。当从我的 DBI 查询接收到日期和时间时,我的错误是无法测试和捕获,else 子句只是作为常规字符串打印。 br>感谢您为我指明正确的方向,John 并为这个伟大的模块(及其前辈...)赞不绝口。
【解决方案2】:

Workbook_Open() 事件添加一行VBA 代码怎么样?

Private Sub Workbook_Open()

  Application.Calculate

End Sub

这能满足您的需求吗?

【讨论】:

  • 虽然考虑了几秒钟,但我认为我可能犯了一些基本错误。不过谢谢你的建议。
猜你喜欢
  • 2019-06-29
  • 2016-06-05
  • 1970-01-01
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
  • 1970-01-01
相关资源
最近更新 更多