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

  1. die Worddatei im selben Verzeichnis liegt, wie das Rexxprogramm liegt,
  2. das Unterverzeichnis "forms" für das Speichern der PDF-Dateien sich auch dort befindet.

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
__________________________________________________________________________________