共用方式為


HOW TO:在 Excel 範圍中儲存和擷取日期值

更新:2007 年 11 月

適用於

本主題中的資訊僅適用於指定的 Visual Studio Tools for Office 專案和 Microsoft Office 版本。

專案類型

  • 文件層級專案

  • 應用程式層級專案

Microsoft Office 版本

  • Excel 2003

  • Excel 2007

如需詳細資訊,請參閱依應用程式和專案類型提供的功能

您可以在 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 類別中。

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

  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:在程式碼中參考工作表範圍

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

概念

使用範圍

Excel 物件模型概觀

NamedRange 控制項

了解 Office 方案中的選擇性參數