OpenXML 如何检查 sheet 中的一行是否为空
OpenXML how to check if a row is empty in a sheet
我想检查 header 行旁边的一行是否为跨页sheet 中的空行。如果它是空的,我想删除 sheet。到目前为止,我只能让它查看单元格 A2 并检查它是否为空,但是有没有办法检查整行?
谢谢
private void CheckForEmptyRow(WorkbookPart wbp, string sheetId)
{
Sheet sheet = wbp.Workbook.Descendants<Sheet>().FirstOrDefault(s => s.Id == sheetId);
WorksheetPart wsp = (WorksheetPart).(wbp.GetPartById(sheetId));
Cell cell = wsp.Worksheet.Descendants<Cell>().Where(c => c.CellReference == "A2").FirstOrDefault();
If (cell == null)
{
sheet.Remove();
wbp.DeletePart(wsp);
}
}
您可以遍历每一行并检查该行是否为空,如下所示:
private void CheckForEmptyRow(WorkbookPart wbp, string sheetId)
{
Sheet sheet = wbp.Workbook.Descendants<Sheet>().FirstOrDefault(s => s.Id == sheetId);
WorksheetPart wsp = (WorksheetPart).(wbp.GetPartById(sheetId));
IEnumerable<SheetData> sheetData = wsp.Worksheet.Elements<SheetData>();
bool isRowEmpty = false;
foreach (SheetData SD in sheetData)
{
IEnumerable<Row> row = SD.Elements<Row>(); // Get the row IEnumerator
if (row == null)
{
isRowEmpty = true;
break;
}
}
if (isRowEmpty)
{
sheet.Remove();
wbp.DeletePart(wsp);
}
}
John,尝试 row==null 似乎对我不起作用。无论出于何种原因,我们试图解析的电子表格似乎有数百个空行,但不是空行。看起来有些数据作为某个点被放入那里并被清除。我最终使用下面的代码 return 我的有效行。理论上你可以在任何检查上做 !row.Elements().Any(ce => ce.DataType != null)
List<Row> rows = sheetData.Elements<Row>()
.Where(r => r.Elements<Cell>().Any(ce => ce.DataType != null)
)
.ToList()
;
我想检查 header 行旁边的一行是否为跨页sheet 中的空行。如果它是空的,我想删除 sheet。到目前为止,我只能让它查看单元格 A2 并检查它是否为空,但是有没有办法检查整行?
谢谢
private void CheckForEmptyRow(WorkbookPart wbp, string sheetId)
{
Sheet sheet = wbp.Workbook.Descendants<Sheet>().FirstOrDefault(s => s.Id == sheetId);
WorksheetPart wsp = (WorksheetPart).(wbp.GetPartById(sheetId));
Cell cell = wsp.Worksheet.Descendants<Cell>().Where(c => c.CellReference == "A2").FirstOrDefault();
If (cell == null)
{
sheet.Remove();
wbp.DeletePart(wsp);
}
}
您可以遍历每一行并检查该行是否为空,如下所示:
private void CheckForEmptyRow(WorkbookPart wbp, string sheetId)
{
Sheet sheet = wbp.Workbook.Descendants<Sheet>().FirstOrDefault(s => s.Id == sheetId);
WorksheetPart wsp = (WorksheetPart).(wbp.GetPartById(sheetId));
IEnumerable<SheetData> sheetData = wsp.Worksheet.Elements<SheetData>();
bool isRowEmpty = false;
foreach (SheetData SD in sheetData)
{
IEnumerable<Row> row = SD.Elements<Row>(); // Get the row IEnumerator
if (row == null)
{
isRowEmpty = true;
break;
}
}
if (isRowEmpty)
{
sheet.Remove();
wbp.DeletePart(wsp);
}
}
John,尝试 row==null 似乎对我不起作用。无论出于何种原因,我们试图解析的电子表格似乎有数百个空行,但不是空行。看起来有些数据作为某个点被放入那里并被清除。我最终使用下面的代码 return 我的有效行。理论上你可以在任何检查上做 !row.Elements().Any(ce => ce.DataType != null)
List<Row> rows = sheetData.Elements<Row>()
.Where(r => r.Elements<Cell>().Any(ce => ce.DataType != null)
)
.ToList()
;