C#/Excel : Convert Excel Range to Array with Correct Data Type

标签 c# excel excel-interop

我用 Excel 应用程序 (Microsoft.Office.Interop.Excel) 打开了 *.htm 文件。它被解析得很好!所以我可以使用它。为了提高速度,我尝试从 Excel Range 获取数据并插入 System.Array 并使用它:

Excel.Range range = ExcelWorksheet.get_Range("A1", "H1500"); // get all values
System.Array dataArray = (System.Array)(range.Cells.Value2); // insert into array

问题出在数据类型上。如果 Excel 单元格具有时间或日期格式,range.Cells.Value2 将:
12.06.2012 至 41072(Excel 单元格类型 - 日期)
14:48 到 0,616666666666667(Excel 单元格类型 - 时间)
如果我从 Excel 单元格中获取单个值,我将获取正确的值(使用 Cells.Text.ToString()):

ExcelWorksheet.get_Range("A1", "A1").Cells.Text.ToString()

任务:我需要按原样从 Excel 工作表中获取值,就像文本一样,而不是另一种类型。
并且不希望 Excel 代替我思考 :)

最佳答案

为什么不直接将返回值转换成你需要的格式呢? DateTime 的 FromOADate 方法就是为此而设计的(参见 http://msdn.microsoft.com/en-us/library/1ad4d8d6(v=vs.80).aspx )。例如,返回的时间值表示一天 24 小时的小数部分。因此,以下示例将输出“14:48”:

double oleDateTime = 0.616666666666667;
DateTime dt = DateTime.FromOADate(oleDateTime);
string time = dt.ToString("H:mm");
Console.WriteLine(time);

至于日期值,您可以使用相同的方法。唯一的区别是来自 Excel 的值( double )将大于零,因为它包含日期部分(不仅仅是时间)。以下将产生“12.06.2012”:

dt = DateTime.FromOADate(41072);
string date = dt.ToString("dd.MM.yyyy");
Console.WriteLine(date);

为了进一步说明,如果您正在处理日期和时间(返回的 Excel 值大于零),以下将产生“6/12/2012 2:48:00 PM”:

dt = DateTime.FromOADate(41072.616666666666667);
Console.WriteLine(dt.ToString());

关于C#/Excel : Convert Excel Range to Array with Correct Data Type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11179325/

相关文章:

vba - Excel VBA : Restart Loop Counter

c# - 如何将值设置为二维 Excel 范围?

c# - 我应该在 LINQ 中使用两次 OrderByDescending 吗?

c# - 在 == 运算符覆盖中使用 GetHashCode

c# - 如何让一个类的多个实例(在不同的线程中)监听同一个事件?

python - 在 Excel 中删除 Pandas 条件格式

c# - Console.WriteLine() 的高内存使用率

Excel:将单元格的颜色设置为另一个

C# Excel 互操作合并不起作用

c# - 使用 C# 将 HTML 表格转换为 Excel 工作表