如何在公式栏中将excel单元格值显示为“1/1/1901”,并使用perl在相应的单元格中显示为“1901-01-01”

我们需要生成excel文件,单元格值应该在公式栏中以mm / dd / yyyy格式(1/1/1901)显示,并显示为yyyy-mm-dd格式(1901-01-01 )在相应的单元格中。 有人可以帮助如何使用Perl来实现这一点,请参考下面的屏幕截图,这将显示我们如何需要。

我们正在使用模块Excel :: Writer :: XLSX,我们已经尝试了下面的代码,但它在公式栏和单元格中都显示相同的格式。

if ($cell =~ qr[^(\d{4})/(\d{1,2})/(\d{1,2})$]) { my $format1 = $workbook->add_format(num_format => 'yyyy-mm-dd'); my $date = sprintf "%02d/%02d/%04d", $2, $3, $1; $worksheet->write_date_time( $iR, $iC, ${date}, $format1); } 

屏幕截图

从文档:

最直接的方法是将date转换为ISO8601 yyyy-mm-ddThh:mm:ss.sssdate格式,并使用write_date_time()工作表方法:

演示:

 use strict; use warnings; use Excel::Writer::XLSX; my $wb = Excel::Writer::XLSX->new( 'perl.xlsx' ); my $ws = $wb->add_worksheet(); $ws->set_column('A:B', 25); my $date_format = $wb->add_format(num_format => 'yyyy-mm-dd'); my($d,$m,$y) = (20,1,1901); #your current my $current = sprintf "%02d/%02d/%04d", $d,$m,$y; $ws->write('A1', 'using: %02d/%02d/%04d'); $ws->write_date_time( 'B1', $current, $date_format ); #you want my $wanted = sprintf "%04d-%02d-%02dT", $y,$m,$d; $ws->write('A2', 'using: %04d-%02d-%02dT'); $ws->write_date_time( 'B2', $wanted, $date_format ); 

在excel中生成

excel截图