Forumi
Home Pravila i pomoć Članovi Kalendar Današnji postovi


Povratak   PC Ekspert Forum > Računala > Software > Web dizajn, programiranje i ostalo
Ime
Lozinka

Odgovori
 
Uređivanje
Staro 02.07.2011., 12:57   #1
MicroHard
Registered User
 
Datum registracije: Aug 2004
Lokacija: Velika Gorica
Postovi: 41
C# - Pisanje u word - izmjena parametara sa tekstom u wordu

Imam problem,

u wordu imam zapisane parametre npr. [Ime], [Prezime], [Tekst]...sa c# (aplikacijom), otvaram taj file te trazim odnosno radim replace [Ime] sa varijablom imena, [Prezime] sa varijablom prezimena...sve to radi dok ne dodem do [Tekst]. Ukoliko varijabla Tekst iznosi vise od 255 charaktera, baca mi exception string is to long. Kako je to najednostavnije izbijec? Vise neznam kaj da napravim. U prilogu je dio koda na koji nacin to radim. Hvala svakome na pomoci.

Code:
 
          Word.Application word = new Word.Application();
          Word.Document doc = new Word.Document();
          object missing = System.Type.Missing;

          try
          {
              object fileName = @PutanjaGenerickihDatoteka + ImeFilea;

              doc = word.Documents.Open(ref fileName,
                  ref missing, ref missing, ref missing, ref missing,
                  ref missing, ref missing, ref missing, ref missing,
                  ref missing, ref missing, ref missing, ref missing,
                  ref missing, ref missing, ref missing);

              doc.Activate();
              

              string[] test= {          Ime,     Prezime,     Tekst};
               string[] parametri = { "[Ime]", "[Prezime]", "[Tekst]"};
              
              // Provjeravaj svaki parametar
              foreach (string Parametri in parametri)
              {

                  foreach (Word.Range tmpRange in doc.StoryRanges)
                  {
                      tmpRange.Find.Text = Parametri;
                      tmpRange.Find.Replacement.Text = test[i];
                      tmpRange.Find.Text = test[i];
                      i++;

                      tmpRange.Find.Wrap = Word.WdFindWrap.wdFindContinue;

                      object replaceAll = Word.WdReplace.wdReplaceAll;
                      

                     

                      tmpRange.Find.Execute(ref missing, ref missing, ref missing,
                          ref missing, ref missing, ref missing, ref missing,
                          ref missing, ref missing, ref missing, ref replaceAll,
                          ref missing, ref missing, ref missing, ref missing);
                  }
              }

              doc.SaveAs(@PutanjaObrazac + @GenerirajDatoteku() + FileCounter() + " - " +ImeFilea);


              doc.Close(ref missing, ref missing, ref missing);
              word.Application.Quit(ref missing, ref missing, ref missing);
          }
          catch (Exception ex)
          {
              
              doc.Close(ref missing, ref missing, ref missing);
              word.Application.Quit(ref missing, ref missing, ref missing);
              MessageBox.Show(ex.ToString());
          }
exception mi baca na sljedecem dijelu koda: tmpRange.Find.Replacement.Text = test[i];

Hvala
__________________
MicroH@rd
MicroHard je offline   Reply With Quote
Staro 02.07.2011., 13:16   #2
Den@
Premium
Moj komp
 
Datum registracije: Feb 2011
Lokacija: Split
Postovi: 262
tmpRange.Find.Text = "<" + objAttributeValue.AttributeTags[i] + ">";
tmpRange.Find.Replacement.Text = objAttributeValue.AttributeValues[i];
Den@ je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Staro 02.07.2011., 13:16   #3
Overclock
Premium
Moj komp
 
Overclock's Avatar
 
Datum registracije: Mar 2009
Lokacija: Zagorje
Postovi: 1,001
Ovaj kod mi je cudan jer ne radim s tim pa ti ne mogu reci za konkretni primjer ali:

Probaj definirati ili prebaciti tu varijablu [Tekst] koja je string, u polje (ToCharArray), samo je zajeb to kaj vise polje nemres vratiti u string jednostavnom naredbom (ona postoji al u 95% slucajeva ne radi ili radi krivo). A kod polja je jedini limit memorija, tak da 255+ znakova ne predstavlja problem.
Overclock je offline   Reply With Quote
Staro 02.07.2011., 13:24   #4
MicroHard
Registered User
 
Datum registracije: Aug 2004
Lokacija: Velika Gorica
Postovi: 41
Citiraj:
Autor Overclock Pregled postova
Ovaj kod mi je cudan jer ne radim s tim pa ti ne mogu reci za konkretni primjer ali:

Probaj definirati ili prebaciti tu varijablu [Tekst] koja je string, u polje (ToCharArray), samo je zajeb to kaj vise polje nemres vratiti u string jednostavnom naredbom (ona postoji al u 95% slucajeva ne radi ili radi krivo). A kod polja je jedini limit memorija, tak da 255+ znakova ne predstavlja problem.

