Auswahl des Dateiformates anhand der MS Word/Excel Version

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

Antworten
Patrick.Zi
Rookie
Rookie
Beiträge: 5
Registriert: Mo, 18. Nov 2013 13:40

Auswahl des Dateiformates anhand der MS Word/Excel Version

Beitrag von Patrick.Zi »

Hallo zusammen

Wie der Titel schon sagt, bin ich auf der Suche nach einer Möglichkeit, automatisch den Dateityp beim speichern von Word oder Excel Dokumenten zu auswählen zu lassen. Natürlich habe ich auch schon über google gesucht und mich hier im Forum ein wenig umgeschaut. Zurzeit würde mein Code wie folgt aussehen, jedoch wäre mir eine automatische Auswahl lieber.

Code: Alles auswählen

LOCAL cTyp
LOCAL oApp := CreateObject( "WORD.APPLICATION" )

IF oApp # NIL
   IF val(oApp:version()) >= 12
      cTyp := ".DOCX"
   ELSE
      cTyp := ".DOC"
   ENDIF
    oApp:documents:add()
   usw...
Danke schonmal im vorraus.
LG Patrick
Danke schonmal im Vorraus und Gruß
Patrick
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Auswahl des Dateiformates anhand der MS Word/Excel Versi

Beitrag von brandelh »

Falls du meinst, dass du das beim Speichern vorgibst, das geht so ...

Excel:

Code: Alles auswählen

oBook:SaveAs("Mein.XLS" , xlWorkbookNormal )
oBook:SaveAs("Mein.XLSX" , xlOpenXMLWorkbook )
Mit Word müsste das ähnlich gehen, einfach den Macrorecorder starten, speichern unter ... ausführen und das BVA-Makro ansehen.
Gruß
Hubert
Patrick.Zi
Rookie
Rookie
Beiträge: 5
Registriert: Mo, 18. Nov 2013 13:40

Re: Auswahl des Dateiformates anhand der MS Word/Excel Versi

Beitrag von Patrick.Zi »

brandelh hat geschrieben:Falls du meinst, dass du das beim Speichern vorgibst, das geht so ...

Excel:

Code: Alles auswählen

oBook:SaveAs("Mein.XLS" , xlWorkbookNormal )
oBook:SaveAs("Mein.XLSX" , xlOpenXMLWorkbook )
Mit Word müsste das ähnlich gehen, einfach den Macrorecorder starten, speichern unter ... ausführen und das BVA-Makro ansehen.
Ich meinte eher, dass Word selber die passende Dateiendung wählt, je nachdem welche Version installiert ist, da ja zum Beispiel alle Versionen unter MS Word 2007 kein .docx format unterstützen. Demnach soll er selbstständig im .doc Format speichern wenn eine Version unter der 2007er installiert ist und automatisch .docx gespeichert werden, sobald die Version 2007 und höher installiert ist.

Gruß Patrick
Danke schonmal im Vorraus und Gruß
Patrick
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Auswahl des Dateiformates anhand der MS Word/Excel Versi

Beitrag von georg »

Hallo, Patrick -


noch nicht versucht, aber was passiert, wenn Du die Erweiterung weglässt und es dem jeweiligen Programm überlässt, das entsprechende Format zu wählen?

Also etwa

Code: Alles auswählen

cDoc := "c:\Benutzer\Xbase-User\Dokumente\MeinDokument" // ohne "." am Ende!
oDoc:saveAs(cDoc)
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Patrick.Zi
Rookie
Rookie
Beiträge: 5
Registriert: Mo, 18. Nov 2013 13:40

Re: Auswahl des Dateiformates anhand der MS Word/Excel Versi

Beitrag von Patrick.Zi »

georg hat geschrieben:Hallo, Patrick -


noch nicht versucht, aber was passiert, wenn Du die Erweiterung weglässt und es dem jeweiligen Programm überlässt, das entsprechende Format zu wählen?

Also etwa

Code: Alles auswählen

cDoc := "c:\Benutzer\Xbase-User\Dokumente\MeinDokument" // ohne "." am Ende!
oDoc:saveAs(cDoc)
Habe es gerade einmal probiert und er macht nichts. Er bricht die Laufzeit einfach beim safe() ab und speichert auch keine Datei. Es scheint als würde er es zumindest bei mir wie ein "RETURN self" sehen, da das Programm von mir auch nicht mit einem Fehler abstürzt sondern normal weiterläuft.

