以编程方式在 Excel 范围内存储和检索日期值

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

适用于: 本主题中的信息适用于 Excel 的文档级项目和 VSTO 外接程序项目。 有关详细信息,请参阅办公室应用程序和项目类型提供的功能。

如果使用 Visual Studio 中的办公室开发工具将日期值存储在 1/1/1/1900 之后,则它以 OLE 自动化(OA)格式存储。 必须使用 FromOADate 该方法检索 OLE 自动化 (OA) 日期的值。 如果日期早于 1900/1/1,则它存储为字符串。

注意

Excel 日期与 1900 年头两个月的 OLE 自动化日期不同。 如果检查 1904 日期系统选项,也存在差异。 下面的代码示例无法解决这些差异。

使用 NamedRange 控件

  • 此示例适用于文档级自定义。 以下代码必须放在工作表类中,而不是放在类中 ThisWorkbook

将日期值存储在命名区域中

  1. NamedRange 单元格 A1 上创建控件。

    Microsoft.Office.Tools.Excel.NamedRange NamedRange1 =
        this.Controls.AddNamedRange(this.get_Range("A1"), "NamedRange1");
    
  2. 将今天的日期设置为值 NamedRange1

    DateTime dt = DateTime.Now;
    NamedRange1.Value2 = dt;
    

从命名区域检索日期值

  1. NamedRange1中检索日期值。

    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. 创建一个Range表示单元格 A1 的单元格

    Excel.Range rng = this.Application.get_Range("A1");
    
  2. 将今天的日期设置为值 rng

    DateTime dt = DateTime.Now;
    rng.Value2 = dt;
    

从本机 Excel 范围对象检索日期值

  1. rng中检索日期值。

    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());