|
Oracle BI Publisher Tipp
Dynamische
Excel-Sheets mit RTF-Templates erzeugen
|
|
Ausgangslage
In diesem Tipp soll folgender Bericht erstellt werden:

Wir wollen also eine Liste der Mitarbeiter einer Abteilung mit Gehalt und Provision sowie deren Addition und den jeweiligen Summen der Spalten. Basierend auf der Query
select ename, job, sal, comm, deptno
from emp
where deptno = :p_deptno
läßt sich diese Anforderung recht einfach umsetzen (Download des Templates hier):

Für die Addition von Gehalt und Provision wurde <?xdofx:decode(COMM,'',SAL+COMM)?> gewählt, da COMM auch Null sein kann. Alternativ hätte man in die Addition auch in der Abfrage durchführen k&uoml;nnen.
Soweit so gut, mit diesem Template lassen sich nun die gängigen Zielformate erzeugen. Verwendet man aber nun die Excel-Ausgabe und verändert darin Werte, werden sich weder die Addition, noch die Summen anpassen:

Will man also ein Excel-Sheet bekommen, mit dem der Anwender "arbeiten" können soll, ist dieses Template nicht geeignet , da alle Zellenwerte statisch im Sheet eingetragen sind.
Erstellen eines Templates für dynamische Sheets
Die grün markierten Felder im Template müssen derart verändert werden, damit diese im resultierenden Excel-Sheet dynamisch werden.:

=CZEILE+DZEILEwobei Zeile ein Form-Feld mit dem Inhalt
<?position()+3?>
ist. Für die Summierung der Gehälter schreiben wir =SUM(C4:CMaxZ)
wobei MaxZ
ein Form-Feld mit dem Inhalt <?xdofx:count(ENAME)+3?>
ist. Wie bei der Spalten Addition taucht hier die 3 auf, da die Ausgabe
in der vierten Zeile beginnt. Daher auch das C4 in der Summe. Beides
könnte man über eine Variable ebenfalls dynamisch verpacken, um bei
späteren änderungen (z.B. dem Einfügen einer Textzeile zu Beginn) nicht
in allen Feldern änderungen vornehmen zu müssen.

Einschränkungen
Mit RTF-Templates können nicht alle Excel-Funktionalitäten ausgenutzt werden. So können keine Excel-Files mit mehreren Worksheets erzeugt werden. Auch werden Funktionen wie Kopfzeilen oder Kommentare in den Excel Sheets nicht unterstützt. Werden die Zellen nicht dynamisch generiert, könnte auch die maximal mögliche Anzahl von Spalten in einer Tabelle in Winword (63) ein limitierender Faktor sein.
Alternativ könnte man den Excel Analyser verwenden, mit welchem Excel-Templates erzeugt werden können. Dieser unterstützt die nativen Excel-Möglichkeiten (inkl. Macros), kann aber in der aktuellen Version nur flache Strukturen verarbeiten.