如何将Excel值转换为C#中的date时间格式

我正在尝试使用Excel Interop从Excel工作表中提取数据。 这里使用的范围中的单元格包含date/时间值。 我设法得到的值作为文本,但我怎样才能将其转换为可用于比较操作的数字或date/时间格式?

using System; using Excel = Microsoft.Office.Interop.Excel; class Program { static void Main(string[] args) { Excel.Application xlApp; Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; Excel.Range range; string str; int rCnt = 0; int cCnt = 0; xlApp = new Excel.Application(); xlWorkBook = xlApp.Workbooks.Open("Wind_Speed.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); range = xlWorkSheet.UsedRange; for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++) { for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++) { // here I can get a string value... how to make it date/time str = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Text Console.WriteLine(str); Console.ReadLine(); } } xlWorkBook.Close(true, null, null); xlApp.Quit(); releaseObject(xlWorkSheet); releaseObject(xlWorkBook); releaseObject(xlApp); Console.ReadLine(); } 

如果原始数据是Excel中的“date”值(而不是文本),则应该能够使用DateTime.FromOADate方法将转换为DateTime.FromOADate

 double dateValue = range.Cells[rCnt, cCnt].Value2; // not "Text" DateTime dateTime = DateTime.FromOADate(dateValue); 

另外请注意,使用Office interop逐个单元格提取数据通常要比将一个大数组中的所有数据拉出然后使用C#处理数组慢得多:

  range = xlWorkSheet.UsedRange; object[,] rangeDate = (object[,])range.Value; for (rCnt = 0; rCnt <= Array.GetLength(rangeDate, 0) ; rCnt++) { for (cCnt = 0; cCnt <= Array.GetLength(rangeDate, 1); cCnt++) { object value = rangeDate[rCnt, cCnt] ; ... } } 

真的不清楚你在问什么,但可能你需要获得价值,而不是文本

 //some code here { var rangeValue = (range.Cells[rCnt, cCnt] as Excel.Range).Value //do whatever you need }