2

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

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

2 回答 2

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];
于 2013-11-07T12:22:16.130 回答
1

嗨发现以上所有方法都不适用于我想做的事情,所以这是我的解决方案:

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

结果: 在此处输入图像描述

于 2016-06-03T07:41:26.463 回答