我必须在只读模式下打开Word文档以实现自动化。然后我必须删除该文档中的某些页面,关于用户在程序用户界面中执行的某些配置。
操作适用于页脚和标题,但此特定代码不起作用。它出现错误 System.Runtime.InteropServices.COMException(0x800A11FD):此方法或属性不可用,因为此命令无法读取。执行此代码时:
int num = objWordDoc.ComputeStatistics(stat, ref missing);
int[] a = { 1,3,5};
for (int i = 0; i < a.Length; i++)
{
object page_num = a[i];
objWordDoc.Application.Selection.GoTo(Word.WdGoToItem.wdGoToPage,
Word.WdGoToDirection.wdGoToAbsolute, num, page_num);
objWordDoc.Application.Selection.Bookmarks[@"\Page"].Select();
objWordDoc.Application.Selection.Delete();
}
在调用Selection.Goto的行中。此代码取自How to delete pages in a word document dynamically。
当用户遵循http://myitforum.com/myitforumwp/2013/06/10/disable-reading-mode-and-protected-view-in-word-2013/中描述的过程时,使用该文档确实有效。主要是必须禁用设置: 禁用阅读视图。转到文件 - 选项 - 常规。取消选中“在阅读视图中打开电子邮件附件和其他不可编辑的文件”
这似乎只适用于Word 2013,因为Word 2010正常运行。是否可以以编程方式强制编辑模式而无需让用户定义这些设置?
---更新---
使用此方法的原因:
答案 0 :(得分:0)
为了关闭ReadingMode,您需要将其放在代码的开头Globals.ThisAddIn.Application.Options.AllowReadingMode = false;
由于循环的方向,您可能会收到错误。删除后,您的第一页是第1页,然后第2页变为第1页等
如果你反过来并先删除最后一页,那么它将删除正确的页面。
public void TestCallBack1(Office.IRibbonControl control)
{
Globals.ThisAddIn.Application.Options.AllowReadingMode = false;
//"S:\Test doc.docx"
Word.Document doc = Globals.ThisAddIn.Application.Documents.Open("S:\\Test doc.docx",Type.Missing,true);
int num = doc.ComputeStatistics(Word.WdStatistic.wdStatisticPages, Type.Missing);
int[] a = { 5, 3, 1 };
for (int i = 0; i < a.Length; i++)
{
object page_num = a[i];
Globals.ThisAddIn.Application.Selection.GoTo(Word.WdGoToItem.wdGoToPage, Word.WdGoToDirection.wdGoToAbsolute, num, page_num);
Globals.ThisAddIn.Application.Selection.Bookmarks[@"\Page"].Select();
Globals.ThisAddIn.Application.Selection.Delete();
}
Globals.ThisAddIn.Application.Options.AllowReadingMode = true;
}
希望这会有所帮助。我上面的示例来自应用程序级别的插件。我在2013年对它进行了测试,似乎可以正常工作