如何:在 Excel 范围内存储和检索日期值

可以在 NamedRange 控件或本机 Excel 范围对象中存储和检索值。

**适用于:**本主题中的信息适用于 Excel 2007 和 Excel 2010 的文档级项目和应用程序级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能

如果使用 Visual Studio 中的 Office 开发工具在某个范围内存储了 1/1/1900 及以后的日期值,此值将以 OLE 自动化 (OA) 格式存储。 必须使用 FromOADate 方法检索 OLE 自动化 (OA) 日期的值。 如果日期早于 1/1/1900,它将以字符串形式存储。

提示

Excel 日期与 OLE 自动化日期的不同之处在于 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());
    

请参见

任务

如何:使用代码引用工作表范围

如何:向工作表添加 NamedRange 控件

概念

使用范围

NamedRange 控件

Office 解决方案中的可选参数

其他资源

Excel 对象模型概述