2011-10-10 22 views
2

我很高興編寫一些在Office XP環境中移動的代碼。我已經引用了OfficeXP Interop程序集並將代碼寫入搜索/替換內容。這工作正常。現在我需要在書籤周圍刪除文本,並且不斷收到引發我的異常。Word Interop刪除錯誤參數的結果

下面是一些代碼:

  object units = WdUnits.wdLine; 
      object lines = 2; 
      object extend = WdMovementType.wdExtend; 

      object bookmarkName = "Bank1"; 
      var bm = doc.Bookmarks; 
      var bm1 = doc.Bookmarks.get_Item(bookmarkName); 
      var ra = bm1.Range; 

      ra.Delete(ref units, ref lines); 

最後一行是我得到一個「錯誤的參數」異常。在MSDN中查看定義我認爲我是對的。但顯然我不是。希望你們能幫助我。

更新:好的,我明白了。在Range對象上使用Delete方法我只能使用wdWord作爲參數。我現在想改變我的問題:我想要做的是從書籤中刪除兩行。我將如何做到這一點?

+0

確定你想要刪除行而不是段落?行內容很大程度上取決於文檔的格式和列寬,段落不是。 –

+0

嗯,問題是我必須儘可能少的改變(和工作)來遷移一些舊的VB6代碼。 – BigBlackDog

回答

0

Word中的範圍對象不是「面向行的」,它們不允許行操作,只允許段落操作。但是,選擇允許行操作。當前選擇不是單詞文檔的屬性,而是單詞應用程序對象的屬性。下面是一些VBA代碼,確實基本上是你嘗試一下,我覺得你可以方便地移植到這個C#:

Dim rng As Range 
Dim doc As Document 
Set doc = ActiveDocument 
Set rng = doc.Bookmarks("BM").Range 

Dim s As Long, e As Long 
rng.Select 
s = Application.Selection.Start 
e = Application.Selection.Next(wdLine, 1).End 

Application.Selection.SetRange s, e 
Application.Selection.Delete 
0

好吧,我發現了一個辦法做我必須做的。這裏是代碼:

  if (doc.Bookmarks.Exists("Bank1")) 
      { 
       object bookmarkName = "Bank1"; 
       object units = WdUnits.wdLine; 
       object lines = 2; 
       object extend = WdMovementType.wdExtend; 
       doc.Bookmarks.get_Item(bookmarkName).Select(); 

       app.Selection.MoveDown(units, lines, extend); 
       app.Selection.Delete(); 
      }