Автоматическое обновление документа с использованием interop.word без изменения режима просмотра. - PullRequest
1 голос
/ 12 января 2010

Я использую C # и Microsoft.Office.Interop.Word для выполнения следующих действий

  1. Открыть документ
  2. Обновить содержимое документа
  3. Сохраните и закройте документ

Это прекрасно работает, если документ открывается с использованием этого метода, где FileName является именем файла, AddToRecentFiles имеет значение false, а все остальное отсутствует. Значение

Document Open(
 [In] ref object FileName, 
 [In, Optional] ref object ConfirmConversions, 
 [In, Optional] ref object ReadOnly, 
 [In, Optional] ref object AddToRecentFiles, 
 [In, Optional] ref object PasswordDocument, 
 [In, Optional] ref object PasswordTemplate, 
 [In, Optional] ref object Revert, 
 [In, Optional] ref object WritePasswordDocument, 
 [In, Optional] ref object WritePasswordTemplate, 
 [In, Optional] ref object Format, 
 [In, Optional] ref object Encoding, 
 [In, Optional] ref object Visible, 
 [In, Optional] ref object OpenAndRepair, 
 [In, Optional] ref object DocumentDirection, 
 [In, Optional] ref object NoEncodingDialog, 
 [In, Optional] ref object XMLTransform
);

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

Однако если я установлю для Visible значение false, обновлю, сохраню и закрою документ, то при следующем открытии документа он будет открыт в черновом режиме. Я не хочу менять режим просмотра при обновлении документа. Если мой документ находился в режиме Print Layout до того, как моя программа обработала его, я хочу, чтобы он оставался в режиме Print Layout при следующем открытии.

Где я сейчас нахожусь, у меня есть два варианта:
Откройте документ с помощью visible = true и сохраните режим просмотра.
Откройте документ с помощью visible = false и всегда устанавливайте режим просмотра на черновик.

Есть ли у кого-нибудь третий вариант для меня, который позволяет мне обновлять содержимое документа, не отображая пользователю слово приложение?

Ответы [ 2 ]

4 голосов
/ 12 января 2010

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

using Word = Microsoft.Office.Interop.Word;

// Option 1: via Application object
Word.Application app = new Word.Application();
app.ActiveWindow.ActivePane.View.Type = Word.WdViewType.wdPrintView;

// Option 2: via Document object
Word.Document doc;
object objOne = 1;
doc.Windows.get_Item(ref objOne).View.Type = Word.WdViewType.wdPrintView;

VBA эквивалент:

ActiveDocument.Windows(1).View = wdPrintView

Рекомендуется сделать резервную копию исходного представления, а затем восстановить его, когда вы закончите с задачей автоматизации.

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

1 голос
/ 18 января 2010

Еще немного поигрался с параметрами и оказалось, что используя Visible=Missing.Value вместо true или false позволило бы мне обработать документ без вывода сообщений и не изменить тип представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...