使用interop.word静默更新文档,而无需更改查看模式

joh*_*gan 1 c# interop ms-word

我正在使用C#和Microsoft.Office.Interop.Word执行以下操作

  1. 开启文件
  2. 更新文件内容
  3. 保存并关闭文档

如果使用此方法打开文档(其中FileName是文件名,AddToRecentFiles为false且所有其他均为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
);
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我希望处理过程保持沉默,也就是说,我不想向用户显示该应用程序。通过将Visible设置为false可以轻松完成此操作。

但是,如果将Visible设置为false,则更新,保存并关闭文档,那么下次打开文档时,它将以草稿模式打开。我不希望在更新文档时更改视图模式。如果我的文档在程序处理之前处于“打印布局”模式,那么我希望下次打开它时,它保持在“打印布局”模式。

我现在的位置有两个选择:
使用visible = true打开文档并保持查看模式。
使用visible = false打开文档,并始终将视图模式设置为草稿。

有人对我有第三选择,这个选择使我可以在不向用户显示单词application的情况下更新文档的内容?

Dir*_*mar 5

您可以从代码切换回打印布局视图:

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;
Run Code Online (Sandbox Code Playgroud)

相当于VBA:

ActiveDocument.Windows(1).View = wdPrintView
Run Code Online (Sandbox Code Playgroud)

最佳实践是备份原始视图,然后在完成自动化任务后将其还原。

您没有显示代码,所以我们不知道您所做的确切修改。但是,某些自动化任务(如修改页眉/页脚)可能需要特定的视图。