2017-08-08 57 views
0

假設我們有以下列表。查找下一個編號項目符號文字

  1. 物品1
  2. 列表項
  3. 列表項
  4. 列表項
  5. 列表項

我有子彈3的範圍內,我想用C#尋找它的下一個子彈。 需要關於此的幫助。

私人範圍ListParaRangeNext(量程範圍) {

 Range forparas = range.Duplicate; 
     ListParagraphs paras = null; 
     if (range.ListFormat.List != null) 
     { 

      paras = range.ListFormat.List.ListParagraphs; 
      //MessageBox.Show(paras.Count.ToString()); 
     } 
     else 
     { 
      forparas.SetRange(range.Start, range.StoryLength - 1); 
      paras = forparas.ListParagraphs; 
     } 
     List<Paragraph> ienum = paras.Cast<Paragraph>().ToList(); 


     //ienum = (from para in ienum 
     //   where para.Range.ListFormat.ListLevelNumber == range.ListFormat.ListLevelNumber 
     //   && para.Range.End > range.Start 
     //   select para).ToList(); 



     List<Paragraph> temp = new List<Paragraph>(); 
     for (int i = 0, length = ienum.Count; i < length; ++i) 
     { 
      if (ienum[i].Range.ListFormat.ListLevelNumber == range.ListFormat.ListLevelNumber && ienum[i].Range.End > range.Start) 
       temp.Add(ienum[i]); 
     } 
     ienum = temp; 
     ienum = ienum.OrderBy(o => o.Range.Start).ToList(); 

     if (ienum.Count > 1) 
     { 
      Range current = ienum[1].Range; 
      if (current.ListFormat.ListValue - 1 == range.ListFormat.ListValue) 
      { 
       return current; 
      } 
     } 
     return null; 
    } 

我使用這個功能找到,但它走我的大部分程序的時間。 有任何優化建議?

+0

對不起,什麼? –

回答

0

你的名單增加是段落的集合/範圍

要跳轉到您使用 Range.Next Unit:=wdParagraph

這是確定爲「下一個項目符號項線性列表「但是列表中散佈着」普通「段落,您需要檢查ListFormat屬性,這將幫助您確定它是否爲列表項目

[編輯]

這裏是一個示例代碼來獲取範圍對象

In VSTO 

Range rng = Globals.ThisAddIn.Application.Selection.Range; 
Range new_rng = rng.Next(WdUnits.wdParagraph); 

In VBA 

Dim rng As Range 
Set rng = Selection.Range 
Dim new_rng As Range 
Set new_rng = rng.Next wdParagraph 

我沒有測試,但它應該工作

+0

我不想跳轉到下一個項目。我只想找出下一個項目。 –

+0

我剛編輯了代碼。 ''Range.Next''方法返回另一個''range''對象 –

+0

非常感謝您的解決方案几乎解決了我的問題,但有什麼方法可以檢查列表是否按字母順序排列? –

0

如果您有字符串列表 - 找到某個成員並獲取它的索引。和下一個項目將指數1

var index = lists.IndexOf(lists.FirstOrDefault(x => x == "222")); 
var next = lists[index + 1];