HOW TO:在 Excel 範圍中儲存和擷取日期值
您可以在 NamedRange 控制項或原生 Excel 範圍物件中儲存和擷取一些值。
**適用於:**本主題中的資訊適用於 Excel 2007 和 Excel 2010 的文件層級專案和應用程式層級專案。如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能。
如果您使用 Visual Studio 中的 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());