gpt4 book ai didi

c# - 如何在 C# 中使用 OpenXML 读取 excel 的空白单元格列值

转载 作者:行者123 更新时间:2023-12-04 20:41:39 26 4
gpt4 key购买 nike

在我的 Excel 工作表中有一些空白值列单元格,所以当我使用此代码时,会出现错误“对象引用未设置为对象的实例”。

foreach (Row row in rows)
{
DataRow dataRow = dataTable.NewRow();
for (int i = 0; i < row.Descendants<Cell>().Count(); i++)
{
dataRow[i] = GetCellValue(spreadSheetDocument, row.Descendants<Cell>().ElementAt(i));
}

dataTable.Rows.Add(dataRow);
}

private static string GetCellValue(SpreadsheetDocument document, Cell cell)
{
SharedStringTablePart stringTablePart = document.WorkbookPart.SharedStringTablePart;

string value = cell.CellValue.InnerXml;

if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString)
{
return stringTablePart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText;
}
else
{
return value;
}
}

最佳答案

“CellValue”不一定存在。在你的情况下它是“null”,所以你有你的错误。
要阅读您的空白单元格:

如果您不想根据单元格包含的内容格式化结果,请尝试

private static string GetCellValue(Cell cell)
{
return cell.InnerText;
}

如果你想在返回它的值之前格式化你的单元格
private static string GetCellValue(SpreadsheetDocument doc, Cell cell)
{
// if no dataType, return the value of the innerText of the cell
if (cell.DataType == null) return cell.InnerText;

// depending type of the cell
switch (cell.DataType.Value)
{
// string => search for CellValue
case CellValues.String:
return cell.CellValue != null ? cell.CellValue.Text : string.Empty;

// inlineString => search of InlineString
case CellValues.InlineString:
return cell.InlineString != null ? cell.InlineString.Text.Text : string.Empty;

// sharedString => search for the SharedString
case CellValues.SharedString:
// is sharedPart exist ?
if (doc.WorkbookPart.SharedStringTablePart == null) doc.WorkbookPart.SharedStringTablePart = new SharedStringTablePart();
// is the text exist ?
foreach (SharedStringItem item in doc.WorkbookPart.SharedStringTablePart.SharedStringTable.Elements<SharedStringItem>())
{
// the text exist, return it from SharedStringTable
if (item.InnerText == cell.InnerText) return cell.InnerText;
}
// no text in sharedStringTable, create it and return it
doc.WorkbookPart.SharedStringTablePart.SharedStringTable.Append(new SharedStringItem(new DocumentFormat.OpenXml.Spreadsheet.Text(cell.InnerText)));
doc.WorkbookPart.SharedStringTablePart.SharedStringTable.Save();
return cell.InnerText;

// default case : bool / number / date
// return the value of the cell in plain text
// you can parse types depending your needs
default:
return cell.InnerText;
}
}

两个有用的文档:
  • 关于细胞:
    https://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.cell(v=office.14).aspx
  • 关于共享字符串:
    https://msdn.microsoft.com/en-us/library/office/gg278314.aspx
  • 关于c# - 如何在 C# 中使用 OpenXML 读取 excel 的空白单元格列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31717718/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com