C# 如何在OpenXML中计算每个工作表的行数
我从C# 如何在OpenXML中计算每个工作表的行数,c#,openxml,C#,Openxml,我从Interop库切换到OpenXML,因为我需要读取大型Excel文件。在此之前,我可以使用: worksheet.UsedRange.Rows.Count 获取工作表中包含数据的行数。我用这些信息制作了一个进度条。在OpenXML中,我不知道如何获得关于工作表的相同信息。我现在拥有的是以下代码: using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(path, false)) { Wo
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++;
}
}
使用(SpreadsheetDocument SpreadsheetDocument=SpreadsheetDocument.Open(路径,false))
{
WorkbookPart WorkbookPart=电子表格文档.WorkbookPart;
WorksheetPart WorksheetPart=workbookPart.WorksheetParts.First();
SheetData SheetData=worksheetPart.Worksheet.Elements().First();
int行计数=0,列计数;
//在这里,我想获得有关行数的信息
foreach(sheetData.Elements()中的r行)
{
col_计数=0;
如果(行数>10)
{
foreach(r.Elements()中的单元格c)
{
//做点什么
//更新进度条
}
}
行计数++;
}
}
这并不难(当您使用LINQ
时)
使用(SpreadsheetDocument myDoc=SpreadsheetDocument.Open(“PATH”,true))
{
//获取工作簿部件
WorkbookPart WorkbookPart=myDoc.WorkbookPart;
//然后访问工作表部分
IEnumerable worksheetPart=工作簿零件.WorksheetParts;
foreach(工作表部件中的工作表部件WSP)
{
//查找图纸数据
IEnumerable sheetData=WSP.sheet.Elements();
//遍历Excel工作表中的每个工作表
foreach(SheetData中的SheetData SD)
{
IEnumerable row=SD.Elements();//获取行IEnumerator
Console.WriteLine(row.Count());//将提供行数
}
}
使用Linq
编辑,现在它是直接的了。所以,我必须事先做这个循环?只是为了计算行数?我问这个问题,因为我在处理数据的主循环中更新了progressbar,但在此之前,我必须设置它的最大属性(即工作表上的行数)抱歉,发得太急了…请尝试最新更新:)使用LINQ作为您的答案..不,您将不需要:)我的答案提供工作表中所有工作表的可用行数..只需使用提供的代码:)好的。我现在明白了。我将在一分钟内检查我的代码中的这一方法。您的代码和我的代码的唯一区别是我迭代了所有t他说:)它会很好用的
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
}
}