2015-06-17 102 views
-1

我必須在只讀模式下打開自動化Word文檔。然後,我必須從該文檔中刪除某些特定的頁面,以瞭解用戶在該程序的用戶界面中執行的某些配置。如何操作以只讀模式打開的Word 2013文檔

操作對頁腳和頁眉不起作用,但是這個特殊的代碼不起作用。它打破了錯誤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工作正常。是否有可能以編程方式強制編輯模式,而無需讓用戶定義這些設置?

--- UPDATE ---

原因,使用這種方法:

  • 以只讀模式打開office文檔是必要的,如果多個程序試圖訪問同一文件。否則,單詞會引發一個消息框,試圖澄清誰是允許編輯文檔的人。
  • 其實這個過程在Word中正常工作2010
  • 以只讀模式並不意味着,文檔編輯已被鎖定,它意味着,該文件已在編輯時要使用不同的名稱/位置下保存開完全可能。這種行爲似乎是由2013年的Word
+0

似乎你開始與矛盾 - 開放只讀然後刪除一些頁面?你想要在大局中完成什麼? – rheitzman

+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年測試過它,它似乎工作

+0

其實循環已經從上面的鏈接源中取出,我已經修復了這個行爲,並且按照你的建議做了。工作完美,謝謝! –