Mso application progid word document

Симптомы

При открытии документа Microsoft Office Word 2010 XML, документ Microsoft Office Word 2007 XML или документ Microsoft Office Word 2003 XML в Microsoft Internet Explorer, Internet Explorer не отображается документ с помощью таблицы стилей Internet Explorer XML по умолчанию и не отображает код XML. Вместо этого обозреватель Internet Explorer открывает документ XML в встроенного окна Word в обозревателе Internet Explorer или в новом окне Word.

Причина

По умолчанию обозреватель Internet Explorer открывает документы Word XML встроенного окна Word или в новом окне Word.

Временное решение

Чтобы создать XML-документ в приложении Word, откроется в обозревателе Internet Explorer и использует Internet Explorer по умолчанию таблицу стилей XML (отображение XML-код), изменения в документ «Блокнот», чтобы удалить следующий XML-код в начале документа:

 <?mso-application progid="Word.Document"?> 

Статус

Данное поведение является особенностью.

Нужна дополнительная помощь?

Вопрос:

Если я создаю новое приложение и ассоциируюсь с, скажем, расширением .xml файла на конкретном компьютере, когда кто-то дважды щелкает файл .xml, он запустит мое приложение и передаст файл в качестве параметра. Но Windows, похоже, знает, что другие файлы имеют возможность работать с этим типом файла. Как это настроено?

Кроме того, когда я сохраняю файл Microsoft Word в виде XML файла, а затем дважды щелкаю по файлу, он запустит Microsoft Word, хотя тип файла .xml связан с чем-то другим, например Internet Explorer, Похоже, что может быть заглушка, связанная с типом файла .xml, который при вызове просматривает содержимое и запускает соответствующее приложение.

Существует ли Windows API или какой-то стандартный способ сделать это?

Что я хотел создать приложение, чтобы делать именно то, что делает Word, т.е. сохранить файл в формате .xml, но при двойном щелчке запускает мое приложение вместо Internet Explorer.

Лучший ответ:

Механизм открытия документов Office.xml

Для документов Word, сохраненных в XML и имеющих расширений .xml, Microsoft внедрила специальный обработчик для открытия этих файлов в соответствующем приложении (этот механизм используется не только для документов Word, но также для электронных таблиц Excel, форм InfoPath и некоторых других форматов).

Если вы проверите реестр, вы увидите, что тип файла для файлов с расширением .xml установлен на xmlfile:

HKEY_CLASSES_ROOT.xml (Default) = "xmlfile"

Команда, выполняемая при открытии этого типа файла, указана в

HKEY_CLASSES_ROOTxmlfileshellopencommand = ""C:Program FilesCommon FilesMicrosoft SharedOFFICE12MSOXMLED.EXE" /verb open "%1""

Итак, когда XML файл дважды щелкнут в проводнике, Windows запустит MSOXMLED.EXE. Это приложение теперь просматривает XML файл и ищет инструкцию обработки XML. Эта команда обработки с именем mso-application может указывать ProgId:

<?mso-application progid="Word.Document"?>

Если эта команда обработки найдена и ProgId является одним из поддерживаемых значений, MSOXMLED.EXE ищет реестр для команды open, указанной для этого ProgId. Для Word.Document на самом деле существует другое перенаправление на Word.Document12 (если Office 2007 установлен) с помощью подраздела CurVer Word.Document, поэтому мы получаем:

HKEY_CLASSES_ROOTWord.Document.12shellOpencommand = ""C:Program FilesMicrosoft OfficeOffice12WINWORD.EXE" /n /dde"

Итак, наконец, MSOXMLED.EXE запустит соответствующее приложение Office или запустит XML-приложение по умолчанию, указанное в

HKEY_CLASSES_ROOTXEV.GenericAppshellopencommand

Вы можете попробовать это, вызывая MSOXMLED.EXE из командной строки:

MSOXMLED.EXE /verb OPEN "SampleWordMLDocument.xml"

Если вы хотите реализовать такое же поведение, вам придется реализовать обработчик, такой как MSOXMLED.EXE, который просматривает файл для предопределенной инструкции по обработке, а затем направляет документ в соответствующее приложение.

Обработка значков

Выше мы рассмотрели способ обработки и редактирования документа. Другой механизм отвечает за отображение определенного значка в зависимости от инструкции обработки внутри документа XML: обработчик значков.