Slazem se, ali predstavlja mi problem sto tmpRange.Find.Replacement.Text poprima samo string i ja nemogu u string ugurat vise od 255 charactera ili se varam?
__________________
MicroH@rd
MicroHard je offline   Reply With Quote
Staro 02.07.2011., 13:41   #5
Overclock
Premium
Moj komp
 
Overclock's Avatar
 
Datum registracije: Mar 2009
Lokacija: Zagorje
Postovi: 1,001
Citiraj:
Autor MicroHard Pregled postova
Slazem se, ali predstavlja mi problem sto tmpRange.Find.Replacement.Text poprima samo string i ja nemogu u string ugurat vise od 255 charactera ili se varam?
Ne bih znao, najbolje bi bilo da probas, ja sam svaki put rucno radil find & replace kad mi je trebalo, sa usporedbom stringova ili sibal sve u polja pa usporedjivanje znak po znak.
Overclock je offline   Reply With Quote
Staro 02.07.2011., 13:45   #6
MicroHard
Registered User
 
Datum registracije: Aug 2004
Lokacija: Velika Gorica
Postovi: 41
Citiraj:
Autor Overclock Pregled postova
Ne bih znao, najbolje bi bilo da probas, ja sam svaki put rucno radil find & replace kad mi je trebalo, sa usporedbom stringova ili sibal sve u polja pa usporedjivanje znak po znak.
shvacam...ovaj kod radi super, sve dok ne prode Tekst koji mjenja [Tekst] preko 255 char, onda se javlja greska, a u libaryu od Worda je .text postavljeno kao string...

A da idem opet rucno radit find & replace opet bi mi se to desilo ako se ne varam?

Mislim da mi je najbolje rijesenje ukoliko je test.lenght veci od 255 razdvojit na dijelove, znaci dijeljeno sa 255 i onda ih samo joinat kasnije kako pise...

....uglavnom informacija word sam po sebi neda da se u polje REPLEACE unese vise od 255 karaktera....
__________________
MicroH@rd

Zadnje izmijenjeno od: MicroHard. 02.07.2011. u 13:59.
MicroHard je offline   Reply With Quote
Staro 02.07.2011., 14:20   #7
Overclock
Premium
Moj komp
 
Overclock's Avatar
 
Datum registracije: Mar 2009
Lokacija: Zagorje
Postovi: 1,001
Nikad nisam pratio kolko znakova ima u stringovima ali se dam kladiti da je bilo vecih od 255 znakova i da je sve funkcioniralo.

Ako podjelis tekst na blokove po 255 znakova, sjebat ces replace koji se nalazi na njihovoj granici, moze se desiti da pola rijeci koju trazis bude u jednom bloku a pola u drugom. Pravilni algoritam bi bio da uzmes od prvog znaka 255 znakova, pa od drugog 255 i tako do kraja sve provjeravati.

Znaci najbolje(bar ja tako mislim) bi bilo rucno sklepat: kompletan text prebaciti u string, tekst pretrage u drugi string pa koristiti contains ili nesto drugo sto trazi string u stringu. A kad ga nadje da selektira i promjeni selektirano pa nastavi dalje do kraja.
Overclock je offline   Reply With Quote
Staro 02.07.2011., 14:25   #8
MicroHard
Registered User
 
Datum registracije: Aug 2004
Lokacija: Velika Gorica
Postovi: 41
Citiraj:
Autor Overclock Pregled postova
Nikad nisam pratio kolko znakova ima u stringovima ali se dam kladiti da je bilo vecih od 255 znakova i da je sve funkcioniralo.

Ako podjelis tekst na blokove po 255 znakova, sjebat ces replace koji se nalazi na njihovoj granici, moze se desiti da pola rijeci koju trazis bude u jednom bloku a pola u drugom. Pravilni algoritam bi bio da uzmes od prvog znaka 255 znakova, pa od drugog 255 i tako do kraja sve provjeravati.

Znaci najbolje(bar ja tako mislim) bi bilo rucno sklepat: kompletan text prebaciti u string, tekst pretrage u drugi string pa koristiti contains ili nesto drugo sto trazi string u stringu. A kad ga nadje da selektira i promjeni selektirano pa nastavi dalje do kraja.
slazem se, imam u planu napravit sljedece da ako je tekst duzi od 255 karaktera da on oduzme 8 karaktera te da ubaci tu [Tekst1] pa dalje [Tekst2] a u foreach petlji su trazit i mjenjat, tako da necu gubit redosljed...
__________________
MicroH@rd
MicroHard je offline   Reply With Quote
Staro 02.07.2011., 14:41   #9
Overclock
Premium
Moj komp
 
Overclock's Avatar
 
Datum registracije: Mar 2009
Lokacija: Zagorje
Postovi: 1,001
Tak nesto bi trebalo sljakati, nije mi sintaksa C# u malom prstu jer uglavnom koristim C++, al po googlu stima i neke teze logicke greske ne bi trebalo biti.
Overclock je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Odgovori



Pravila postanja
Vi ne možete otvarati nove teme
Vi ne možete pisati odgovore
Vi ne možete uploadati priloge
Vi ne možete uređivati svoje poruke

BB code je Uključeno
Smajlići su Uključeno
[IMG] kod je Uključeno
HTML je Isključeno

Idi na