Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用开放XML和SAX以编程方式检测空行?_C#_Openxml_Sax_Import From Excel - Fatal编程技术网

C# 如何使用开放XML和SAX以编程方式检测空行?

C# 如何使用开放XML和SAX以编程方式检测空行?,c#,openxml,sax,import-from-excel,C#,Openxml,Sax,Import From Excel,我正在开发一个应用程序,它使用带SAX的开放XML解析xlsx文件中工作表中的行。然而,我用一个到处都是空行的电子表格测试我的实现。我想跳过所有空行,我可能会发现,而我是通过一个表中的行循环 例如,我有以下电子表格 我使用OpenXMLProductivity工具打开了电子表格,发现满是空单元格的行在标记中只有一个单元格。该单元格具有一个名为“s”的属性,而具有单元格值的其他单元格似乎没有该属性 我想知道在代码中是否有一种方法可以确定给定的行是否为空。 到目前为止,我对工作表中的行所做的操作如

我正在开发一个应用程序,它使用带SAX的开放XML解析xlsx文件中工作表中的行。然而,我用一个到处都是空行的电子表格测试我的实现。我想跳过所有空行,我可能会发现,而我是通过一个表中的行循环

例如,我有以下电子表格

我使用OpenXMLProductivity工具打开了电子表格,发现满是空单元格的行在标记中只有一个单元格。该单元格具有一个名为“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));
do{
if(reader.ElementType==typeof(行))
{
reader.ReadFirstChild();
类型generatedType=typeBuilder.CreateType();
object generatedObject=Activator.CreateInstance(generatedType);
PropertyInfo[]properties=generatedType.GetProperties();
int propertiesCounter=0;
//读取行中的所有单元格。
做
{
if(reader.ElementType==typeof(单元格))
{
c=(单元格)reader.LoadCurrentElement();
如果(c.DataType!=null
&&c.DataType.HasValue
&&c.DataType==CellValues.SharedString
&&int.Parse(c.CellValue.InnerText)
非常感谢你的帮助


EDIT:我刚刚在中找到了这个,这就解释了“s属性指的是一种样式”。但是,我仍然对一种方法感兴趣,它可以通过编程的方式使用Open XML来确定一行是否完全没有信息。

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

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


0
1.
2.
3.
1.
2.
3.
4.
如果一行无效(即没有数据、样式、公式等),则没有理由将其包含在XML文件中。