Обработчики значков – это тип расширений оболочки Explorer, которые являются COM-объектами в процессе, которые могут быть связаны с определенными типами файлов. Тот, который используется для файлов XML, указан в реестре под

HKEY_CLASSES_ROOTxmlfileShellExIconHandler = "{AB968F1E-E20B-403A-9EB8-72EB0EB6797E}"

Этот GUID ссылается на файл MSOXEV.dll, который, как и MSOXMLEX.EXE, проверяет XML файл для ProgId, а затем предоставляет правильный значок.

Поскольку все это довольно сложный механизм, вы должны тщательно подумать, хотите ли вы пойти этим путем. По-моему, гораздо проще зарегистрировать новое уникальное расширение файла. Он также ограничен, так как он будет работать только с типами файлов, которые позволят вам включить в заголовок файла какую-либо пользовательскую информацию (как ProgId).

Microsoft больше не использует этот метод и вместо этого использует расширения файлов для своих новых форматов OpenXML (см. Почему файлы Office.xml ведут себя иначе, чем другие “.xml” .).

Ответ №1

Ну, все ассоциации файлов хранятся в реестре. Там может быть статья “” Понимание сетевых файлов Windows”.

Кроме того, существует множество способов программно создавать ассоциации файлов. Хотя чаще всего это делается в установщике. Например, моя любимая система установки NSIS имеет макрос, чтобы справиться с этим: http://nsis.sourceforge.net/FileAssoc

Но тогда возникает проблема установки программы по умолчанию для открытия определенного типа файла. Я не знаю, какой язык или установить систему вы планируете использовать для этого, но кажется, что вопрос ответил здесь для NSIS. Разумеется, у Microsoft также есть документация по их способу сделать это с установщиком Windows. Но, как вы, наверное, догадались, я больше человек NSIS.;)

Ответ №2

В проводнике Windows выберите “Инструменты” – “Параметры папки” – “Типы файлов”. Нажимая “Новые” или “Дополнительно”, вы можете создавать/изменять собственные ассоциации приложений с различными типами файлов, которые появятся при щелчке правой кнопкой мыши по файлу.

EDIT: я не знаю, есть ли заглушка, которая перенаправляет определенные файлы. Вы можете проверить My ComputerHKEY_CLASSES_ROOT в реестре и посмотреть, что он там помещает.

Время на прочтение
5 мин

Количество просмотров 1.4K

Привет, Хабр! Меня зовут Дарья Чувашова, я — руководитель группы отделения SAP-разработки. В процессе моей проектной деятельности мне приходилось сталкиваться с задачами выгрузки документов в .doc формат и делать это нужно было быстро. При этом эти документы могли быть с совершенно разным форматированием, кучей таблиц, реквизитов и т. д. В SAP для выгрузки в форматы pdf и excel есть удобные инструменты, возможность работать с формулярами и графическими редакторами форм. Для работы с форматом.doc инструментов меньше. В этой статье я расскажу о быстром и самом простом способе выгрузить документ любой сложности.

Почему я решила написать этот «how‑to»? Как я упомянула, задачи по выгрузке файлов в.doc мне приходилось выполнять часто. В какой‑то момент я собрала все лайфхаки и советы по ускорению работы в один материал, а сейчас хочу поделиться им с хабровской аудиторией. Надеюсь, для коллег записи будут полезными. Описанный вариант решения имеет свои особенности, поэтому я постараюсь на примерах продемонстрировать некоторые «узкие» моменты.

Пошаговая инструкция решения вопроса

Шаг 1

В первую очередь нам нужно подготовить шаблон в MS Word в нужном формате. Важно заполнить все реквизиты тестовыми данными для примера, это значительно упростит нам жизнь в последующих действиях.

В качестве примера рассмотрим вот такой документ «Счёт‑фактура» в MS Word:

Этот и другие используемые здесь примеры были взяты из открытого источника: https://glavkniga.ru/situations/k505106

Этот и другие используемые здесь примеры были взяты из открытого источника: https://glavkniga.ru/situations/k505106

Шаблон необходимо заполнить тестовыми примерами, чтобы проверить, что при заполнении ничего не съезжает, и все реквизиты остаются на месте:

Шаг 2

Сохраним наш документ в формате XML: Файл — Сохранить как. Выбираем расширение .xml

