在Windows c#中查找列中最后一次使用的行

我有一个Excel报告,我需要根据报告中的数据绘制图表。 我能够从一个特定的列到最后一个填充行的范围如下所示。 我在报告中有很多列,我只需要像“(c1”,“c12”)这样的特定列中的数据。 列长度​​可能会有所不同。 它不需要是12.我怎样才能得到的范围,直到最后一列填充行。

Excel.Range last1 = xlWorkSheet2.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing); oRange = xlWorkSheet2.get_Range("A6", last1); 

尝试下面的代码。 这是通过select行中的顶部单元格,然后向下search,直到find范围的结尾。 范围column只是startend之间的范围。 请注意,这只会查找范围内的最后一个连续的单元格,并且不会search空行。

 Excel.Range start = xlWorkSheet2.Range["A1"]; Excel.Range column; if (start.Offset[1].Value != null) column = xlWorkSheet2.Range[start, start.End[Excel.XlDirection.xlDown]]; else column = start; 

下面的代码将允许您检索列的完整使用范围,即使有空行。 此代码以类似的方式工作,但从工作表中使用范围的底部向上search,以查找包含值的列中的最后一个单元格。

 Excel.Range start = xlWorkSheet2.Range["A1"]; Excel.Range bottom = xlWorkSheet2.Range["A" + (ws.UsedRange.Rows.Count + 1)]; Excel.Range end = bottom.End[Excel.XlDirection.xlUp]; Excel.Range column = xlWorkSheet2.Range[start, end]; 

您好,发现以上所有的方法都不适合我想要做的,所以这里是我的解决scheme:

 public object GetLastNotEmptyRowOfColumn(string sheet, string column,int startRow,int endRow) { try { var validColumn = Regex.IsMatch(column, @"^[a-zA-Z]+$"); if(!validColumn) { throw new Exception($"column can only a letter. value entered : {column}"); } xlBook = xlApp.ActiveWorkbook; xlSheet = xlBook.Sheets[sheet]; xlRange = xlSheet.Range[$"{column}{startRow}", $"{column}{endRow}"]; object[,] returnVal = xlRange.Value; var rows = returnVal.GetLength(0); // var cols = returnVal.GetLength(1); int count = 1; for (int r = 1; r <= rows; r++) { var row = returnVal[r, 1]; if (row == null) break; count++; } //returns an object : {Count:10,Cell:A9} return= new { Count=count-1, Cell=$"{column}{startRow+count-1}" }; } catch (Exception ex) { ...... } return null; } 

用法:var response = GetLastNotEmptyRowOfColumn(“Sheet1”,“A”,1,100);

结果: 在这里输入图像描述