2015-02-25 5 views
0

В моем приложении C# Winforms у меня есть элемент управления WebBrowser, в котором я хочу показать документ Word. Я показываю документ, вызывая webBrowser1.Navigate(myDocName).Как открыть документ Word 2013 в элементе управления WebBrowser на C# Winform?

Это прекрасно работает для документов через Word 2003.

Для Word 2007 и 2010 годах, это вызвало слово, чтобы открыть документ в новом созданном экземпляре Word, а не на Winform, содержащий WebBrowser. Я был в состоянии исправить это, добавив следующие записи реестра на клиентской машине (обратите внимание, что это может быть сделано для Excel, а также - значение для записи является (int)0x80000A00, а классы \Excel.Sheet вместо \Word.Document):

int wordFlagValue = (int)0x80000024; 

Common.SaveToRegistryLocalMachine(@"SOFTWARE\Classes\Word.Document.8", "BrowserFlags", wordFlagValue); 

Common.SaveToRegistryLocalMachine(@"SOFTWARE\Classes\Word.Document.12", "BrowserFlags", wordFlagValue); 

Примечание: Common.SaveToRegistryLocalMachine() это просто функция упаковщик написать запись реестра в HKEY_LOCAL_MACHINE

проблема заключается в том, что некоторые клиенты теперь имеют Слово 2013 установлен, и новая проблема экземпляра Слово снова появился. Я попытался добавить следующие записи реестра (чтобы отразить новые версии Word), но никакого эффекта:

Common.SaveToRegistryLocalMachine(@"SOFTWARE\Classes\Word.Document.14", "BrowserFlags", wordFlagValue); 
Common.SaveToRegistryLocalMachine(@"SOFTWARE\Classes\Word.Document.15", "BrowserFlags", wordFlagValue); 

Любые идеи о том, как обойти эту проблему?

+0

Нет Word 2005 или Word 2008. – Dai

+0

Исправленные годы – qwerty13579

+0

Если бы мне пришлось это решить, я бы использовал что-то вроде [Aspose.Words] (http://www.aspose.com/.net/word-component .aspx) (стоит определенная сумма!), чтобы сделать документ Word на изображения и отобразить изображения в элементе управления изображением или аналогичным. –

ответ

3

(Отказ от ответственности: В то время как я работаю в Microsoft и Internet Explorer, у меня нет специальных знаний в этой области)

Я считаю, что проблема в том, что Офис 2013 не-больше поддерживает не приютили Internet Explorer [править !]. Это связано с множеством причин, но я думаю, потому что видение, которое мы (как компания), проведенное для OLE и COM, никогда не было разработано, и обычно представляет собой плохой пользовательский опыт (помните, как пытаться редактировать встроенную электронную таблицу Excel в Документ Word после изменения размера?).

Я помню, что Office 2003 поддерживал размещение других процессов (таких как Internet Explorer и даже Visual Studio 6.0), но с Office 2007 я считаю, что они отключили эту функциональность по умолчанию, и вам пришлось перепрыгнуть через обручи, чтобы получить ее работа, а затем они полностью отключили его в 2013 году. Я думаю,, не считайте это авторитетной информацией!

Если я ошибаюсь (возможно, это может быть очень хорошо), проблема может заключаться в том, что у вас есть 64-разрядный процесс (например, AnyCPU в .NET на ОС x64), но 32-разрядная версия Office установлена, вы не можете смешивать 32-битные и 64-битные двоичные файлы в одном и том же процессе, поэтому вполне возможно, что это сработает, но в этом не получится, потому что это неправильная ISA.

+0

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

+0

@ qwerty13579 Я сочувствую, однако я не согласен с тем, что изменение было сделано «без уважительной причины». Я уже упоминал аспекты удобства использования и платформы в качестве основы для такого решения. Разработчики и системные интеграторы обязаны тестировать новые версии программного обеспечения (например, Office) перед их развертыванием, чтобы выявить такие проблемы (и разработать для них альтернативные решения) до того, как пользователи сделают это. – Dai

+1

Dai - как разработчик, я не контролирую, когда пользователь обновляет свою версию Office, а затем его программное обеспечение перестает работать. Основной арендатор совместимости не отнимает функциональность, и для чего обычно используется эта функциональность (просто отображая документ Office для пользователя), не было проблем с удобством использования – qwerty13579