Seite 1 von 1

Auswahl des Dateiformates anhand der MS Word/Excel Version

Verfasst: Mo, 18. Nov 2013 13:53
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

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

Verfasst: Mo, 18. Nov 2013 14:22
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.

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

Verfasst: Mo, 18. Nov 2013 14:33
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

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

Verfasst: Mo, 18. Nov 2013 14:46
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)

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

Verfasst: Mo, 18. Nov 2013 16:13
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.

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

Verfasst: Di, 19. Nov 2013 6:57
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 ?

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

Verfasst: Di, 19. Nov 2013 12:30
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.

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

Verfasst: Di, 19. Nov 2013 17:12
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.

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

Verfasst: Di, 19. Nov 2013 20:08
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.