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

更新:2007 年 11 月

适用于

本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。

项目类型

  • 文档级项目

  • 应用程序级项目

Microsoft Office 版本

  • Excel 2003

  • Excel 2007

有关更多信息,请参见按应用程序和项目类型提供的功能

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

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

1ad4d8d6.alert_note(zh-cn,VS.90).gif说明:

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 控件

概念

使用范围

Excel 对象模型概述

NamedRange 控件

了解 Office 解决方案中的可选参数