Для моего решения VSTO Word мне нужно программно"сравнить" два документа бок о бок.Другими словами, мне нужно из кода выполнить эквивалент нажатия кнопки Вид> Показать рядом .
Я пытался использовать метод CompareSideBySideWith после загрузкидва документа.Выдается исключение: «Запрашиваемый элемент коллекции не существует».Я не первый, кто сталкивается с этим;см. ответы Microsoft (шаблонный, не особо полезный) в этой теме .Репутация MS закончила тем, что почесала голову и сдалась.
Я даже попытался открыть два чистых документа и сравнить их.На этот раз не исключение, но сравнение не произошло, и CompareSideBySideWith () вернул false.
Document doc1 = this.word.Documents.Add(ref missing, ref missing, ref missing, ref missing);
object doc2 = this.word.Documents.Add(ref missing, ref missing, ref missing, ref missing);
doc1.Windows.CompareSideBySideWith(ref doc2);
Кто-нибудь нашел обходной путь для этого?Кажется, довольно простой элемент функциональности - иметь собственное решение.
Примечание. Нам нужно вызывать фактическое сравнение "Side by Side", а не просто упорядочивать окна с помощью Windows.Arrange ().Это отчасти потому, что наша лента содержит псевдоним для кнопки «Просмотр рядом», который не будет включен (нажат), пока не будет успешно вызвана действительная команда «Рядом».
Обновление : исключение все еще было сгенерировано в приведенном выше примере с двумя новыми документами;Word проглотил исключение, потому что я попробовал его за пределами моего блока try-catch.
В соответствии с нижеприведенным отаку я попытался вызвать doc2.Windows.Compare (ref doc1), и это работало как для пустых документов, так и для тестовых документов.сохранены как .docx и .rtf из Word 2007.
Однако нам нужно сравнить документы, сохраненные в формате RTF, из другого редактора RTF.Когда я загружаю один из наших документов, он не работает.Чтобы воспроизвести мою ошибку, попробуйте загрузить документы RTF, сохраненные из WordPad - они тоже не работают.Я попытался изменить параметры Encoding и Format для Documents.Open (), но безрезультатно.Было бы неплохо избежать преобразования и сохранения временного файла в формате .docx, особенно для больших документов!Также обратите внимание, что я могу нажать «Просмотр рядом» после открытия файлов RTF, сохраненных в WordPad вручную, и это работает.
Кроме того, кажется, что имеет значение только, в каком формате сравнивать документ (документ, передаваемый в качестве параметра вWindows.CompareSideBySideWith () находится в. Например, если мы делаем doc2.Windows.CompareSideBySideWith (ref doc1), как в примере Otaku, он работает, когда doc1 является обычным docx, но не когда это RTF, сохраненный из WordPad. (Независимо ототкуда пришел doc2).
Обновление 2: Как обычно, одна строка кода разрешает несколько дней погони за хвостом:
doc1.Convert(); // Updates the document to the newest object model (i.e. DOCX)
Может теперьсравнивайте бок о бок без проблем.