共用方式為


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 類別中。

若要在已命名的範圍中儲存日期值

  1. 在儲存格 [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");
    
  2. 將今天日期設為 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 範圍物件中儲存日期值

  1. 建立表示 [A1] 儲存格的 Range

    Dim rng As Excel.Range = Me.Application.Range("A1")
    
    Excel.Range rng = this.Application.get_Range("A1", missing);
    
  2. 將今天日期設為 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());
    

請參閱

工作

HOW TO:在程式碼中參考工作表範圍

HOW TO:將 NamedRange 控制項加入至工作表

概念

使用範圍

NamedRange 控制項

Office 方案中的選擇性參數

其他資源

Excel 物件模型概觀