SWT OleClientSite: как загрузить файл XML в Excel?

У меня есть файл Excel в формате OfficeML, MyData.xls. Поскольку я обновился до Office 2007 с Office 2003, я получаю предупреждающее сообщение о том, что содержимое файла не соответствует расширению файла. Похоже, что OfficeML теперь должен иметь расширение «xml».

В своем приложении я использую OleClientSite для отображения файла в объекте OleFrame. Если я изменю расширение файла на «xml», Excel не запустится. Если я оставлю расширение как «xsl», я получу приведенное выше предупреждающее сообщение.

Как я могу заставить файл с расширением «xml» открываться в OleFrame с помощью Excel?


person paul    schedule 26.01.2009    source источник


Ответы (3)


Самое простое решение — вернуться к формату 2003, что не потребует внесения каких-либо изменений в ваше приложение. Для этого откройте файл с расширением *.xls. При появлении запроса с предупреждением («... вы хотите открыть файл сейчас?») перейдите к открытию (это предупреждение, чтобы убедиться, что вы непреднамеренно не открываете файл с поддержкой макросов). После открытия файла в Excel просто сохраните его как *.xls. Это можно сделать, выбрав «Кнопка Office/Сохранить как/Excel 97-2003 Workbook».

Теперь более сложным решением будет обновление вашего приложения для работы с новым форматом OfficeML. Я не знаю, какой компонент вы используете, но он, вероятно, все еще будет работать для некоторых двоичных частей в новом стандарте (в первую очередь для проектов VBA), но вам придется распаковать и начать читать XML-файлы. .

Если вы еще этого не сделали, создайте новую книгу Excel, сохраните ее как *.xlsx (формат 2007 года) и в проводнике измените ее расширение на *.zip. Откройте его и осмотритесь. Для получения более подробной информации о файлах я бы начал переваривать эту статью MSDN.

person TimS    schedule 12.05.2009
comment
Тим: контент генерируется программно, а OfficeML — это хороший (и простой) способ создания документов Office. Предупреждение системы безопасности беспокоит моих пользователей, и я хочу этого избежать. - person paul; 13.05.2009
comment
Ах я вижу! Итак, вопрос в том, какой файл действительно выводится из вашего приложения? Я предполагаю, что это старый формат электронных таблиц Office 2003 XML (*.xml). Можете ли вы открыть свой файл в блокноте? Если да, то каковы первые несколько строк? XML-файл 2003 года (с расширением *.xml) будет правильно открываться из проводника (поскольку открывающее приложение определено в XML как ‹?mso-application progid=Excel.Sheet?›. Можете ли вы это проверить? - person TimS; 14.05.2009
comment
Тим: да, узел ‹?mso-application progid=Excel.Sheet?› присутствует - person paul; 19.05.2009

Может быть, я что-то упускаю, но не следует ли вам просто использовать .xslx в качестве расширения? Я предполагаю, что под OfficeML вы имеете в виду Office Open XML.

person Eclipse    schedule 11.05.2009
comment
Я не знаю - я пробовал так много вариантов. Однако я думаю, что xls и xlsx являются двоичными форматами, и если я сохраняю лист в OfficeML, Excel использует расширение «xml». - person paul; 12.05.2009
comment
xlsx — это набор xml-файлов, заархивированных вместе, так что это своего рода смесь текстового и двоичного файлов. - person Eclipse; 12.05.2009
comment
Джош: конечно, но проблема в том, что у меня есть содержимое OfficeML, и просто указание расширения файла xlsx вызовет предупреждающее сообщение, о котором я упоминал, что содержимое не соответствует типу файла. Предупреждение заставляет моих пользователей беспокоиться об открытии файла, и я хочу избежать этого, не создавая настоящие файлы xls или xlsx. - person paul; 13.05.2009

<?mso-application progid="Excel.Sheet"?> должен присутствовать в используемом шаблоне XSL. Ссылка ниже ясно объясняет, как включить инструкцию по обработке. Я должен был сделать что-то подобное, и это сработало для меня.

http://www.shareourwork.org/roller/ralphsjavablog/entry/generating_excel_sheets_with_xslt

person itsbalur    schedule 18.05.2011