【问题标题】:how to get EPPlus OpenXML row count (c#)如何获取 EPPlus OpenXML 行数(c#)
【发布时间】:2011-12-06 13:01:38
【问题描述】:

我搜索了一下,找到了链接C# EPPlus OpenXML count rows

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

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

【问题讨论】:

    标签: c# asp.net excel io epplus


    【解决方案1】:

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

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

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

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

    请参阅 Peter Reisz 的答案,了解该样式的示例以找到工作表的结尾。

    【讨论】:

    • 根据我刚才的经验,Dimension.End.Row 包含没有值的单元格。例如,如果用户创建了一个包含 10,000 行的具有值的工作簿,然后删除后半行中的值而不删除整行,则 Dimension.End.Row 仍将返回 10,000。
    • 是的,但这在功能上等同于“UsedRange”的 Excel VBA 样式 COM+ 库,这是原始问题所引用的。有关您所谈论内容的计算版本,请参阅其他流行答案。
    • 此外,由于“空”的定义对每种情况都非常具体,因此很难拥有这样的功能。唯一似乎最有意义的是所有值都是空白的。但是 Blank 和 Nothing 本身确实不同。 (例如,单元格中可能存在注释,并且在特定情况下可以认为一行不被视为空白)
    • 太棒了!我的问题是关于 NULL Dimension。非常感谢。
    【解决方案2】:

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

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

    【讨论】:

    • 您可能希望在上面的示例中使用 string.IsNullOrWhiteSpace 而不是 string.IsNullOrEmpty 以避免包含多个空格或制表符的单元格的行被视为非空。
    【解决方案3】:

    另一种方法。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-30
        • 2013-05-08
        • 2013-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-30
        • 1970-01-01
        相关资源
        最近更新 更多