【问题标题】:How to display the excel cell value as "1/1/1901" in formula bar and display the same as "1901-01-01" in the corresponding cell using perl如何在公式栏中将excel单元格值显示为“1/1/1901”并使用perl在相应单元格中显示为“1901-01-01”
【发布时间】:2017-04-04 17:39:42
【问题描述】:

我们需要生成 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);
        }

截图

【问题讨论】:

  • 您查看示例文件的格式了吗?看起来你做对了,但也许你可以从原始文件中学到一些东西。也可能有助于使用 Spreadsheet::XLSX 查看您认为文件中的格式是什么样的。
  • 为什么要删除截图?

标签: excel perl


【解决方案1】:

来自文档:

最直接的方法是将日期转换为 ISO8601 yyyy-mm-ddThh:mm:ss.sss 日期格式并使用 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中生成

【讨论】:

  • 非常感谢!它按照我们的要求工作。
猜你喜欢
  • 1970-01-01
  • 2020-11-17
  • 2013-07-23
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
  • 2022-01-21
相关资源
最近更新 更多