C# Как я могу прочитать значения XML ячейки Excel с форматированием на уровне символов? (Несколько элементов <t> внутри <si>)

Я работаю над небольшим приложением, которое будет читать содержимое листа Excel и импортировать все данные в виде строк в виде таблицы данных в форме Windows.

Я успешно реализовал пример кода Дитмара Шодера, чтобы сделать это. Особая благодарность ему за размещение.

http://www.codeproject.com/Tips/801032/Csharp-How-To-Read-xlsx-Excel-File-With-Lines-of?fid=1864959&df=10000&mpp=50&sort=Position&spc=Relaxed&tid=5149734

Я новичок в 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", но возвращает ноль, потому что ячейка имеет форматирование на уровне символов и, следовательно, два <t> теги. "Текст А" имеет зачеркнутый цвет, выделен другим цветом или выделен жирным шрифтом и т. Д., А "Текст Б" - нет.

Текстовым значениям присваивается следующая строка кода.

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;        
}

Мне не удалось отредактировать этот класс так, чтобы он правильно интерпретировал текстовые значения обоих элементов.

1 ответ

Решил этот вопрос сам, изучив сериализацию XML и многие другие подобные вопросы здесь.

класс sst:

public class sst
{
    [XmlAttribute]
    public string uniqueCount;

    [XmlAttribute]
    public string count;

    [XmlElement("si")]
    public SharedString[] si;



    public sst() { }
}

public class SharedString
{
    public string t;

    [XmlElement("r")]
    public NestedString[] ns;

    public SharedString() { }

}

public class NestedString
{
    public string t;
}

И присвоение текста ячейки:

if (Workbook.SharedStrings.si[Convert.ToInt32(_value)].t != null)
{
   Text = Workbook.SharedStrings.si[Convert.ToInt32(_value)].t;
}
else if (Workbook.SharedStrings.si[Convert.ToInt32(_value)].ns != null)
{
   for (int i = 0; i < Workbook.SharedStrings.si[Convert.ToInt32(_value)].ns.Length; i++)
   {
     Text += Workbook.SharedStrings.si[Convert.ToInt32(_value)].ns[i].t;
   }
} 
Другие вопросы по тегам