Ole Office Automation Word Replace di una stringa [Delphi]

Visto che gli oggetti ole per poter manipolare materiale microsoft (che schifo) non sono molto intuitivi posto qui il codice una funzione che effettua un replace di una stringa in un documento word… per fare sta cavolata sara’ che non trovavo nulla con google, ma ci ho perso del tempo 🙁

procedure TForm1.Button3Click(Sender: TObject);

var

  WordApp: Variant;

begin

  WordApp:=CreateOLEObject('Word.Application');

  WordApp.Documents.Open('c:test.doc');

  WordApp.Selection.Find.ClearFormatting;

  WordApp.Selection.Find.Text := 'croce';

  WordApp.Selection.Find.Replacement.Text := 'testa';

  WordApp.Selection.Find.Forward := True;

  WordApp.Selection.Find.MatchAllWordForms := False;

  WordApp.Selection.Find.MatchCase := False;

  WordApp.Selection.Find.MatchWildcards := False;

  WordApp.Selection.Find.MatchSoundsLike := False;

  WordApp.Selection.Find.MatchWholeWord := False;

  WordApp.Selection.Find.MatchFuzzy := False;

  WordApp.Selection.Find.Wrap := wdFindContinue;

  WordApp.Selection.Find.Format := False;

  WordApp.Selection.Find.Execute(Replace := wdReplaceAll);

  //WordApp.Selection.Find.Execute(wdReplaceAll);

  WordApp.Visible:=True;

  //WordApp.Documents.Save('c:nuovo.doc');

  WordApp.ActiveDocument.SaveAs('c:nuovo.doc');

end;

L’ambiente di sviluppo non mi e’ stato d’aiuto in quanto il ctrl+spazio non elenca ne metodi ne funzioni!!!!
Questa funzione apre un file esistente in c:\ che si chiama test.doc e sostituisce la stringa ‘croce’ con ‘testa’ tutte le volte che la incontra in tutto il documento.Poi lo visualizza e lo salva in un file che crea lui che si chiama nuovo.doc sempre in c:

Fonti:

http://www.delphi3000.com/articles/article_3728.asp?SK=

L'articolo ti è stato utile?

Condividilo sulla tua rete di contatti Twitter, sulla tua bacheca su Facebook. Diffondere contenuti che trovi rilevanti aiuta questo blog a crescere. Grazie!

4 thoughts on “Ole Office Automation Word Replace di una stringa [Delphi]

  1. Enrico

    Hi. This code runs in a interactive environment. I wrote a program (winservice) that opens and prints documents using Word OLE server, but it runs only in a Windows XP or Windows 2003 environment. In Windows 2008 or WinVista my program starts, but when it tries to use Word OLE methos it doesn’t work. For example, the method Application.Documents.Open(“mydoc.doc”) doesn’t return any error, but the document isn’t open, so I can’t print it.

    Can anyone help me?.

    Thank’s in advance.

    Enrico

  2. Enrico

    Scusate non mi ero accorto subito che il forum è in italiano… no comment!
    Visto anche il mio inglese maccheronico ri-posto il tutto.

    Come provavo a dire, ho un servizio scritto in Delphi che, utilizzando Word via OLEObject, apre dei documenti RTF e li stampa. Ora, il tutto è andato a gonfie vele fino a quando sono nati Vista e il suo server Windows 2008.

    Pare che Microsoft ha rivoluzionato la gestione del desktop 0 (o ring 0 o strato service come vogliamo chiamarlo) e questo porta al problema che descrivo.

    Premetto che il servizio gira con un utente specifico che ha autorizzazioni Administrators. L’applicazione apre correttamente Word, ma quando cerco di aprire il documento con Documents.Open(“nomefile”) non torna alcun errore. Posto giusto due righe di codice:

    w := CreateOleObject(‘word.application’);
    w.Options.PrintBackground := false;
    wdoc := w.Documents.Open(‘c:\tmp\pippo.rtf’);

    wdoc rimane sempre nil!

    Questo, naturalmente, porta ad una NON apertura del documento e ad una serie di errori.

    Sapete darmi una mano?

    Grazie mille per l’aiuto!!

    Enrico

  3. Evilripper

    Son quasi 2 anni che non uso piu’ delphi… credo che lentamente sia destinato scomparire lasciando posto a c# o java.

    Comunque a parte questo io non ne ho idea di come risolvere la cosa che hai chiesto l’unica e’ rivolgersi al forum
    ufficiale
    https://forums.codegear.com/category.jspa?categoryID=12

    oppure prova postare la tua domanda su questo newsgroup
    http://groups.google.com/group/it.comp.lang.delphi/topics?hl=en

    dove ci sono persone veramente competenti(o meglio anni fa c’erano e’ una vita che non ci vado piu’)

    ciao & in bocca al lupo!

Comments are closed.