- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在开发一个应用程序,该应用程序使用带有 SAX 的 Open XML 解析 xlsx 文件中工作表中的行。但是,我正在使用一个到处都有空行的电子表格来测试我的实现。我想跳过在遍历工作表中的行时可能找到的所有空行。
例如,我有以下电子表格
我使用 Open XML Productivity 工具打开了电子表格,我发现到处都是空单元格的行在标记中只有一个单元格。该单元格有一个名为“s”的属性,其他具有单元格值的单元格似乎没有。
我想知道代码中是否有一种方法可以查明给定行是否为空。到目前为止,我正在做的是通过工作表中的行如下:
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 与循环索引不匹配,则该行为空。
<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/
我一直在尝试为 SAX 解析器设置 UI 线程和处理程序。这是我没有实现 UI 线程和处理程序的解析器: public class AndroidXMLReader extends ListActiv
我正在尝试读取一个大型 XML 文档,并且我想以 block 的形式读取它,而不是 XmlDocument 将整个文件读入内存的方式。我知道我可以使用 XmlTextReader 来做到这一点,但我想
我正在尝试将 11384 个 XML 文件解析到一个 SQLite 数据库中。其中之一: ]> 1 2 我正在使用 SAX 解析器: pub
我需要用 Perl 解析 XML 文件。文件的一部分单独存储,并作为系统实体插入。不过,这个问题很常见。但是我无法获得任何信息来解决它。 ]> &externalContent; 当使
我正在尝试从 xsd 解析 HL7 消息定义。我将模式定义分成两个文件。第一个文件包含实际的消息定义,第二个文件包含消息中的段定义。 我正在尝试调整示例代码以从此处解析 XML https://gis
我正在使用 SAX 解析 MathML 表达式(尽管它是 MathML 的事实可能并不完全相关)。输入字符串示例为 λ 为了让 SAX 解
我正在尝试使用 Java 和 SAX 为 Android 设备解析 XML 文件。我从互联网上获取,在解析它时,我得到一个 ExpatException :字符“é”的格式不正确(无效标记)。有没有办
我正在尝试使用java中的sax读取xml文件。我只获得 endElement 的输出,但无法找出 startElement 出了什么问题。 这是我的处理程序: public class XMLHan
我正在使用 SAX 解析器来解析具有父级及其子级标记的 XML,如下所示:
我正在尝试从 RSS 提要中提取数据。 RSS 链接 - http://www.thehindu.com/sport/?service=rss ? 这是我的默认处理程序的字符方法。 public vo
我尝试执行下面的代码,但我的 SAX 解析器没有调用 startElement 方法。 下面是我的代码: package getTableStructure; import java.util.Lis
我正在满足一项要求,即我需要拆分大型 XML 并进一步处理。 这是 XML 示例,它可以变成单行。 yongjin 这是我的代码: import java.util.Arrays; import ja
我正在尝试将标签的内容放入我的 java Sax 解析器中的变量中。但是,Characters 方法仅返回 Char 数组。有没有办法将 Char 数组转换为 Int??? public void c
我有下面的代码.. System.setProperty("http.proxyHost","176.6.129.25") ; System.setProp
如何使用 SAX 显示树中最大深度的节点名称。该算法很适合我理解这个概念.. 例如,我应该如何使用 startelement、endelement、startdocument、enddocument
有没有可行的方法使用默认的处理程序类来查找对应的XML标签?例如... 1 1 我想使用 startElement() 和 endElement() 方
我想使用 SAX 解析器从 xml 文件中解析一些数据。我的xml如下: Pies & past Fruits 为了解析这些数据,我扩展了 DefaultHandler。 解析后的输出
我正在构建一个创建 XML 的流程(从各种来源并出于我事先不知道的各种目的),并且我希望将生成的 XML 直接注入(inject)到标准 XML 处理中,例如 SAX、StAX和 DOM。我已经完成了
我有一个由 MS Excel 创建的 XML 文件,其中包含如下元素: 22. Department"GS "NAES "ABCDEF"
我在使用 java sax 解析器打开 stackoverflow 帖子 XML 转储时遇到问题。它识别每个元素的结尾,但似乎跳过了 startElement 方法。我使用示例代码: try {
我是一名优秀的程序员,十分优秀!