2012-12-03 37 views
2

我可以使用Excel :: Writer :: XLSX軟件包從DBI查詢的結果中成功創建xlsx。Excel :: Writer :: XLSX單元格(帶日期和時間)需要刷新

唯一的問題是日期和時間單元在Excel 2010中打開時需要刷新,即F2 <enter>才能正確顯示。

實例顯示:2012-12-02 17:48:33.000打開電子表格

刷新一次:02/12/2012 17:49格式後F2 <enter>

期望我會爲任何提示感謝/什麼可能導致這一點,如果這個問題可以內部解決指導我的Perl腳本?

非常感謝......

PS自動計算啓用,StrawberryPerl 5.16在Win 7

UPDATE:爲了完整起見,並因爲它可能是幫助他人的事:我所用以下構造可以從查詢中寫入記錄,這些記錄可以是純字符串或日期時間。

如果一個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); 
} 
+1

你使用'$ worksheet-> write_date_time()'和一個適當的格式嗎? –

+0

是的。正如下面john的帖子所評論的那樣,我的腳本未能捕獲日期和時間「標記」,因此只是將其打印爲字符串。奇怪,因爲它看起來很直截了當...還得再努力一下......謝謝 – jjap

回答

3

如果您使用工作表write_date_time()方法編寫日期,則不必在Excel中刷新它們,因爲它們只是格式化的數字,並且不需要重新計算。

但是,如果您將日期寫爲字符串,那麼您需要在Excel中執行某些操作才能將它們轉換爲日期。你不應該需要做的,雖然因爲Excel中::作家:: 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__ 

enter image description here

請參閱Excel的Dates and Times部分::作家:: XLSX有關如何處理日期的詳細說明的文檔。

+0

您的課程作品的基本示例。當我的DBI查詢收到日期和時間時,我的錯誤無法測試和捕獲,else子句只是打印爲常規字符串。謝謝你指出我正確的方向,約翰和這個偉大的模塊(及其前身......) – jjap

0

如何在Workbook_Open()事件中添加一行VBA代碼?

Private Sub Workbook_Open() 

    Application.Calculate 

End Sub 

會滿足您的需求嗎?

+0

雖然說了幾秒鐘,但我覺得我可能會犯一些基本的錯誤。但是,謝謝你的建議。 – jjap

相關問題