none
Word AddIn, práce s podsvíceným textem, C#

    Dotaz

  • Čau, mám takovej menší problém. Potřebuju ve wordovském dokumentu najít a postupně pracovat se slovy, která jsou podsvícená, ale neznám jejich text. To znamená, že jsem si vytvořil objekt Range, který obsahuje kolekci slov - Words a některá slova mají nastavenou vlastnost HighlightColorIndex na nějakou hodnotu. Vím, jak slova procházet cyklem a vybrat jen ta, která jsou podsvícena tou barvou, kterou potřebuji, ale to je moc pomalé.

    Nemáte náhodou někdo zkušenost, jak nastavit parametry metod Range.Find.Execute(), nebo Range.Find.HitHighlight() tak, aby hledaly pouze podsvícená slova, resp slova podsvícená jendou určitou barvou?

    Případně nějaký jiný nápad jak můj problém řešit.....?

    Za jakoukoliv snahu předem dík :)

    1. dubna 2010 12:28

Odpovědi

  • Ahoj, díky všem za snahu a pomoc. Nakonec jsem na to přišel. Pro ty, které to zajímá nebo by to mohli potřebovat, to může vypadat třeba takhle:

     

      //vytvori objekt Doc s odkazem na aktualni dokument wordu 
      Microsoft.Office.Interop.Word.Document Doc = Globals.ThisAddIn.Application.ActiveDocument;
      object start = Doc.Content.Start;
      object stop = Doc.Content.End;
    
      //vybere vsechen text v aktualnim dokumentu jako jeden usek
      Range pom = Doc.Range(ref start, ref stop);
    
      //nastaveni parametru pro hledani v textu
      pom.Find.Highlight = 1; //hledana oblast bude nejak podsvicena (najde vsechny barvy)
      object TextToFind = ""; //prazdny retezec znamena hledani stylu  
      object NoValue = System.Reflection.Missing.Value;
    
      while (true)
      {
          //nastaveni metody Execute, jen prvni parametr
          bool exist = pom.Find.Execute(ref TextToFind, ref NoValue, ref NoValue, ref NoValue, ref NoValue,
          ref NoValue, ref NoValue, ref NoValue, ref NoValue, ref NoValue, ref NoValue, ref NoValue,
          ref NoValue, ref NoValue, ref NoValue);
    
          //zde je nejvetsi "figl", po spusteni metody Execute je vlastnost pom.Text naplnena
          //textem podsvicene oblasti (pokud nejaka v dokumentu existuje)        
    
          if (exist == false) break; // neexistuje podsvicena oblast - konec hledani
      
          //pokud je oblast podsvicena barvou, kterou potrebuji
    
          if (pom.HighlightColorIndex == WdColorIndex.wdYellow; 
          {                
              pom.Text = ""; //tady provedu upravy (treba mazani textu)
          }
      }
    
    
    
    

    • Označen jako odpověď kejmlik 6. dubna 2010 7:06
    6. dubna 2010 7:06

Všechny reakce

  • Cau,

    velmi ti nepomozem, pretoze som este nikdy nerobil addin do Wordu. Skus sa pozriet na toto: http://msdn.microsoft.com/en-us/library/bb226067.aspx

    2. dubna 2010 9:42
  • Cau,

    velmi ti nepomozem, pretoze som este nikdy nerobil addin do Wordu. Skus sa pozriet na toto: http://msdn.microsoft.com/en-us/library/bb226067.aspx

    2. dubna 2010 9:43
  • Ahoj, díky všem za snahu a pomoc. Nakonec jsem na to přišel. Pro ty, které to zajímá nebo by to mohli potřebovat, to může vypadat třeba takhle:

     

      //vytvori objekt Doc s odkazem na aktualni dokument wordu 
      Microsoft.Office.Interop.Word.Document Doc = Globals.ThisAddIn.Application.ActiveDocument;
      object start = Doc.Content.Start;
      object stop = Doc.Content.End;
    
      //vybere vsechen text v aktualnim dokumentu jako jeden usek
      Range pom = Doc.Range(ref start, ref stop);
    
      //nastaveni parametru pro hledani v textu
      pom.Find.Highlight = 1; //hledana oblast bude nejak podsvicena (najde vsechny barvy)
      object TextToFind = ""; //prazdny retezec znamena hledani stylu  
      object NoValue = System.Reflection.Missing.Value;
    
      while (true)
      {
          //nastaveni metody Execute, jen prvni parametr
          bool exist = pom.Find.Execute(ref TextToFind, ref NoValue, ref NoValue, ref NoValue, ref NoValue,
          ref NoValue, ref NoValue, ref NoValue, ref NoValue, ref NoValue, ref NoValue, ref NoValue,
          ref NoValue, ref NoValue, ref NoValue);
    
          //zde je nejvetsi "figl", po spusteni metody Execute je vlastnost pom.Text naplnena
          //textem podsvicene oblasti (pokud nejaka v dokumentu existuje)        
    
          if (exist == false) break; // neexistuje podsvicena oblast - konec hledani
      
          //pokud je oblast podsvicena barvou, kterou potrebuji
    
          if (pom.HighlightColorIndex == WdColorIndex.wdYellow; 
          {                
              pom.Text = ""; //tady provedu upravy (treba mazani textu)
          }
      }
    
    
    
    

    • Označen jako odpověď kejmlik 6. dubna 2010 7:06
    6. dubna 2010 7:06