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

问题描述 投票:0回答:2

我从

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++;
    }
}
c# openxml
2个回答
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
编辑,现在很简单了。


0
投票

感谢您的讨论。我还以相同的方式使用 linq 来计算 Excel 工作簿中的行数。我遇到的问题是它也计算空行。有没有办法计算不包括空格的行数?

© www.soinside.com 2019 - 2024. All rights reserved.