使用C#Microsoft Interop Excel Excel 144行后返回空

在C#中,我已经打开了一个Excel电子表格,并且正在遍历它。 每当我到达第144行时,电子表格的值对于它后面的每一行都返回null。 看看电子表格,144 – 250行显然不为空。我尝试将它保存在不同的版本中,但是没有奏效。 我试图复制并粘贴到一个全新的工作表。 没有任何工作。 这是我的代码:

// initiate Excel Excel.Application xlApp; Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlApp = new Excel.Application(); xlWorkBook = xlApp.Workbooks.Open(lblFileName.Text, 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); //Get the used Range Excel.Range usedRange = xlWorkSheet.UsedRange; //Iterate the rows in the used range string customerNumber; string amount; int i = 0; decimal dAmount = 0; bool runProcess = true; bool hasHeader = false; string cellValue; foreach (Excel.Range row in usedRange.Rows) { i++; // Column 1 is customer number // THE FOLLOWING LINE RETURNS NULL STARTING AT ROW 144 cellValue = row.Cells[i, 1].Value2 == null ? "" : row.Cells[i, 1].Value2.ToString(); if (!(cellValue.Length >= 5 && cellValue.Length <= 20)) { MessageBox.Show(cellValue + " Must be between 5 and 20 Characters - File Will Not Be Processed Row#" + i.ToString()); runProcess = false; } } // run process // release EXCEL 

我确实尝试了row.Cells [i,1] .Value2,row.Cells [i,1] .Value和row.Cells [i,1] .Text,并得到了相同的结果。 我包括“使用Excel = Microsoft.Office.Interop.Excel;”

来自Excel的示例数据

  4492605768531895 15.95 4492605768536544 19.95 4492605768565459 11.95 4492605739542347 14.95 4492605768635795 25.95 

我认为这与Range对象大小有关。 我试图取代foreach这个,它的工作(对我来说,null是发生在102行)

 int maxRows = usedRange.Rows.Count; for (int i=1;i<=maxRows;i++) { // Column 1 is customer number // THE FOLLOWING LINE RETURNS NULL STARTING AT ROW 144 cellValue = xlWorkSheet.Cells[i, 1].Value2 == null ? "" : xlWorkSheet.Cells[i, 1].Value2.ToString(); if (!(cellValue.Length >= 5 && cellValue.Length <= 20)) { MessageBox.Show(cellValue + " Must be between 5 and 20 Characters - File Will Not Be Processed Row#" + i.ToString()); runProcess = false; } }