17

我搜索了它并找到了链接C# EPPlus OpenXML count rows

int iRowCount = currentWorksheet.Dimension.End.Row - currentWorksheet.Dimension.Start.Row;

但这给出了 4721 的值作为计数。它给出了整个行数,我怎样才能获得有价值的行数。像 UsedRange 之类的东西。

4

4 回答 4

61

返回工作表UsedRange(维度)的行数和列数的实际答案是......

int iColCnt = Worksheet.Dimension.End.Column
int iRowCnt = Worksheet.Dimension.End.Row

但是您需要测试 Worksheet.Dimension 是否为空,因为对于新工作表或空工作表,Dimension 属性将为空。

此外,由于“空”的定义对每种情况都非常具体,因此很难拥有这样的通用功能。唯一似乎最有意义的是所有值都是空白的。但是 Blank 和 Nothing 本身确实不同。(例如,单元格中可能存在注释,并且在特定情况下可以认为一行不被视为空白)

有关该样式的示例,请参见 Peter Reisz 的回答,以找到工作表的结尾。

于 2012-08-10T12:45:51.567 回答
34

工作表中的空单元格可能仍包含导致它们被计入工作表维度的格式:

可以使用以下步骤清除空单元格:http: //office.microsoft.com/en-au/excel-help/locate-and-reset-the-last-cell-on-a-worksheet-HA010218871.aspx

我编写了这个函数来获取包含文本的最后一行:

int GetLastUsedRow(ExcelWorksheet sheet) {
  if (sheet.Dimension == null) {  return 0; } // In case of a blank sheet
    var row = sheet.Dimension.End.Row;
    while(row >= 1) {
        var range = sheet.Cells[row, 1, row, sheet.Dimension.End.Column];
        if(range.Any(c => !string.IsNullOrEmpty(c.Text))) {
            break;
        }
        row--;
    }
    return row;
}
于 2013-05-31T17:55:01.057 回答
3

另一种方法。

var lastRow = sheet.Cells.Where(cell => !string.IsNullOrEmpty(cell.Value?.ToString() ?? string.Empty)).LastOrDefault().End.Row;

于 2019-11-15T07:16:36.793 回答
1

有一种方法可以使用 Where 方法获取没有价值的单元格。我们可以使用它从工作表或范围中找到最后一个单元格(在这种情况下是它的行)。

int lastRow = sheet.Cells.Where(cell => !cell.Value.ToString().Equals("")).Last().End.Row;

关于 Where 方法:https ://msdn.microsoft.com/en-us/library/bb534803(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

于 2017-06-26T08:41:05.170 回答