Liebe Studierende,
jetzt, wo die Hektik der Abschlussarbeit hinter Ihnen liegt, noch ein Hinweis: es gibt häufig das Problem, dass man eine Datei an einem bestimmten Ort vorfindet. Eine Lösung liegt darin, dass man einfach den vollen Pfad im Programm dafür angibt. Dies hat aber den Nachteil, dass das Programm dann nicht mehr funktioniert, wenn man den Ort (das Verzeichnis, den Ordner) ändert, da der volle Pfad nicht auf den neuen Ort verweist und die Datei dann im Programm nicht mehr gefunden werden kann!
Die Lösung liegt darin, den Programmcode so flexibel wie möglich
zu machen und nach Möglichkeit absolute Pfade vermeiden.
Hier ein Beispiel, in dem ich das Rexxprogramm der Gruppe 1 mit dem Namen "word.rex" entsprechend ändere. Voraussetzung ist bei dieser Lösung, dass
Wenn das gegeben ist, kann man mit der Rexx-Anweisung "parse source . . fullPath" den vollen Pfad zum Rexxprogramm, in dem unser Code gerade ausgeführt wird, erhalten. Mit der in ooRexx eingebauten Funktion filespec() kann man z.B. mit dem Argument "Location" den vollen Pfad ohne den Namen der Datei erhalten, wobei der Backslash erhalten bleibt. Damit wird es dann einfach möglich, die Worddatei mit dem Namen "Patienten_Formular.docx" anzuhängen, sodass der so dynamisch ermittelte Pfad auf das aktuelle Verzeichnis des Rexxprogramms zeigt. Gleichermaßen kann dann auch der Ort für die PDF-Dateien dynamisch festgelegt werden, indem man den Namen des Unterverzeichnisses, dann einen Backslash und dann den Namen der PDF-Datei festlegt.
Hier der entsprechend angepasste Code (nicht getestet, sollte aber funktionieren!):
::routine word_form public use strict arg current_patient parse source . . fullPath -- returns full path to this Rexx program location=filespec('Location', fullPath) -- removes the Rexx program name leaves trailing (back-)slash wrd = .OLEObject~new("Word.Application") -- wrd~Documents~Open("C:\UNI_Local\thomas\WINF\SS2021\SBWL\BIS\BusinessProgramming1\training\assignments\finalAssignment\Patienten_Formular.docx") wrdFile=location"Patienten_Formular.docx" wrd~Documents~Open(wrdFile) -- open Word file wrdDoc = wrd~ActiveDocument wrdDoc~FormFields("lName")~result = current_patient~lName wrdDoc~FormFields("fName")~result = current_patient~fName wrdDoc~FormFields("svnr")~result = current_patient~svnr wrdDoc~FormFields("phone")~result = current_patient~phone wrdDoc~FormFields("mail")~result = current_patient~mail wrdDoc~FormFields("birthday")~result = current_patient~birthday -- path = "C:\UNI_Local\thomas\WINF\SS2021\SBWL\BIS\BusinessProgramming1\training\assignments\finalAssignment\forms" filename = location"forms\"current_patient~lName"_"current_patient~fName"_Patientenfragebogen_"date(S)".pdf" /* Hinweis, wie man an "17" über Word herankommen kann: -- documentation: -> <https://docs.microsoft.com/en-us/office/vba/api/word.range.exportasfixedformat2> -> <https://docs.microsoft.com/en-us/office/vba/api/word.wdexportformat> constant names: "wdExportFormatPDF" (value: 17) constant names: "wdExportFormatXPS" (value: 18) ooRexx probably (untested): value=wrdDoc~getConstant("wdExportFormatPDF") -- should return 17 */ wrdDoc~ExportAsFixedFormat2(filename, 17) wrdDoc~close(wrdDoc~getConstant(wdDoNotSaveChanges)) --dont change the original document. Just close it! wrd~Quit
Der blaue Text im obigen Programm verweist auf die Dokumentation der "ExportAsFixedFormat2"-Methode und den darin zulässigen Konstanten (Argument "wdexportformat") von Word.
---
Eine weitere Möglichkeit, dynamisch Pfade festzulegen, wenn Sie Dateien im aktuellen Verzeichnis/Ordner ansprechen wollen ist die in Rexx eingebaute Funktion directory(), die den Pfad zum aktuellen Verzeichnis/Ordner zurückliefert. Beide BIFs (built-in functions) sind in der ooRexx-Dokumentation rexxref.pdf im Abschnitt 7.4, Built-in Functions, dokumentiert.
Mit freundlichem Gruß
Rony G. Flatscher
-- __________________________________________________________________________________ Prof. Dr. Rony G. Flatscher Department Wirtschaftsinformatik und Operations Management Institut für Wirtschaftsinformatik und Gesellschaft D2c 2.086 WU Wien Welthandelsplatz 1 A-1020 Wien/Vienna, Austria/Europe http://www.wu.ac.at __________________________________________________________________________________