2

Excel::Writer::XLSX パッケージを使用して、DBI クエリの結果から xlsx を正常に作成できます。

F2 <enter>唯一の問題は、日付と時刻のセルを Excel 2010 で開いたときに、正しく表示するために更新する必要があることです。

表示例:2012-12-02 17:48:33.000スプレッドシートを開いたとき

リフレッシュ 02/12/2012 17:49 後:希望のフォーマットF2 <enter>

これを引き起こす原因についてのヒントやガイダンスをいただければ幸いです。また、この問題を Perl スクリプト内で解決できるかどうかを教えてください。

どうもありがとう...

PS 自動計算が有効、Win 7 の StrawberryPerl 5.16

更新:完全を期すために、また他の人に役立つ可能性があるため:次の構成を使用して、プレーン文字列または日時の可能性のあるクエリからレコードを書き込んでいました。

1 つのマフが日付を取得する正規表現であるか、メソッドで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 );
}
4

2 に答える 2

3

Worksheetwrite_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 ドキュメントの日付と時刻のセクションを参照してください。

于 2012-12-03T23:58:33.443 に答える
0

Workbook_Open()イベントに VBA コードの行を追加するのはどうですか?

Private Sub Workbook_Open()

  Application.Calculate

End Sub

それはあなたのニーズを満たすでしょうか?

于 2012-12-03T20:27:08.143 に答える