编程语言
首页 > 编程语言> > C#/ Excel:将Excel范围转换为具有正确数据类型的数组

C#/ Excel:将Excel范围转换为具有正确数据类型的数组

作者:互联网

我用Excel Application(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 Cell获得单值,我得到正确的值(使用Cells.Text.ToString()):

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

任务:我需要从Excel Sheet中获取值,就像文本一样,而不是另一种类型.并且不希望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,excel-interop
来源: https://codeday.me/bug/20190626/1289853.html