在windows c#中找到列中最后一行

时间:2013-11-07 10:13:54

标签: c# excel range

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

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

2 个答案:

答案 0 :(得分:1)

尝试以下代码。这可以通过选择一行中的顶部单元格,然后向下搜索直到找到范围的末尾来实现。范围column只是startend之间的范围。请注意,这只会找到范围中的最后一个连续单元格,不会搜索空行。

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);

结果:  enter image description here