C#的Excel:正确的方式来获得的行和列数
我有问题,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行的所有单元格,并且这只是将已使用的范围行的数目减少到49997.您可以通过删除最后一行来播放此猜测单元格的格式,然后再次检查。我有一种感觉,49998行以上的所有单元格都有一些不同的格式。
修复这一张表以获得正确的使用范围。你有两个选择。 1)选择从1001行开始的WHOLE行,然后向下滚动到49998行。按住SHIFT键,单击WHOLE行49998.选择行1001到49998,右键单击选择并选择“Delete” ,如果它询问,则将单元格向上移动。或2)仅用数据复制单元格并将单元格粘贴到新工作表中,删除旧工作表并将新工作表重命名为以前的工作表名称。我希望这是有道理的。
我试图删除行1001到49998,但它不能删除。我如何删除行? –
右键单击选择并选择“删除”...或从“主页选项卡”的“单元格”功能区中选择“删除” – JohnG
现在我已经试过这是程序化..我如何在互操作中选择多行。我将使用Range.ClearFormats。清除范围[1001:49998] .delete或clearFormats。我找到了...请帮助我 –
这听起来像使用范围可能返回拥有或者某些格式,或者说是不可见的数据单元。即使单元格包含NO数据,使用的范围仍会返回单元格中包含ANY格式的单元格。 – JohnG