MSWord Automation

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
vazili_Zaitzef
Beiträge: 43
Registriert: Do 6. Dez 2012, 21:55
OS, Lazarus, FPC: Win7 64 (L 1.6 FPC 3.0.0)
CPU-Target: 64Bit

MSWord Automation

Beitrag von vazili_Zaitzef »

Hallo,

ich habe im Internet ein Wikki für die Automation von Word gefunden. (http://wiki.freepascal.org/WordAutomati ... f.C3.BCgen)
Allerdings habe ich hierbei ein kleines Problem. Sobald ich versuche in Word einen Test einzugeben, bekomme ich eine "Exception-Klasse" Fehlermeldung.
Kann mir jemand sagen warum?

Danke für Eure Hilfe :)


Anbei der Quellcode.



Code: Alles auswählen

const
  ServerName = 'Word.Application';
var
  Server     : Variant;
  w            : Widestring;
 
procedure MS_Word_initalisieren();
begin
  IF Assigned(InitProc) THEN
    TProcedure(InitProc);
  TRY
    Server := CreateOleObject(ServerName);
  EXCEPT
    WriteLn('Unable to start Word.');
    Exit;
  End;
  w:= UTF8Decode('c:ben.docx');
  Server.Documents.Open(w);
  Server.Visible := True;
 
//Bis hierher geht alles gut. Dann beim nächsten Befehl kommt die Fehlermeldung!
 
  Server.Selection.TypeText(UTF8Decode('Neuer Text'));
end;

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: MSWord Automation

Beitrag von Marsmännchen »

Wie lautet denn die Fehlermeldung?
Ich mag Pascal...

vazili_Zaitzef
Beiträge: 43
Registriert: Do 6. Dez 2012, 21:55
OS, Lazarus, FPC: Win7 64 (L 1.6 FPC 3.0.0)
CPU-Target: 64Bit

Re: MSWord Automation

Beitrag von vazili_Zaitzef »

Die Fehlermeldung habe ich im Bild angefügt.

Danke für Eure Hilfe :)
Dateianhänge
Fehlermeldung.png
Fehlermeldung.png (3.63 KiB) 1315 mal betrachtet

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: MSWord Automation

Beitrag von Marsmännchen »

Hmmmm...SIGSEGV ist ein blöder Fehler, weil er kaum einen Hinweis gibt, was schief gegangen ist. Hier gibt es eine umfangreiche Diskussion dazu im Forum: http://www.lazarusforum.de/viewtopic.php?t=5887.
Da es keine gdb-Fehlermeldung ist, vermute ich mal, dass es bei der Kommunikation zwischen deinem Prog und Word knallt. Nun bin ich in diesen Sachen kein Experte, aber mal als Idee:
Laut Wiki soll für die Dokumentsteuerung eine oleVariant-Variable angelegt werden. Dieser wird dann mittels der Open-Funktion der WordVariablen das Dokument zugewiesen. Du benutzt diese Open-Funktion jedoch wie eine Prozedur und lässt den Verweis auf das Dokument im Nirvana verschwinden. Den Zugriff auf den Text versuchst du dann wiederum durch die WordVariable "server" zu realisieren. Ich vermute mal, dass Word zurückmeldet: "jeht nich" und dann schmiert das Programm ab.

Also versuch mal:
Dokumentvariable anlegen
Dieser beim Öffnen des Worddokuments die Referenz darauf zuweisen
Über diese Dokumentvariable die Schreibzugriffe realisieren.

Mehr fällt mir dazu momentan leider auch nicht ein :|
Ich mag Pascal...

vazili_Zaitzef
Beiträge: 43
Registriert: Do 6. Dez 2012, 21:55
OS, Lazarus, FPC: Win7 64 (L 1.6 FPC 3.0.0)
CPU-Target: 64Bit

Re: MSWord Automation

Beitrag von vazili_Zaitzef »

Hi,

ich habe den Fehler gefunden. :!:

varWdApp.Selection.InsertAfter(string('Test'));

Wenn ich den Text als String formatiere, dann klappt das ganze. Wenn ich den Decodiere mit UTF8 oder nach UTF16 dann tritt der Fehler auf. DAs hilft mir jetzt kein Stück weiter, da ich ja mit üöäß dann probleme bekomme... :(
Hat einer noch einen guten Tip für mich :?:

Bitte :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: MSWord Automation

Beitrag von wp_xyz »

Also so geht's bei mir - frag nicht warum:

Code: Alles auswählen

var
  w: Widestring;
....
  w := UTF8Decode('Neuer Text mit äöü');
  Server.Selection.TypeText(w);

OLEAutomation ist immer noch ein Abenteuer mit vielen Überraschungen und noch mehr Ärger.

vazili_Zaitzef
Beiträge: 43
Registriert: Do 6. Dez 2012, 21:55
OS, Lazarus, FPC: Win7 64 (L 1.6 FPC 3.0.0)
CPU-Target: 64Bit

Re: MSWord Automation

Beitrag von vazili_Zaitzef »

Hi,

das ist lustig, wenn ich das mit der Variable machen, dann funktioniert es. Wenn ich direkt Text eingebe geht das nicht mit UTF8Decode.


Jetzt Funktioniert es 8)

Danke für die ganze Hilfe :D :)
Wünsche allen einen schönen Feierabend und gutes Gelingen beim erholen!

Bis demnächst :mrgreen:

Antworten