我有一份Excel报告,我需要根据报告中的数据绘制图表。能够获得从特定列到最后填充行的范围,如下所示。我的报告中有很多列,我只需要像(“c1”,“ c12“)。列长可能会有所不同。它不一定是12。如何获得直到最后一列填充行的范围。
Excel.Range last1 = xlWorkSheet2.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing);
oRange = xlWorkSheet2.get_Range("A6", last1);
答案 0 :(得分:1)
尝试以下代码。这可以通过选择一行中的顶部单元格,然后向下搜索直到找到范围的末尾来实现。范围column
只是start
和end
之间的范围。请注意,这只会找到范围中的最后一个连续单元格,不会搜索空行。
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;
以下代码将允许您检索列的完整使用范围,即使存在空行。此代码以类似的方式工作,但从工作表中使用范围的底部向上搜索,以查找包含值的列中的最后一个单元格。
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];
答案 1 :(得分:0)
您好发现以上所有方法都不适用于我想做的事情,所以这是我的解决方案:
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);