Как поместить RTF / HTML в ячейку Excel, используя Open XML in C# - PullRequest
0 голосов
/ 21 января 2020

Мне нужно взять HTML из текстового редактора и поместить его в лист Excel. Требование заключается в том, что html отображается и выглядит так же, как в редакторе форматированного текста.

Мы используем Open XML для наших нужд в Excel, но я не могу найти способ поместить HTML в ячейку. Я могу установить значение, но это просто отображает строку.

Например, мне нужно это HTML для отображения в ячейке:

<p style="text-align: center"><strong>This is a test!</strong></p><p><s>a</s></p><p><br></p><p><u style="color: rgb(32, 43, 250)">test</u></p><ul><li>test<ul><li><span style="background-color: rgb(156, 224, 29)">test</span></li></ul></li></ul><p><br></p><p><em style="font-size: 24pt; font-family: &quot;Lucida Console&quot;">d</em></p>

Есть ли способ сделать это или я ищу что-то, что не может быть сделано?

1 Ответ

1 голос
/ 21 января 2020

Как уже отмечалось в комментариях, вам придется написать собственное преобразование для преобразования HTML разметки в разметку SpreadsheetML. Например, давайте посмотрим на следующий текст.

Это полужирный и itali c текст.

Представление HTML приведенный выше пример текста довольно прост:

<p>This is <strong>bold</strong> and <em>italic</em> text.</p>

Вы должны превратить вышеуказанную разметку HTML в следующую разметку SpreadsheetML (один элемент si, если быть точным):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="1" uniqueCount="1">
  <si>
    <r>
      <t xml:space="preserve">This is </t>
    </r>
    <r>
      <rPr>
        <b/>
        <sz val="11"/>
        <color theme="1"/>
        <rFont val="Calibri"/>
        <family val="2"/>
        <scheme val="minor"/>
      </rPr>
      <t>bold</t>
    </r>
    <r>
      <rPr>
        <sz val="11"/>
        <color theme="1"/>
        <rFont val="Calibri"/>
        <family val="2"/>
        <scheme val="minor"/>
      </rPr>
      <t xml:space="preserve"> and </t>
    </r>
    <r>
      <rPr>
        <i/>
        <sz val="11"/>
        <color theme="1"/>
        <rFont val="Calibri"/>
        <family val="2"/>
        <scheme val="minor"/>
      </rPr>
      <t>italic</t>
    </r>
    <r>
      <rPr>
        <sz val="11"/>
        <color theme="1"/>
        <rFont val="Calibri"/>
        <family val="2"/>
        <scheme val="minor"/>
      </rPr>
      <t xml:space="preserve"> text.</t>
    </r>
  </si>
</sst>

Чтобы сделать это, вам действительно нужно понимать разметку SpreadsheetML и, в частности, Shared String Table (* sst элемент), в которой вы будете преобразовывать преобразованную разметку (как одну или несколько * 1019). * elements).

Преобразование лучше всего реализовать как чисто функциональное преобразование. Взгляните на класс XmlTransformationTests для примера, который делает нечто подобное. Он преобразует HTML -подобный XML в WordprocessingML.

...