如何:在 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 类中。
在命名范围内存储日期值
在单元格**“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");
将今天的日期设置为 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 范围对象中存储日期值
创建一个表示单元格**“A1”**的 Range。
Dim rng As Excel.Range = Me.Application.Range("A1")
Excel.Range rng = this.Application.get_Range("A1", missing);
将今天的日期设置为 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());