2010-01-12 2 views
1

Я использую C# и Microsoft.Office.Interop.Word выполнить следующие действияБесшумное обновления документа с использованием interop.word без изменения режима просмотра

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

Это прекрасно работает, если открыт документ, используя этот метод, где FileName имя файла, AddToRecentFile s является ложным, и все остальное Missing.Value

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, обновляю, сохраняю и закрываю документ, то при следующем открытии документа он будет открыт в черновом режиме. Я не хочу, чтобы режим просмотра изменялся при обновлении документа. Если мой документ находился в режиме макета печати до того, как моя программа обработает его, я хочу, чтобы он оставался в режиме макета печати при следующем его открытии.

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

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

ответ

4

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

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 

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

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

+0

Хорошая обратная связь. Я попробовал это, и документ сохранен с выбранным типом вида. Одна проблема: настройка вида вида с помощью опции 2 отображает приложение, что означает, что я мог бы просто открыть его с помощью visible = true. – johgan

+0

Можно ли также узнать тип вида документа перед его открытием? Если я должен сделать резервное копирование исходного вида и восстановить его, когда автоматизация завершена, я не могу открыть документ с помощью visible = false, так как это меняет мой тип представления. – johgan

+0

Я больше не могу воспроизвести ошибочное поведение, вчера это происходило каждый раз, сегодня я не могу заставить его появляться даже один раз. Большое спасибо за полезный ответ, хотя, к сожалению, я не могу отметить ответ как полезный из-за моего уровня репутации, но он был полезен. – johgan

1

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

Смежные вопросы