如何获得EPPlus OpenXML行计数(c#)

本文关键字:何获得 EPPlus OpenXML | 更新日期: 2023-09-27 18:17:00

我搜索了它,发现链接c# EPPlus OpenXML计数

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

但是这给出了4721作为count的值。它给出了整个行数,我怎么才能得到有值的行数。比如userange。

如何获得EPPlus OpenXML行计数(c#)

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

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

但你需要测试如果工作表。维度为空,因为对于新工作表或空工作表,维度属性将为空。

另外,由于"Empty"的定义对于每种情况都是非常具体的,因此很难有这样的泛型函数。唯一似乎最有意义的是所有值都是空白。但是Blank和Nothing本身确实是不同的。(例如,可以在单元格中出现注释,并且在特定情况下,这可以被认为足以使一行不被视为空白)

请参阅Peter Reisz的答案,以找到工作表的结尾。

工作表中的空单元格可能仍然包含格式,导致它们在工作表中被计算。

空单元格可以使用下面的步骤清除: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;
}

另一种方法

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

有一种方法可以使用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