2013-05-01 18 views
2

我很努力從excel文件中導入日期值。 導入部分工作正常!唯一的問題是它的格式。如何導入實際值,而不是從excel格式化一個

在excel文件中,所有日期值均以'yyyy-mm-dd'格式輸入,但單元格本身將其顯示爲'dd-mm-yyyy'。當我的程序從excel文件導入值時,它將日期導入爲'dd-mm-yyyy',而不是用戶在'yyyy-mm-dd'中實際鍵入的格式 - 基本上是格式化的日期。

那麼,我可以操縱'dd-mm-yyyy'爲'yyyy-mm-dd',但是想避免這種解決方案,除非我真的沒有其他方法來做到這一點。

是否有任何預定義的delphi函數將'dd-mm-yyyy'轉換爲'yyyy-mm-dd'? 還是有沒有什麼特別的方法可以使實際的未格式化的原始日期,而不是格式化的日期?

不幸的是,在Excel中更改單元格的格式是不是一種選擇,在這裏..:'(

感謝

更新:::

ConnectionString :='Microsoft.ACE.OLEDB.12.0;'+ 
        'Data Source='+filename+';'+ 
        'Extended Properties="Excel 8.0;'+ 
        'Imex=2;HDR=NO;;'; 
    } 
    // IMEX = 0: Export mode, 1: Import mode, 2: Linked mode (full update capabilities) 
    ADOQuery1.SQL.Clear; 
    query := 'SELECT * FROM [sheet1$]'; 
    ADOQuery1.SQL.Add(query); 
    ADOQuery1.open; 

    i:=0; 
    while not eof do 
    begin 
    i:= i+1; 
    Cells[0,i] := IntToStr(i); 
    Cells[1,i] := Fields[1].AsString; 
    Cells[2,i] := Fields[2].AsString; 
    Cells[3,i] := Fields[3].Value; // This is the date value I'm trying to import. 
    Cells[4,i] := Fields[4].AsString; 
    Cells[5,i] := Fields[5].AsString; 
    Cells[6,i] := Fields[6].AsString; 
    Cells[7,i] := Fields[7].AsString; 
    Cells[8,i] := Fields[8].AsString; 
    Cells[9,i] := Fields[9].AsString; 
    RowCount := RowCount+1; 
    next; 
    end; 
+0

發佈您用於「從Excel導入數據」的代碼,特別是日期單元格。我沒有這個問題,並且我沒有問題讀取原始日期值。很難說你的問題可能是什麼,因爲你還沒有提供任何信息。 – 2013-05-01 23:26:21

+0

@KenWhite我已經更新了。謝謝:) – Raccoon 2013-05-02 00:17:20

+0

你介意你是否也發佈你的示例代碼?我想比較是否有任何差異。 – Raccoon 2013-05-02 00:18:02

回答

2

相反的Field.Value,它返回一個Variant。將日期表示爲string(因爲您將其分配給stringCells[]),請將其用作TDateTime並將其轉換爲您的格式想在。

Cells[3,i] := DateToStr(Fields[3].AsDateTime); 

Cells[3,i] := FormatDateTime('yyyy-mm-dd', Fields[3].AsDateTime); 

根據您的意見對我的回答,看來該領域實際上並不包含日期,但包含文本值。在這種情況下,你可以嘗試這樣的事:

try 
    Cells[3, i] := FormatDateTime('yyyy-mm-dd', VarToDateTime(Fields[3].Value)); 
except 
    raise Exception.CreateFmt('Unable to convert %s to DateTime', 
    [Fields[3].Value]); 
end; 
+0

這就是我已經嘗試過的。但是,它似乎仍然存在問題。 – Raccoon 2013-05-02 20:19:10

+0

然後你需要提供更多的信息,因爲我經常使用同樣的方法(正如我前面提到的)。 – 2013-05-02 20:56:16

+0

在Excel中的單元格是自定義格式...... :(字面上,這是我可以給的所有信息:'( – Raccoon 2013-05-02 22:59:00

1

我一直使用解決了自動化這個問題的所有數據已經​​寫入

xlApp.Columns['C:C'].Select; 
xlApp.Selection.NumberFormat:= 'yyyy-mm-dd'; 

順便說一句,我最近做了驚心發現將值寫入字符串列表會更快,將該字符串列表另存爲csv文件,然後將該csv文件導入到Excel中,而不是像在示例中那樣將值分配給Excel單元格。 Csv文件顯然不允許任何格式,但可以在數據導入到Excel後執行此操作。 (我寫驚人,因爲這可能是衆所周知的 - 但我從來沒有見過它記錄)。我寫了關於它here

+0

這個問題是關於*導入* Excel數據,而不是導出到Excel,我非常確定'Cells []'是指'TStringGrid'。儘管如此:創建一個變體數組並使用它可以將整個單元格範圍添加到Excel中更快;甚至比使用CSV文件要快得多。你應該看看(或者發表一個關於這個問題的問題)。你可能會感到驚喜。 :-) – 2013-05-02 12:35:13

+0

我也很驚訝。變體太麻煩了。我的問題是試圖創建一個電子表格的兩頁,我無法找到一種方法將第二個CSV文件導入到第二個工作表。 – lkessler 2017-01-19 06:14:25

相關問題