如何:在 Excel 范围内存储和检索日期值
更新:2007 年 11 月
适用于 |
---|
本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。 项目类型
Microsoft Office 版本
有关更多信息,请参见按应用程序和项目类型提供的功能。 |
可以在 NamedRange 控件或本机 Excel 范围对象中存储和检索值。
如果使用 Visual Studio Tools for 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());