HOW TO:在 Excel 範圍中儲存和擷取日期值
更新:2007 年 11 月
適用於 |
---|
本主題中的資訊僅適用於指定的 Visual Studio Tools for Office 專案和 Microsoft Office 版本。 專案類型
Microsoft Office 版本
如需詳細資訊,請參閱依應用程式和專案類型提供的功能。 |
您可以在 NamedRange 控制項或原生 Excel 範圍物件中儲存和擷取一些值。
如果您使用 Visual Studio Tools for Office 在範圍中儲存 1900 年 1 月 1 日 (含) 之後的日期值,則它會儲存為 OLE Automation (OA) 格式。您必須使用 FromOADate 方法擷取 OLE Automation (OA) 日期的值。如果設定的日期早於 1/1/1900,則該日期會儲存為字串。
注意事項: |
---|
Excel 日期與 OLE Automation 日期不同之處在於 1900 年的頭兩個月。如果核取 [1904 日期系統] 選項,則還存在其他差異。下面的程式碼範例不說明這些差異。 |
使用 NamedRange 控制項
- 這是示範文件層級自訂的範例。下列程式碼必須放在工作表類別中,而不是 ThisWorkbook 類別中。
若要在已命名的範圍中儲存日期值
在儲存格 [A1] 建立 NamedRange 控制項。
Dim NamedRange1 As Microsoft.Office.Tools.Excel.NamedRange = _ Me.Controls.AddNamedRange(Me.Range("A1"), "NamedRange1")
Microsoft.Office.Tools.Excel.NamedRange NamedRange1 = this.Controls.AddNamedRange(this.get_Range("A1", missing), "NamedRange1");
將今天日期設為 NamedRange1 的值。
Dim dt As DateTime = DateTime.Now NamedRange1.Value2 = dt
DateTime dt = DateTime.Now; NamedRange1.Value2 = dt;
若要擷取已命名範圍中的日期值
擷取 NamedRange1 的日期值。
Dim value As Object = NamedRange1.Value2 If Not value Is Nothing Then If TypeOf value Is Double Then dt = DateTime.FromOADate(CType(value, Double)) Else DateTime.TryParse(CType(value, String), dt) End If End If MessageBox.Show(dt.ToString())
object value = NamedRange1.Value2; if (value != null) { if (value is double) { dt = DateTime.FromOADate((double)value); } else { DateTime.TryParse((string)value, out dt); } } MessageBox.Show(dt.ToString());
使用原生 Excel 範圍
若要在原生 Excel 範圍物件中儲存日期值
建立表示 [A1] 儲存格的 Range。
Dim rng As Excel.Range = Me.Application.Range("A1")
Excel.Range rng = this.Application.get_Range("A1", missing);
將今天日期設為 rng 的值。
Dim dt As DateTime = DateTime.Now rng.Value2 = dt
DateTime dt = DateTime.Now; rng.Value2 = dt;
若要從原生 Excel 範圍物件擷取日期值
擷取 rng 的日期值。
Dim value As Object = rng.Value2 If Not value Is Nothing Then If TypeOf value Is Double Then dt = DateTime.FromOADate(CType(value, Double)) Else DateTime.TryParse(CType(value, String), dt) End If End If System.Windows.Forms.MessageBox.Show(dt.ToString())
object value = rng.Value2; if (value != null) { if (value is double) { dt = DateTime.FromOADate((double)value); } else { DateTime.TryParse((string)value, out dt); } } System.Windows.Forms.MessageBox.Show(dt.ToString());