openxml如何使用OpenXmlReader读取inlineStr

时间:2012-02-13 17:30:36

标签: excel excel-2007 openxml openxml-sdk

我有以下代码:

public static void ReadExcelFileSAX(string filename)
{
    using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open(filename, true))
    {
        WorkbookPart workbookPart = myDoc.WorkbookPart;
        WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();

        OpenXmlReader reader = OpenXmlReader.Create(worksheetPart);
        string text;
        while (reader.Read())
        {
           if (reader.ElementType == typeof(CellValue))
           {
                text = reader.GetText();
            }
        }
    }
}

此代码可以读取数据类型为数字的任何单元格,但无法读取 inlineStr

使用Productivity工具查看XML,我认为代码可以读取以下XML

<x:c r="D2" t="n">
    <x:v>328</x:v>
</x:c>

但它无法读取这个(或者我不知道该怎么做)

<x:c r="F1" s="6" t="inlineStr">
    <x:is>
        <x:t>T1</x:t>
    </x:is>
</x:c>

任何帮助将不胜感激。

由于

1 个答案:

答案 0 :(得分:2)

您的代码看起来应该正确读取值,但更多信息可用于检测问题的原因。

我想您可以尝试检查类型是否为InlineString,但您不能只使用GetText()方法,因为InlineString不是来自OpenXMlLeafTextElement

我还没有测试过,但我建议你试试:

while (reader.Read())
{
   if (reader.ElementType == typeof(CellValue))
   {
        text = reader.GetText();
   }
   else if (reader.ElementType == typeof(InlineString)) //or instead of this, check type of its child node and use it inside this if statement
   {
        text = (reader.LoadCurrentElement() as InlineString).Text.Text;
   }
}

或类似的东西。如果您对此代码有任何疑问,请与我们联系,我将予以纠正。

一些参考文献: