Здравствуйте, G0ga, Вы писали:
G>И таких моментов достаточно. При этом в программе нет ни единого "голого" XML кода исключительно все на классах OpenXMLSDK.
Контент-тайп стандартный (кстати в обоих приведенных частях он присутствует), а в экселевском файле по умолчанию добавлены еще части отвечающие за стили, оформление, таблицу общих строковых констант и прочую хрень. В опен офисе видимо просто это убирают по умолчанию.
Собственно, тут есть две альтернативы.
1) Если OpenXml SDK сгенерировал файл, отвечающий стандарту OpenXML, то виноват не он, надо писать багрепорт в OpenOffice. На мой взгляд это самый вероятный вариант.
2) Если сгенерированный файл не отвечает этому стандарту — то надо писать багрепорт в Microsoft.
Если хочется найти причину — нужно задаться конкретной проблемой. Попробовать сгенерировать пустой документ, если опен офис откроет его — формируем с базовым наполнением, и так далее пока не найдем ошибку. Дальнейшее решение зависит от результатов.
Пытаться разобраться кто из продуктов более стандартен и более правильно формуирует файлы, как мне кажется, тут бесполезно.
Проблема OpenXml — он очень загроможденный и сложный, лично мне он не нравится. Но тут уж приходится кушать что дают.
Мне необходимо заключение по вопросу(очень нужно завтра сдавать тему, а времени и сил на мозговую атаку не хватает):
Невозможно открыть документ .xlsx приложением OOo 3.1.1.
Документ подготовлен с использованием OpenXMLSDK v2.0.
При этом MSExcel 2007 открывает данный файл корректно.
Здравствуйте, G0ga, Вы писали:
G>Невозможно открыть документ .xlsx приложением OOo 3.1.1. G>Документ подготовлен с использованием OpenXMLSDK v2.0. G>При этом MSExcel 2007 открывает данный файл корректно.
Ну, это пробемы опен офиса. Вообще, в состав OpenXml SDK входят тулзы Document Reflector и Document Diff — можно поизучать документ в них.
Можно попробовать делать так — брать документ из опенофиса как шаблон, менять в нем нужные места, и записывать. Это если его SDK осилит, и там не будет ошибок.
Здравствуйте, Gollum!
Судя по вашим рассуждениям, у вас не большой опыт работы с OpenOfficeSDK.
Эту проблему я решал комплексно со всех "сторон".
Я сначала создал в MSOffice документ, потом с помощью некоторых утилит, позаимствованных у MS, произвёл анализ с одновременным прочтением ECMA-376(для лучшего понимания). Но увы, получить одинаковые "базовые моменты" увы не удалось. А некоторые даже создать программным способом не представилось возможным.
Была проведена работа и со стороны OOo, путем ручного редактирования файла, в надежде получить тот минимум необходимый для понимания содержимого. В этом направлении я прошел дальше всех, я получил на экране excelевский лист с заданным названием, но увы данных там не было.
Но самое грустное — огромное различие между файлом созданным программным способом и тем-же самым файлом сохраненным в MSExcel. Анализируя эти два файла приходишь в недоумение почему одни и те же данные занимают во втором случае объем в два с лишним раза больше, чем в первом(это при условии, что файлы в обоих случаях представляют собой архив).
Создается неправильное впечатление о программных продуктах компании MS.
Заранее прошу извинения если сказал, что-то грубое и нелестное в ваш адрес. Просто "накипело". Это уже второй проект с использованием SDK первый был связан с MSWord, но там было проще, там отсутствовал OOo. Там увы тоже все не "гладко".
Здравствуйте, G0ga, Вы писали:
G>Я сначала создал в MSOffice документ, потом с помощью некоторых утилит, позаимствованных у MS, произвёл анализ с одновременным прочтением ECMA-376(для лучшего понимания). Но увы, получить одинаковые "базовые моменты" увы не удалось. А некоторые даже создать программным способом не представилось возможным.
Минимальный набор утилит — это архиватор и блокнот.
G>Была проведена работа и со стороны OOo, путем ручного редактирования файла, в надежде получить тот минимум необходимый для понимания содержимого. В этом направлении я прошел дальше всех, я получил на экране excelевский лист с заданным названием, но увы данных там не было.
Необходимый минимум есть в ECMA-376, Part 1 и 2.
G>Но самое грустное — огромное различие между файлом созданным программным способом и тем-же самым файлом сохраненным в MSExcel. Анализируя эти два файла приходишь в недоумение почему одни и те же данные занимают во втором случае объем в два с лишним раза больше, чем в первом(это при условии, что файлы в обоих случаях представляют собой архив).
Есть такое. Когда сохраняешь простой документ из MS Office, то в нём содержится гораздо больше информации, чем минимально нужно.
Мой вам совет — берёте за основу ECMA-376 Part 1, глава (informative) Primer, раздел Introduction to SpreadsheetML (для начала желательно ещё ознакомиться с OPC) и делаете по нарастающей — сначала просто пустой документ, потом заполняете ячейки данными, потом форматирование, и т.д. и т.п. Все манипуляции выполняете в каком-нибудь XML-редакторе, например, в Visual Studio, файлы пакуете вашим любимым архиватором в zip и переименовываете в xlsx.
Здравствуйте, Poul_Ko, Вы писали:
P_K>Здравствуйте, G0ga, Вы писали:
G>>Я сначала создал в MSOffice документ, потом с помощью некоторых утилит, позаимствованных у MS, произвёл анализ с одновременным прочтением ECMA-376(для лучшего понимания). Но увы, получить одинаковые "базовые моменты" увы не удалось. А некоторые даже создать программным способом не представилось возможным.
P_K>Минимальный набор утилит — это архиватор и блокнот.
G>>Была проведена работа и со стороны OOo, путем ручного редактирования файла, в надежде получить тот минимум необходимый для понимания содержимого. В этом направлении я прошел дальше всех, я получил на экране excelевский лист с заданным названием, но увы данных там не было.
P_K>Необходимый минимум есть в ECMA-376, Part 1 и 2.
G>>Но самое грустное — огромное различие между файлом созданным программным способом и тем-же самым файлом сохраненным в MSExcel. Анализируя эти два файла приходишь в недоумение почему одни и те же данные занимают во втором случае объем в два с лишним раза больше, чем в первом(это при условии, что файлы в обоих случаях представляют собой архив).
P_K>Есть такое. Когда сохраняешь простой документ из MS Office, то в нём содержится гораздо больше информации, чем минимально нужно.
P_K>Мой вам совет — берёте за основу ECMA-376 Part 1, глава (informative) Primer, раздел Introduction to SpreadsheetML (для начала желательно ещё ознакомиться с OPC) и делаете по нарастающей — сначала просто пустой документ, потом заполняете ячейки данными, потом форматирование, и т.д. и т.п. Все манипуляции выполняете в каком-нибудь XML-редакторе, например, в Visual Studio, файлы пакуете вашим любимым архиватором в zip и переименовываете в xlsx.
Все так и было. Вопрос в другом — созданный файл не открывает OOo 3.1.
Здравствуйте, G0ga, Вы писали:
G>Судя по вашим рассуждениям, у вас не большой опыт работы с OpenOfficeSDK.
Забавно. С OpenOfficeSDK действительно я не работал. Я работал с OpenXML SDK обеих версий.
G>Эту проблему я решал комплексно со всех "сторон". G>Я сначала создал в MSOffice документ, потом с помощью некоторых утилит, позаимствованных у MS, произвёл анализ с одновременным прочтением ECMA-376(для лучшего понимания). Но увы, получить одинаковые "базовые моменты" увы не удалось. А некоторые даже создать программным способом не представилось возможным.
Т.е. как раз то, что посоветовал я, несмотря на мой небольшой опыт
G>Была проведена работа и со стороны OOo, путем ручного редактирования файла, в надежде получить тот минимум необходимый для понимания содержимого. В этом направлении я прошел дальше всех, я получил на экране excelевский лист с заданным названием, но увы данных там не было.
Так чтобы данные появились, надо с помощью SDK открыть шаблонный документ, и поместить эти самые данные в нужное место документа.
G>Но самое грустное — огромное различие между файлом созданным программным способом и тем-же самым файлом сохраненным в MSExcel. Анализируя эти два файла приходишь в недоумение почему одни и те же данные занимают во втором случае объем в два с лишним раза больше, чем в первом(это при условии, что файлы в обоих случаях представляют собой архив). G>Создается неправильное впечатление о программных продуктах компании MS.
А вот у меня как-то получилось так, что такого различия не наблюдалось. Видимо все-таки виноват не программный продукт от MS, а то, как его использовали.
G>Заранее прошу извинения если сказал, что-то грубое и нелестное в ваш адрес. Просто "накипело". Это уже второй проект с использованием SDK первый был связан с MSWord, но там было проще, там отсутствовал OOo. Там увы тоже все не "гладко".
OpenXML SDK 2.0 по моим впечатлениям — это по схеме XMLей тупо сгенерировали набор классов. В текущем состоянии его крайне неудобно использовать, однако работу свою он делает, и документы генерирует исправно. Если есть конкретные вопросы — спрашивайте.
Строки выделенные я опускаю т.к. не формирую. А вот строки выделенные это собственно повод поговорить.
Строка <Default Extension="xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml" /> откуда взят такой ContentType?
Почему нет сроки <Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/>? Хотя сам файл docProps/app.xml присутствует и содержит данные. Данный раздел формируется следующим кодом.
SpreadsheetDocument _exelDocument = SpreadsheetDocument.Create(fileToExport, SpreadsheetDocumentType.Workbook);
ExtendedFilePropertiesPart _filePropertyPart = _exelDocument.AddExtendedFilePropertiesPart();
_filePropertyPart.Properties = new DocumentFormat.OpenXml.ExtendedProperties.Properties();
_filePropertyPart.Properties.Application = new DocumentFormat.OpenXml.ExtendedProperties.Application("Microsoft Excel");
_filePropertyPart.Properties.DocumentSecurity = new DocumentFormat.OpenXml.ExtendedProperties.DocumentSecurity("0");
_filePropertyPart.Properties.ScaleCrop = new DocumentFormat.OpenXml.ExtendedProperties.ScaleCrop("false");
_filePropertyPart.Properties.LinksUpToDate = new DocumentFormat.OpenXml.ExtendedProperties.LinksUpToDate("false");
_filePropertyPart.Properties.SharedDocument = new DocumentFormat.OpenXml.ExtendedProperties.SharedDocument("false");
_filePropertyPart.Properties.HyperlinksChanged = new DocumentFormat.OpenXml.ExtendedProperties.HyperlinksChanged("false");
_filePropertyPart.Properties.AppVersion = new DocumentFormat.OpenXml.ExtendedProperties.AppVersion("12.0000");
_filePropertyPart.Properties.Save();
Последствия данного эффекта OOo постоянно спрашивает какого типа файл "мы" открываем. Хотя в свойствах чётко прописано ...