我有以下代码:
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>
任何帮助将不胜感激。
由于
答案 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;
}
}
或类似的东西。如果您对此代码有任何疑问,请与我们联系,我将予以纠正。
一些参考文献: