C# EPPlus OpenXML 计算行数

48

使用EPPlus和OpenXML,是否有人知道如何计算行数的语法?

假设我的工作表名为“worksheet”

int numberRows = worksheet.rows.count()?还是 worksheet.rows.dimension

我当然对答案很感兴趣,但是如何找到答案也很酷,例如“转到定义”并查找这个或那个等。


好帖子..+1..你有关于EPPlus的好文档吗? - Entree
我不知道,但是下载包中的示例对我很有帮助。 - rd42
1
现在有更有效的方法可以使用维度中的“行”和“列”属性来完成此操作。 - Roland Schaer
4个回答

92

使用名为worksheet的工作表对象,worksheet.Dimension.Start.Rowworksheet.Dimension.End.Row应该给出您所需的信息。

worksheet.Dimension.Address将给出一个字符串,其中包含传统Excel范围格式的工作表维度(例如'A1:I5'表示第1-5行,第1-9列)。

有一个可用的文档文件。在许多情况下,通过尝试使用库并找到答案可能同样快速。EPPlus似乎设计得很好 - 至少所有东西都被命名得很合理。


5
正确答案及链接加一分,但我不同意你关于“EPPlus似乎设计得很好”的评论。我自己尝试使用它,API很简单,但是我试过的许多来自各个人生成的样本xlsx文件在库内部生成一个NullReferenceException。我逐步检查了库以确定问题所在,发现有很多假设会导致读取由Excel生成的有效*.xlsx文件无法加载。如果您正在读取用户提供的文件,我认为EPPlus是您代码中的定时炸弹。 - Samuel Neff
2
说得好 - 我必须承认我从未使用过读取现有电子表格的库,只是用于编写新的电子表格。对于后者,EPPlus 已经为我服务了很好。该项目似乎正在积极开发中,希望在未来的版本中能够解决更多的错误。 - Quppa
1
我从未在使用EPPlus读取现有的XLS/XLSX文件时遇到过问题。也许你使用了测试版。 - Johnny DropTables
使用 WorkSheet.Dimensions.Rows 怎么样? - MGE

16

感谢Quppa的提示。我将其用于从工作簿电子表格中填充DataTable的尝试,代码如下:

    /// <summary>
    /// Converts a Worksheet to a DataTable
    /// </summary>
    /// <param name="worksheet"></param>
    /// <returns></returns>
    private static DataTable WorksheetToDataTable(ExcelWorksheet worksheet)
    {
        // Vars
        var dt = new DataTable();
        var rowCnt = worksheet.Dimension.End.Row;
        var colCnt = worksheet.Dimension.End.Column + 1;

        // Loop through Columns
        for (var c = 1; c < colCnt; c++ )
        {
            // Add Column
            dt.Columns.Add(new DataColumn());

            // Loop through Rows
            for(var r = 1; r < rowCnt; r++ )
            {
                // Add Row
                if (dt.Rows.Count < (rowCnt-1)) dt.Rows.Add(dt.NewRow());

                // Populate Row
                dt.Rows[r - 1][c - 1] = worksheet.Cells[r, c];
            }
        }

        // Return
        return dt;
    }

1
使用 WorkSheet.Dimensions.Rows 怎么样? - MGE

6

我正在使用版本4.1,看起来他们添加了一些属性(在先前答案的评论中提到)以使此过程更加简单。

string Filepath = "c:\excelfile.xlsx";
FileInfo importFileInfo = new FileInfo(FilePath);
using(var excelPackage = new ExcelPackage(importFileInfo))
{
    ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1];
    int rowCount = worksheet.Dimension.Rows;
    int colCount = worksheet.Dimension.Columns;
}

3

使用以下方法非常简单:

private int GetDimensionRows(ExcelWorksheet sheet)
{
    var startRow = sheet.Dimension.Start.Row;
    var endRow = sheet.Dimension.End.Row;
    return endRow - startRow;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接