Раньше уже было об экспорте отчетов в UCS StoreHouse. Теперь уточнения. Писал:
Странный Excel XML работает и без M$ Office, но открывается только им.
Оказывается был не прав. Странный Excel XML Excel'ем не открывается и ничем другим не откроется.
По порядку.
В процессе экспорта StoreHouse с помощью FastReport создает файл с расширением xls. В файле - xml текст в кодировке utf8 с таким заголовком:
<?xml version="1.0"?><?mso-application
progid="Excel.Sheet"?><?fr-application
created="FastReport"?><?fr-application
homesite="http://www.fast-report.com"?><Workbook
xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40"><DocumentProperties
xmlns="urn:schemas-microsoft-com:office:office"><Title></Title><Author></Author><Created>
08.04.2010T19:48:09Z</Created><Version>...</Version></DocumentProperties>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<ProtectStructure>False</ProtectStructure><ProtectWindows>False</ProtectWindows></ExcelWorkbook>
Заголовок правильный, но ни Excel ни OOo файл открыть не могут. Пробуем открыть
браузером и получаем: В ссылке объекта обнаружен недопустимый знак.
Внимательно читаем xml и видим: (&#49&#50лет)
на месте, где ожидается
текст (12лет)
В HTML такой фокус пройдет, хотя это и не по
стандарту, а парсер XML такие
вольности не позволяет. Очевидно, должно быть (&#49;&#50;лет)
раз уж
решили вполне безобидные символы оформлять с помощью entity. Хорошо, пишем
простую программу для коррекции entities - добавляем им в конец точку с запятой.
Этого оказалось недостаточно. Опять читаем недоделанный xml и натыкаемся на
<Data ss:Type="String">Специи 1 <89-299></Data>
Вот так-то. Угловые скобки не заменили на соответствующие entities. Более того,
оказалось, все символы,
которые _положено_ заменять на entity проходят в так называемый xml в голом виде.
Может, это косяк в FastReport'е, может быть в StoreHous'е, но это грубый косяк в продукте, продающемся за 42000р (+9000р доп.клиент). В результате появился маленький костыль, который результат экспорта отчетов StoreHouse превращает в валидный xml и открывает в табличном редакторе OOo. И без всяких m$-офисов.