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

我用Excel应用程序( Microsoft.Office.Interop.Excel )打开* .htm文件。 这是parsing优秀! 所以我可以使用它。 为了更快的速度,我试图从Excel范围获取数据并插入到System.Array中并使用它:

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

问题是数据types。 如果Excel单元格有时间或date格式, range.Cells.Value2使:
12.06.2012至41072(Excel单元格types – date)
14:48到0,616666666666667(Excel单元格types – 时间)
如果我得到Excel单元格的单值,我得到正确的值(与Cells.Text.ToString() ):

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

任务:我需要从Excel表格中获取值,就像文本一样,而不是另一种types。
而不想Excel认为,而不是我:)

你为什么不把返回的值转换成你需要的格式呢? DateTime的FromOADate方法是为此devise的(请参阅http://msdn.microsoft.com/zh-cn/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); 

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

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

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

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

当您想要精确读取Excel文件中可见/显示的内容时,请使用此方法。

 Excel.Range range = workSheet.get_Range("A1", "D4"); int totalRows = range.Rows.Count; int totalColumns = range.Columns.Count; for (int rowCounter = 1; rowCounter <= totalRows; rowCounter++) { for (int colCounter = 1; colCounter <= totalColumns; colCounter++) { var cellVal = workSheet.Cells[rowCounter, colCounter]; var val = cellVal.Text; } }