gpt4 book ai didi

c# - 如何使用 Open XML 和 SAX 以编程方式检测空行?

转载 作者:太空狗 更新时间:2023-10-29 23:50:20 26 4
gpt4 key购买 nike

我正在开发一个应用程序,该应用程序使用带有 SAX 的 Open XML 解析 xlsx 文件中工作表中的行。但是,我正在使用一个到处都有空行的电子表格来测试我的实现。我想跳过在遍历工作表中的行时可能找到的所有空行。

例如,我有以下电子表格

Excel Spreadsheet with Empty Row

我使用 Open XML Productivity 工具打开了电子表格,我发现到处都是空单元格的行在标记中只有一个单元格。该单元格有一个名为“s”的属性,其他具有单元格值的单元格似乎没有。 Open XML Productivity Tool Output

我想知道代码中是否有一种方法可以查明给定行是否为空。到目前为止,我正在做的是通过工作表中的行如下:

do{
if (reader.ElementType == typeof(Row))
{
reader.ReadFirstChild();
Type generatedType = typeBuilder.CreateType();
object generatedObject = Activator.CreateInstance(generatedType);

PropertyInfo[] properties = generatedType.GetProperties();

int propertiesCounter = 0;
// Read all the cells in the row.

do
{
if (reader.ElementType == typeof(Cell))
{
c = (Cell)reader.LoadCurrentElement();

if (c.DataType != null
&& c.DataType.HasValue
&& c.DataType == CellValues.SharedString
&& int.Parse(c.CellValue.InnerText) < ssTable.ChildElements.Count)
{
value = ssTable.ChildElements[int.Parse(c.CellValue.InnerText)].InnerText ?? string.Empty;
}
else
{
if (c.CellValue != null && c.CellValue.InnerText != null)
{
value = c.CellValue.InnerText;
}
else
{
value = string.Empty;
}
}
Debug.WriteLine(value);
properties[propertiesCounter].SetValue(generatedObject, value, null);
propertiesCounter++;
}
} while (reader.ReadNextSibling());
listObjectsCustomClasses.Add(generatedObject);
}} while (reader.Read() && reader.ElementType == typeof(Row));

非常感谢您的热心帮助!

编辑: 我刚找到这个 answer在 SO 中解释了“The s attribute refers to a style”。但是,我仍然对使用 Open XML 以编程方式查明某行是否完全没有信息的方法感兴趣。

最佳答案

您可以分享您用于测试的 excel 文件吗?根据 openXML,如果任何行为空,则相应的行标记将不可用。

根据以下数据,根本没有生成索引为 2 的行。因此,您可以遍历行标签,如果它们的属性 r 与循环索引不匹配,则该行为空。

enter image description here

<row r="1" x14ac:dyDescent="0.35" spans="1:4">
<c r="A1" t="s">
<v>0</v>
</c>
<c r="B1" t="s">
<v>1</v>
</c>
<c r="C1" t="s">
<v>2</v>
</c>
<c r="D1" t="s">
<v>3</v>
</c>
</row>
<row r="3" x14ac:dyDescent="0.35" spans="1:4">
<c r="A3">
<v>1</v>
</c>
<c r="B3">
<v>2</v>
</c>
<c r="C3">
<v>3</v>
</c>
<c r="D3">
<v>4</v>
</c>
</row>

关于c# - 如何使用 Open XML 和 SAX 以编程方式检测空行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32406558/

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