2013-05-20 149 views
0

我的工具將處理超過1000個文檔。我們在文檔級別設置了Readonly,導致嚴重的性能問題。
_appObject = new Microsoft.Office.Interop.Word.Application(); Microsoft.Office.Interop.Word.Document _DocObj; string file = @「c:\ Users \ Public \ Public Documents \ Word12.docx」;
_DocObj = _appObject.Documents.Open(參考文件,REF缺失,REF缺失,REF缺失,
REF缺失,REF缺失,REF缺失,REF缺失,REF缺失,REF缺失,裁判
缺失,REF缺失,裁判失蹤,裁判失蹤,裁判失蹤); // protect
appObject.ActiveDocument.Protect(Microsoft.Office.Interop.Word.WdProtectionType .wdAllowOnly Reading,ref noReset,ref password,ref useIRM,ref enforceStyleLock);C#以段落或範圍級別只讀保護word文檔

但我想使段落或範圍爲只讀

foreach (Microsoft.Office.Interop.Word.Paragraph aPar in 
        _appObject.ActiveDocument.Paragraphs) 
{ 
Microsoft.Office.Interop.Word.Range parRng = aPar.Range; 
string sText = parRng.Text; 
// I want to make readonly here 
} 

那麼文檔將得到保存。

_DocObj.SaveAs(FileName: TargetDir, FileFormat: WdSaveFormat.wdFormatDocumentDefault); 
      object saveChanges = WdSaveOptions.wdSaveChanges; 
      object originalFormat = WdOriginalFormat.wdOriginalDocumentFormat; 
      object routeDocument = true; 
      islockStatus = true; 
var doc_close = (Microsoft.Office.Interop.Word._Document)_DocObj; 
doc_close.Close(ref saveChanges, ref originalFormat, ref routeDocument); 

因此,要求是這樣的,以使字文件(特別是標題或段落或alteast範圍)

回答

0

的一部分。如果你有Range對象,則可以使用Editors構件來訪問列表允許編輯該範圍的用戶。

對於您的情況,您希望啓用「everyone」來編輯整個文檔,然後刪除編輯特定段落的權限。

在VBA中,這將是這個樣子(我相信你能翻譯這對C#):

' Allow access to the entire doc 
ActiveDocument.Content.Editors.Add wdEditorEveryone 

' Remove access to paragraph 1 
ActiveDocument.Content.Paragraphs(1).Editors(wdEditorEveryone).Delete