Примечание: для большинства задач вполне достаточно формата.doc, он поддерживает ограничения редактирования, элементы управления и т. п.

Для того чтобы открыть данный файл, мне удобно использовать программу Altova XML Spy. Скорее всего нам потребуется проанализировать содержимое, а в данной программе выполнять анализ файла очень удобно за счёт подсветки синтаксиса. Вы, конечно, можете использовать любой другой редактор.

Открываем свой XML, видим примерно такую картину:

После применения команды PrettyPrinter:

Шаг 3

Переходим в SAP. В своём пакете разработки создадим Преобразование:

Выберем трансформацию XSLT:

Видим следующую картину:

Для того, чтобы наша трансформация верно работала, необходимо указать следующий код между тегами <xsl:template match=»/»> </xsl:template>:

<xsl:processing-instruction name="mso-application" progid="Word.Document">
      <xsl:text progid="Word.Document"/>
  </xsl:processing-instruction>

Теперь можно смело вставить весь XML‑код ниже из нашего документа:

Визуально просматриваю данный XML‑код, обнаруживаю, что часть тегов подсвечивается, как текст:

Вижу, что это произошло из‑за кавычек в наименовании компании (Company), смело их удаляю:

Теперь пытаемся активировать трансформацию. В 90% случаях активация пройдёт успешно.

Но если у вас появятся подобные ошибки,

Предлагаю стереть данные коды, так как они не имеют никакого смысла для генерации документа из SAP.

Удаляем:

После удаления всех кодов трансформация успешно активируется.

Шаг 4

Переходим в программу. Для вызова трансформации и выгрузки файла привожу для примера такой код:

Данный код максимально облегчён для простоты восприятия и предельной наглядности.

После запуска программы в папке C:TEMP сохранится файл точно в таком же виде, как наш подготовленный шаблон:

При открытии файла может возникнуть следующая ошибка:

Для того, чтобы от неё избавиться, переходим в трансформацию и ищем /word/settings.xml

Избавиться от ошибки мне помогло удаление всего блока <pkg:part … </pkg:part>. Это не повлияло на работоспособность, и файл стал открываться нормально. Без подсветки синтаксиса тяжело искать закрывающий тег, поэтому имеет смысл снова воспользоваться программой Altova XML Spy (в данной программе вы можете удалить лишний код, а затем вставить новую версию в нашу трансформацию).

Удаляем и активируем, проверяем, что ошибка ушла и с файлом всё в порядке.

Шаг 5

Переходим к выгрузке данных из контекста. Начнём с самого простого: выгрузим данные в поле «Продавец»:

Контекст представляет собой структуру c данными, например, вот такую:

Её мы заполняем и подаём в трансформацию как контекст. Далее копируем из файла, заполненного в качестве примера, текст из реквизита «Продавец» и ищем это место в нашей XML:

Вместо данного текста вставляем:

Не забываем указать нужную структуру контекста и сделать выборку данных. Для примера прописываю хардкодом наименование продавца:

Результат трансформации:

Остальные реквизиты заполняем аналогично.

Как видим, заполненный на Шаге 1 пример нам помогает выполнять быструю навигацию по XML и искать нужные места для доработки.

Отдельную сложность может представлять собой заполнение табличных данных. В структуре контекста имеем вложенную таблицу с данными T_INVOICE. Для вывода данных используем цикл for each. Начнём с 1 строки 1 столбца. Ищем поиском пример «Яблоки» и вставляем код, приведённый чуть ниже.

Теги описания таблицы довольно понятны: <w:tc> </w:tc> — стоблец, <w:tr </w:tr> — соответственно строка, ну и сам текст <w:t> </w:t>.

Если мы хотим каждую строку таблицы из контекста выводить в новую строку таблицы, то цикл ставим перед тегом строки и закрываем после окончания описания строки:

Конец цикла будет обозначен тут:

Так как таблица большая, окончание цикла будет через 400 строк, поэтому удобно воспользоваться опять же программой с подсветкой тегов, таким образом выводим все необходимые элементы таблицы.

Результат:

Видим, что строка автоматически добавилась. Так как нам не нужны старые данные из примера, удалим эти строки из таблицы. Ищем так же по тегам.

В идеале можно было бы в самом шаблоне оставить лишь одну строку для заполнения, тогда лишних действий по удалению колонок не пришлось бы делать. Но я хочу показать неидеальный случай.

