AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi CreateOleObject('Word.Application') - Dotx öffnen aber docx bekommen, wie?
Thema durchsuchen
Ansicht
Themen-Optionen

CreateOleObject('Word.Application') - Dotx öffnen aber docx bekommen, wie?

Ein Thema von Piro · begonnen am 27. Nov 2018 · letzter Beitrag vom 30. Nov 2018
Antwort Antwort
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#1

AW: CreateOleObject('Word.Application') - Dotx öffnen aber docx bekommen, wie?

  Alt 27. Nov 2018, 17:14
C:\Programme\Microsoft Office\OFFICE11\winword.exe Word-Datei
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#2

AW: CreateOleObject('Word.Application') - Dotx öffnen aber docx bekommen, wie?

  Alt 27. Nov 2018, 17:20
Ah ok, damit würde ich aber die Office Version vorgeben.

Das schöne mit meiner Lösung ist, dass ich das das verlinkte Office nehme zum Dateityp. Bei einem Office Wechsel,
muss ich nicht den Pfad zum Office angeben.

Oder ich mache das auch mit CreateOleObject('Word.Application') wenn es keine einfache Lösung gibt.

Aus der Registry, dass Word auslesen, wollte ich eigentlich nicht.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.552 Beiträge
 
Delphi 7 Professional
 
#3

AW: CreateOleObject('Word.Application') - Dotx öffnen aber docx bekommen, wie?

  Alt 27. Nov 2018, 17:22
Delphi-Quellcode:
var
 doc : String;
begin
 doc := frm_main.AppPath + 'data\formulare\dokumentenname.docx';
 if FileExists(doc) then
 begin
   ShellExecute(0, 'open', PChar(doc), nil, nil, SW_NORMAL );
 end;
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#4

AW: CreateOleObject('Word.Application') - Dotx öffnen aber docx bekommen, wie?

  Alt 27. Nov 2018, 17:25
es gibt doch nur die vorlagen.dotx Datei.

Ich möchte das diese als Vorlage geöffnet wird und Word dann ein normale docx Datei öffnet, wie in meinem vorherigen Code.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.552 Beiträge
 
Delphi 7 Professional
 
#5

AW: CreateOleObject('Word.Application') - Dotx öffnen aber docx bekommen, wie?

  Alt 27. Nov 2018, 17:55
Du willst also weder eine Vorlage öffnen, noch ein Dokument, sondern ein neues Dokument (anhand einer Vorlage) erstellen.

Das solltest Du auch so schreiben und Dir auch darüber klar werden, dass Du genau das möchtest.

Also ungefähr sowas:
Delphi-Quellcode:
function NeuesDokument(aWordApp : TWordApplication; aWordDoc : TWordDocument; aDot : String; aVisible : Boolean = false) : Boolean;
var
  vDOT : OleVariant;
  vNewDOT : OleVariant;
  vDocType : OleVariant;
  vVisible : OleVariant;
begin
  vDOT := aDot; // Das ist die Vorlage, anhand der ein neues Doukment erstellt werden soll.
  vNewDOT := False; // Wir wollen keine neue Vorlage erstellen, deshalb False.
  vVisible := aVisible; // Word soll das Ganze sichtbar machen.
  vDocType := EmptyParam; // Der Parameter muss angegeben werden, soll aber leer sein.
  try
    aWordApp.Documents.Add(vDOT, vNewDOT, vDocType, vVisible);
    aWordDoc.ConnectTo(aWordApp.ActiveDocument);
    aWordApp.ActiveWindow.ActivePane.View.type_ := wdOutlineView;
    Result := True;
  except
    on e : Exception do begin
      Result := False;
      MessageDlg(e.Message,mtError,[mbOk],0);
    end;
  end;
end;
Wenn es unbedingt ShellExcecute sein muss, schau Dir mal die Kommandozeilenparameter an: https://support.office.com/en-us/art...5-441737deb3a6

Und dann hoffe darauf, dass sie bei anderen Officeversionen (OpenOffice ...) entsprechend implementiert sind.

