我正在开发一个小型应用程序,该应用程序将读取 excel 工作表的内容并将所有数据作为字符串导入 Windows 窗体 datagridview。
我已经成功地实现了 Dietmar Schoder 的代码示例来做到这一点。特别感谢他发帖。
我是 XML 的新手,并且已经在这个问题上停留了一段时间。
具有“字符级别”格式的单元格在xml 元素中包含两个或多个单独<t>
的文本值。<si>
这是 excel 文件的 sharedstrings.xml 文件中的一个片段
<si>
<r>
<rPr>
<b/>
<sz val="12"/>
<color rgb="FFFF0000"/>
<rFont val="Arial"/>
<family val="2"/>
</rPr>
<t>Text A</t>
</r>
<r>
<rPr>
<b/>
<sz val="12"/>
<color theme="1"/>
<rFont val="Arial"/>
<family val="2"/>
</rPr>
<t xml:space="preserve"> Text B</t>
</r>
</si>
此单元格包含文本“Text A Text B”,但返回 null,因为该单元格具有字符级格式,因此有两个<t>
标记。“文本 A”有删除线、不同颜色或粗体等,而“文本 B”没有。
使用以下代码行分配文本值。
Text = Workbook.SharedStrings.si[Convert.ToInt32(_value)].t;
无论如何在将两个元素的字符串<t>
分配给 Text 变量之前连接它?
编辑:我认为我没有将问题缩小到 sharedstrings.cs 文件和 sharedstrings.xml 的反序列化
SharedStrings = DeserializedZipEntry<sst>(GetZipArchiveEntry(zipArchive, @"xl/sharedStrings.xml"));
sst类:
[Serializable()]
[XmlType(Namespace = "http://schemas.openxmlformats.org/spreadsheetml/2006/main")]
[XmlRoot("sst", Namespace = "http://schemas.openxmlformats.org/spreadsheetml/2006/main")]
public class sst
{
[XmlAttribute]
public string uniqueCount;
[XmlAttribute]
public string count;
[XmlElement("si")]
public SharedString[] si;
public sst() { }
}
public class SharedString
{
public string t;
}
我无法以正确解释两个 t 元素文本值的方式编辑此类。