2

我使用Excel::Writer::XLSX模块生成excel报表,但是日期格式并没有根据不同的地区变化。

例如,如果我将区域设置为“English-United States”,则日期格式应为 Excel 表上显示的“mm/dd/yyyy”,如果我将区域重置为“French-France”,则日期格式应为'dd/mm/yyyy'。

所以我想知道它是如何使用 Excel::Writer::XLSX 实现的。谢谢。

4

1 回答 1

1

Excel 存储有限数量的具有区域设置的日期格式。例如,在 Excel 中的数字格式对话框中,您将看到如下警告:

根据您指定的类型和语言环境(位置),将日期和时间序列号显示为日期值。以星号 (*) 开头的日期格式会响应控制面板中指定的区域日期和时间设置的更改。没有星号的格式不受控制面板设置的影响。

在 Excel::Writer::XLSX 中,您可以使用num_formatid 编号而不是格式字符串来设置这些。例如:

#!/usr/bin/perl

use strict;
use warnings;
use Excel::Writer::XLSX;

my $workbook   = Excel::Writer::XLSX->new( 'dates.xlsx' );
my $worksheet  = $workbook->add_worksheet( 'Demo' );

$worksheet->set_column('A:A', 20);


# Regional date format.
my $date_format_1 = $workbook->add_format( num_format => 14 );

# Non-regional date format.
my $date_format_2 = $workbook->add_format( num_format => 'dd/mm/yy' );

$worksheet->write_date_time( 'A1', '2013-10-27T', $date_format_1 );
$worksheet->write_date_time( 'A2', '2013-10-27T', $date_format_2 );

__END__

有关内置格式 ID 的更多示例,请参阅文档的 num_format 部分。

于 2013-10-10T08:30:49.797 回答