Если необходимо вывести данные из таблицы контекста не в каждой строке таблицы, а текстом с переносом, то можем воспользоваться тегом переноса строки <w:br/>, например,

Получим вот такой результат:

Ещё немного полезных рекомендаций

Мы разобрали основные шаги, как сделать выгрузку любого реквизита и заполнить таблицу. При этом необязательно думать о размере шрифта или форматировании, достаточно изначально выстроить необходимые настройки и правки в исходном документе.

Что ещё записано в моих заметках?

Как поменять шрифт быстро, если он перестал подходить? Допустим, мы желаем заменить Arial на Calibri. Для этого в трансформации выполняем поиск Arial — «Заменить все» и вставляем название нового шрифта Calibri.

Как сделать защиту листа и позволить редактировать лишь некоторые реквизиты в выгруженном файле?

Для этого нужно в исходном файле на 1 шаге настроить защиту листа, тогда кодирующие эту операцию теги будут отражены в нашей трансформации.

Примеры исходного кода из статьи можно увидеть в репозитории github.

Данной информации должно быть достаточно, чтобы сделать выгрузку практически любого документа быстро и эффективно.

  • Remove From My Forums
  • Question

  • Hello,

    I have a problem with my Windows 7’s configuration.

    I create a document with Word 2007 and save it with document XML Word Format (.xml)

    in my computer, when i search to open directly (double click) this document, the document is open with my XML editor, and not Microsoft Word

    I verify if my XML document contains <?mso-application progid=»Word.Document»?>, it’s OK,
    fortunately !

    In other computer, in Windows XP SP3, the icon’s file is word icon, despite extension file is .XML, not in my Windows 7 computer !

    In other computer, an XML file without <?mso-application progid=»Word.Document»?> are icon’s file XML, it’s OK

    why, in my computer, the XML preprocessing instruction <?mso-application progid=»Word.Document»?> is not
    interpreted ?

    how it is possible to correct this problem and to obtain icon word when preprocessing instruction <?mso-application progid=»Word.Document»?> is available on my XML file and open file with Word. And obtain XML icon and open XML file in XML
    editor otherwise ? it’s a normaly process in Windows XP…

    Thank you for your help.

Answers

  • Hi christopheNS,

    To open a file in Word by double click, you need to change “Open with” property of *.xml file.

    By the way, this forum is used to discuss Office Development questions such as VBA, VSTO and OpenXML SDK. For Office product related questions, I suggest you
    posting them to
    Microsoft Office Forum.


    <THE CONTENT IS PROVIDED «AS IS» WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to «Mark as Answer» the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    • Edited by

      Thursday, September 19, 2013 9:38 AM

    • Marked as answer by
      George Hua
      Wednesday, September 25, 2013 4:15 PM

«Обработчик Office XML» — это отображаемое имя процесса MSOXMLED.EXE , которое находится на моем компьютере в папке C:Program Files (x86)Common FilesMicrosoft SharedOFFICE15 . Он используется для открытия файлов XML (возможно, также других расширений?) и определить, с какой программой MS Office должен быть связан файл (если есть), и затем открыть файл с этой программой.

Это объясняется в https://stackoverflow.com/a/1569619/1858923:

Поэтому, если дважды щелкнуть файл XML в Проводнике, Windows запустит MSOXMLED.EXE. Это приложение теперь ищет внутри XML-файла и ищет инструкцию обработки XML. Эта инструкция обработки с именем mso-application может указывать ProgId:

<?mso-application progid="Word.Document"?>

Итак, наконец, MSOXMLED.EXE запустит соответствующее приложение Office или запустит приложение XML по умолчанию, указанное в разделе

HKEY_CLASSES_ROOTXEV.GenericAppshellopencommand

Ясно, что я получил сообщение об ошибке, потому что файл, который он пытался открыть, не имел тега mso mso-application , который сообщал бы MSOXMLED.EXE как открыть файл, и у меня нет ключа HKEY_CLASSES_ROOTXEV.GenericAppshellopencommand set, поэтому он не знает, что делать с файлом.

Like this post? Please share to your friends:
  • Mso application progid excel sheet
  • Msn moneycentral investor excel
  • Msn money to excel
  • Msgbox с текстом vba excel
  • Msgbox с выбором vba excel