Я работаю над небольшим приложением, которое будет читать содержимое рабочего листа excel и импортировать все данные в виде строк в представление данных формы Windows.
Для этого я успешно реализовал пример кода Дитмара Шодера. Отдельное спасибо ему за публикацию.
Я новичок в XML и уже некоторое время застрял в этой проблеме.
Ячейки с форматированием «уровень символов» содержат два или более отдельных текстовых значения <t>
в элементе <si>
xml.
Вот фрагмент из файла sharedstrings.xml файла excel.
<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>
Эта ячейка содержит текст «Текст A Текст 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"));
ст класс:
[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.