Wenn ich vorher eine Tempfile ohne Dateiendung erstelle und diese dann per Word abspeichere macht er es zwar, jedoch hat sie dann auch nach dem Speichern keinen neuen Dateityp.
Danke schonmal im Vorraus und Gruß
Patrick
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Auswahl des Dateiformates anhand der MS Word/Excel Versi

Beitrag von brandelh »

Patrick.Zi hat geschrieben:
brandelh hat geschrieben:Ich meinte eher, dass Word selber die passende Dateiendung wählt, je nachdem welche Version installiert ist, da ja zum Beispiel alle Versionen unter MS Word 2007 kein .docx format unterstützen. Demnach soll er selbstständig im .doc Format speichern wenn eine Version unter der 2007er installiert ist und automatisch .docx gespeichert werden, sobald die Version 2007 und höher installiert ist.
ich fürchte, dass dies nicht funktioniert. Beim Excel Beispiel steht über dem Dateinamen:

Code: Alles auswählen

  // Das Workbook wird mit einem neuen Namen abgespeichert.
  // Ein voll qualifizierter Pfad muss angegeben werden.
  // xlWorkbookNormal erzeugt eine normale Excel-Datei.
  oBook:SaveAs( cTDir+"\MyExcel.xls" , xlWorkbookNormal ) // xlWorkbookNormal  =>  .XLS
Damit die Automatik funktionieren könnte, müsste Excel / Word damit klar kommen einen Dateinamen ohne Dateiendung und ohne TypKonstante bzw. mit einer wie xlWorkbookAuto zu arbeiten.
Meine Versuche waren in dieser Hinsicht nicht erfolgreich. Warum also nicht nach der abgefragten Version die nötigen Infos auswählen ?
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9343
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: Auswahl des Dateiformates anhand der MS Word/Excel Versi

Beitrag von Tom »

Warum also nicht nach der abgefragten Version die nötigen Infos auswählen ?
Ich halte das auch für den sinnvollsten Weg. Zumal es noch einige andere versionsabhängige Eigenarten gibt - so muss beispielsweise die iVar "DisplayAlerts" bis einschließlich Version 10 (was auch immer das ist) mit 0 oder 1 besetzt werden, während spätere Versionen .T. oder .F. akzeptieren. Jedenfalls nach meiner Erfahrung.

Alternativ könnte man einfach für alle Versionen ".DOCX" wählen. Gut möglich, dass ältere Word-Versionen (ich besitze leider keine und kann's nicht ausprobieren) daraus schlicht .DOC machen. Es gibt aber auch einige Konstanten als Parameter für die SaveAs-Methode (einfach mal ins MSDN schauen), darunter solche, die die Verwendung des jeweils aktuellen Formats vorschreiben. Denkbar, dass Word automatisch auf einen anderen Wert zurückfällt, wenn man einen noch nicht unterstützten verwendet. Denkbar aber auch, dass es dann zu einem Fehler kommt.

Was spricht dagegen, die Version abzufragen? Okay, man müsste das für zukünftige Versionen jeweils aktualisieren, aber dieser Aufwand wäre akzeptabel.
Herzlich,
Tom
Patrick.Zi
Rookie
Rookie
Beiträge: 5
Registriert: Mo, 18. Nov 2013 13:40

Re: Auswahl des Dateiformates anhand der MS Word/Excel Versi

Beitrag von Patrick.Zi »

Habe es jetzt auch über die oWord:version() Methode und IF-Abfrage gelöst. Falls jemandem noch etwas dazu einfällt kann derjenige es posten.
Danke schonmal im Vorraus und Gruß
Patrick
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Auswahl des Dateiformates anhand der MS Word/Excel Versi

Beitrag von georg »

Hallo, Patrick -


als Gedankenanstoss:

Wenn Du von AutomationObject eine eigene Klasse ableitest, kannst Du eine eigene SaveAs Methode definieren. In dieser Methode kannst Du dann die entsprechenden Abfragen hinterlegen und musst sie nicht jedes mal "neu" programmieren.

Dann ersetzt Du schrittweise die Zugriffe auf die ursprüngliche Klasse durch Deine neue Klasse und verwendest die neue SaveAs Methode.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Antworten