C#Excel:正确的方式来获取行数和列数

我有问题与C#互操作Excel获取有效范围与大文件

https://www.dropbox.com/s/betci638b1faw8g/Demo%20Training%20Data.xlsx?dl=0

这是我的文件,但真正的大小是1000,但我得到了49998

我使用标准的代码

Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(txtbTrainPath.Text); Excel.Worksheet xlWorksheet = xlWorkbook.Worksheets[1]; Excel.Range xlRange = xlWorksheet.UsedRange; xlApp.Visible = true; xlWorksheet.Columns[5].Delete(); xlWorksheet.Columns[3].Delete(); rowCount = xlRange.Rows.Count; colCount = xlRange.Columns.Count; 

只有这个文件不能正常工作,其他文件运行良好。 请帮我找出问题所在。 如何调整工作表的大小只有有效的大小。

我会使用这种方法来获取行和列计数,这将返回非空单元格的结果。

 // Find the last real row lastUsedRow = worksheet.Cells.Find("*",System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, Excel.XlSearchOrder.xlByRows,Excel.XlSearchDirection.xlPrevious, false,System.Reflection.Missing.Value,System.Reflection.Missing.Value).Row; // Find the last real column lastUsedColumn = worksheet.Cells.Find("*", System.Reflection.Missing.Value, System.Reflection.Missing.Value,System.Reflection.Missing.Value, Excel.XlSearchOrder.xlByColumns,Excel.XlSearchDirection.xlPrevious, false,System.Reflection.Missing.Value,System.Reflection.Missing.Value).Column; 

以下是供您参考的完整代码:

 using Excel = Microsoft.Office.Interop.Excel; Excel.Application xlApp = null; Excel.Workbook wb = null; Excel.Worksheet worksheet = null; int lastUsedRow = 0; int lastUsedColumn = 0; string srcFile = @"Path to your XLSX file"; xlApp = new Excel.ApplicationClass(); xlApp.Visible = false; wb = xlApp.Workbooks.Open(srcFile, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false); worksheet = (Excel.Worksheet)wb.Worksheets[1]; Excel.Range range // Find the last real row lastUsedRow = worksheet.Cells.Find("*",System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, Excel.XlSearchOrder.xlByRows,Excel.XlSearchDirection.xlPrevious, false,System.Reflection.Missing.Value,System.Reflection.Missing.Value).Row; // Find the last real column lastUsedColumn = worksheet.Cells.Find("*", System.Reflection.Missing.Value, System.Reflection.Missing.Value,System.Reflection.Missing.Value, Excel.XlSearchOrder.xlByColumns,Excel.XlSearchDirection.xlPrevious, false,System.Reflection.Missing.Value,System.Reflection.Missing.Value).Column; xlApp.Workbooks.Close(); xlApp.Quit(); Marshal.ReleaseComObject(worksheet); Marshal.ReleaseComObject(wb); Marshal.ReleaseComObject(xlApp); 

下载好excel文件并查看之后,我发现正如我所料,在第49998行C列格式化。字体不同,数字格式不同,字体颜色为红色。 我简单地删除了第49998行上的所有单元格,而这只是将已使用的范围行的数目减less到了49997.您可以通过删除最后一行来播放此格式化的单元格,然后再次检查。 我有一种感觉,行49998之上的所有单元格都有一些不同的格式。

要修复这一张表来获得正确使用的范围。 你有两个select。 1)select从1001行开始的WHOLE行,然后向下滚动到49998行。按下SHIFT键,单击WHOLE行49998.select1001到49998行,右键单击select并select“Delete” ,如果问的话,把细胞转移。 或者2)仅用数据复制单元格,然后将这些单元格粘贴到新的工作表中,删除旧的工作表并将新工作表重命名为以前的工作表名称。 我希望这是有道理的。