Denn ShellExecute und Open startet das Officepaket, dass in der Registry (für den übergebenen Dateityp) eingetragen ist (und das muss nicht das Office von MS sein).
Bei unterschiedlichen Officeversionen von MS mag das problemlos gehen, bei der Unterstützung unterschiedlicher Officepakete unterschiedlicher Hersteller, könnte es sportlich werden.

CreateOleObject('Word.Application') nimmt das MS-Officepaket, das installiert ist. Das ist beim Wechsel der Officeversion für Dein Programm transparent. Solange an der Schnittstelle (MS-seitig) nix geändert wird, kann Dir die Officeversion auf dem "Zielrechner" (beim Kunden ...) egal sein.
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#6

AW: CreateOleObject('Word.Application') - Dotx öffnen aber docx bekommen, wie?

  Alt 28. Nov 2018, 00:27
Vielen vielen Dank.

Super Erklärung.

Ich werde auf ShellExecute verzichten.

@ Delphi.Narium
Mein Code funktioniert auch. Bin mir nur nicht sicher, ob ich lieber
deinen nehmen soll. Die Parameter beim Starten von Word sind eindeutiger.

Danke für einen kurzen Hinweis
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: CreateOleObject('Word.Application') - Dotx öffnen aber docx bekommen, wie?

  Alt 28. Nov 2018, 09:50
Ich würde an deiner Stelle dann auch auf ShellExecute verzichten, denn das (Neues Dokument basierend auf Template) geht nur so, wie ich es eben gezeigt habe und dazu müsstest du immer die Office-Version wissen, wie du das ja auch angemerkt hast.

Also ist der Weg über Ole wohl der bessere, wenn wir mal davon ausgehen, dass du nur MS-Word benutzt, kein OpenOffice o.ä.

Dann kannst du es so machen, wie Delphi.Narium, wobei ich immer nie weiß, wie diese Early-Binding Varianten funktionieren, wenn ich mal eine neue oder ältere Office-Version ansprechen will, als die, womit ich das kompiliert habe. Da kann vllt. jemand anders mehr zu sagen.

Daher nehm ich da meist Late-Binding (so wie in deinem Beispiel), auch wenn das ggf. etwas lansamer ist.
Ralph
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.552 Beiträge
 
Delphi 7 Professional
 
#8

AW: CreateOleObject('Word.Application') - Dotx öffnen aber docx bekommen, wie?

  Alt 28. Nov 2018, 09:57
Du willst doch zur Laufzeit des Programmes per Wordfernsteuerung ein Dokument erstellen und mit Inhalt befüllen.

Meiner Meinung nach ist es in diesem Zusammenhang unsinnig, für die Erstellung des Dokumentes nicht die Wordfernsteuerung zu nehmen, sondern über einen anderen Weg zu versuchen (hier ShellExecute) Word zu starten und dann "irgendwie" eine Verbindung zu Word zu bekommen, mit der dann weitergearbeitet wird.

Mit Shellexecute wird nicht Word gestartet, sondern das mit dem Dateityp verbundene Programm. Das mag meist Word sein, muss es aber nicht. Wenn Du für Deine Aufgabe zwingend Word benötigst, dann starte Wort über die Schnittstelle, also Word := CreateOleObject('Word.Application'); . Vorteil, wenn das nicht funktioniert, weißt Du sofort, dass kein Word zur Verfügung steht und musst dann nicht per ShellExecute hoffen, dass Du zufällig das "richtige" Word startest und nicht eventuell was anderes, auf das Du dann sowieso keinerlei Einfluß hast. Fände es als Anwender jedenfalls befremdlich, wenn "mein" Programm ein Dokument erstellen soll, aber irgendwie bei jedem Versuch 'ne neue Instanz von OpenOffice mit 'nem leeren Dokument startet und dann nix mehr passiert.

Die Parameter von Word sind nicht eindeutiger, es sind halt unterschiedliche Wege zum gleichen Ziel. Man muss sich für die Wordfernsteuerung halt schon mit der Schnittstelle befassen und da gehört das Erstellen eines neuen Dokumentes schon eher zu den einfachen Aufgaben.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz