如何在OpenXML中统计每个工作表的行数

13

我从Interop库切换到OpenXML,因为我需要读取大型Excel文件。在此之前,我可以使用:

worksheet.UsedRange.Rows.Count

为了获取工作表上带有数据的行数,我使用了这些信息来制作进度条。在OpenXML中,我不知道如何获得有关工作表的同样信息。现在我拥有的是这段代码:

 using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(path, false))
{
    WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
    WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
    SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
    int row_count = 0, col_count;
    // here I would like to get the info about the number of rows
    foreach (Row r in sheetData.Elements<Row>())
    {
        col_count = 0;
        if (row_count > 10)
        {
            foreach (Cell c in r.Elements<Cell>())
            {
                // do some stuff  
                // update progressbar  
            }
        }
        row_count++;
    }
}
1个回答

17

使用 LINQ,事情并不那么难。

using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open("PATH", true))
{
    //Get workbookpart
    WorkbookPart workbookPart = myDoc.WorkbookPart;

    //then access to the worksheet part
    IEnumerable<WorksheetPart> worksheetPart = workbookPart.WorksheetParts;

    foreach (WorksheetPart WSP in worksheetPart)
    {
        //find sheet data
        IEnumerable<SheetData> sheetData = WSP.Worksheet.Elements<SheetData>();
        // Iterate through every sheet inside Excel sheet
        foreach (SheetData SD in sheetData)
        {
            IEnumerable<Row> row = SD.Elements<Row>(); // Get the row IEnumerator
            Console.WriteLine(row.Count()); // Will give you the count of rows
        }
    }
}

现在使用 Linq 编辑后,它变得简单明了。


所以,我必须事先进行这个循环吗?只是为了计算行数?我问这个问题,因为在处理数据的主循环中,我更新进度条,但在此之前,我必须设置其最大属性(即工作表上的行数)。 - Jacobian
抱歉匆忙发布...请尝试最新更新 :) 使用LINQ - Kavindu Dodanduwa
对于你的回答,不需要 :) 我的回答提供了工作表中所有工作表可用行数的数量.. 只需使用提供的代码即可 :) - Kavindu Dodanduwa
好的,我现在明白了。我会在一分钟内检查一下这种方法在我的代码中的使用情况。 - Jacobian
你的代码和我的唯一区别就是我遍历了所有的工作表 :) 这样也可以正常工作。 - Kavindu Dodanduwa
如果我只想获取单个工作表中的行数,而不是全部呢? - Abhishek Puri

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