Я использую PHPExcel для передачи данных между MySQL DB и Excel 2007. Он работает хорошо в большинстве ситуаций, но я столкнулся с одной проблемой.
Некоторые из полей в БД содержат данные HTML. Мне нужно как можно больше сохранить форматирование в ячейках Excel. Как я мог понять, Excel допускает следующее форматирование внутри ячеек (класс PHPExcel_RichText
поддерживает все эти): новые строки [они могут использоваться для отслеживания блоков <p></p>
), имя шрифта, размер, цвет, жирный шрифт, курсив, подчеркивание, зачеркивание, индекс, надстрочный индекс. Предположим, что этого достаточно, поэтому мы можем игнорировать другое форматирование HTML.
Каков наилучший (самый простой, быстрый) способ преобразования данных HTML в Excel Rich Text и наоборот?
Одним из решений, которое я имею в виду, является создание функции, которая будет перемещаться по HTML (используя DOMDocument
или так), поместить \n
после элементов блока, создать объекты PHPExcel_RichText_Run
для <b>
, <i>
т. Д. И игнорировать все остальные элементы. Я считаю, что это будет довольно «дорого», особенно при работе с вложенными структурами, например <b>some <i>formatted<i> text</b>
Есть ли лучший способ сделать это с PHPExcel
или без PHPExcel
?
Еще одна идея: я заметил, что при экспорте в формате XML Spreadsheet 2003 внутри XML появляется следующее:
<ss:Data ss:Type="String" xmlns="http://www.w3.org/TR/REC-html40"><Font html:Color="#000000">this is </Font><B><Font html:Color="#000000">some </Font><I><Font html:Color="#000000">formatted</Font></I><Font html:Color="#000000"> text</Font></B></ss:Data>
который является нормальным HTML4. Я имею ввиду, что Excel может понять простой HTML. Так что, возможно, есть способ передать HTML непосредственно в Excel без преобразования его в объекты PHPExcel_RichText
… (хотя обратите внимание, что было бы лучше, если я смогу экспортировать в формат .xlsx)
HTML для Rich-Text Runs находится в дорожной карте разработки PHPExcel в течение следующего года: однако планируемый метод заключался в использовании DOMDocument для разбора разметки.
Любое решение, которое мы принимаем для самого PHPExcel, должно будет использовать RichText Runs для обеспечения согласованности. Хотя сама MS Excel может обрабатывать прямой импорт Excel и (как вы отметили в XML-формате SpreadSheetML, предлагаемом Excel 2003), это не согласовано в других разных форматах Excel (BIFF и OfficeOpenXML).