22. Modul XLSOUT - MS Excel schreiben

22.1. Allgemeines

Mit dem Skriptmodul können Objekte in eine Excel Tabelle geschrieben werden.

Der Modul wird mit:

|INCL \script\xlsout.mod

in einer ICS RUN1-Konfiguration verfügbar gemacht.

22.2. Abhängigkeiten von anderen Modulen

Keine Abhängigkeiten vorhanden.

22.3. Parametermap DB_PARAM

Folgende Parameter können in der Map DB_PARAM für den Modul gesetzt werden:

Parameterreq/optBeschreibung
TRACEoON oder OFF, Default = OFF. Für jedes gelesene Objekt eine Zeile ausgeben.

22.4. Parametermap DBOUT_PARAM

Folgende Parameter können in der Map DBOUT_PARAM für den Modul gesetzt werden:

Parameterreq/optBeschreibung
CREATE_TABLEoON, OFF,Default = OFF. Definiert ob die Tables definiert mit Record-Definitionen (siehe weiter unten) in der Datenbank erzeugt werden sollen. Mit OFF werden die Tabellen nicht erzeugt. Mit ON werden die Tabellen erzeugt und zwar zum Zeitpunkt, wenn das erste Objekt in die Tabelle geschrieben wird. Tables in die keine Objekte geschrieben werden, werden auch nicht erzeugt.
DELETE_OLDoON, OFF oder DROP, Default = OFF. Löscht bestehende Daten in Tables definiert mit Record-Definitionen (siehe weiter unten). Mit OFF werden keine Daten gelöscht. Mit ON werden die Daten über ein delete-sql-statement gelöscht. Mit DROP wird die Table und damit die Daten gelöscht. Zusammen mit DROP und dem Parameter CREATE_TABLE => ON werden die Tables gelöscht und wieder erzeugt.
BATCHoON oder OFF, Default = OFF. Mit OFF werden die sql-statements direkt auf der Datenbank ausgeführt. Mit OFF werden die sql-statements in ein Batchfile geschrieben. Mit dem Parameter BATCH_FILE wird das Batchfile definiert.
BATCH_OUTPUT_DIRo<directory>. Definiert ein Output-Directory für Batchfiles. Mit diesem Parameter kann das Output-Directory für Batchfiles definiert werden, falls der Parameter BATCH = ON definiert ist. Batchfiles können sein ein File mit SQL-Statementes oder in Kombination mit dem Oracle Output Modul die SQLLOADER-Bulkfiles. Ist dieser Parameter nicht gesetzt, so wird das Output-Directory aus einem eventuellen Input-File definiert in OPT.input bestimmt. Ist kein Input-File definiert, so ist das Output-Directory iltools\data\ics.sql.
BATCH_FILEo<file>. Definiert das Batchfile. Mit diesem Parameter kann das Batchfile definiert werden, falls der Parameter BATCH = ON definiert ist. Ist dieser Parameter nicht gesetzt, so wird das Batchfile aus einem eventuellen Input-File definiert in OPT.input mit der Endung .sql bestimmt. Ist kein Input-File definiert, so ist das Batchfile iltools\data\ics.sql als definiert. Das Batchfile beinhaltet SQL-Statements, um die transferierten Daten mittels SQL in eine Datenbank zu importieren.
SQLTRACEoON oder OFF, Default = OFF. Zeigt als sql-statements im Logfile an.
STATISTICSoON oder OFF, Default = OFF. Statistik anzeigen.
DATASEToON oder OFF, Default = OFF. Definiert, ob die in die Datenbank geschriebenen Daten als Datasets verwaltetet werden. Sie dazu mehr unter dem Kapitel Datasets. Der Wert ON hebt den Parameter DELETE_OLD auf.

22.5. Parametermap XLSOUT_PARAM

In dieser Parameter Map sind zur Zeit keine Parameter definierbar.

Parameterreq/optBeschreibung

22.6. Objektmodell

Der Modul verlangt pro OUT-Objekt folgende Systemkomponenten:

Komponentereq/optBeschreibung
OUT.TABLE(s)rTablename des OUT Objekts.
OUT.<Attribut>(s)oAttributname der Tabelle. Der Wert der Komponente beinhaltet den Wert für die Datenbank. Der Typ des Werts muss mit dem Typ des Attributs in der Datenbank übereinstimmen. Es können beliebig viele Attribute definiert werden.

Dieses Objektmodell gilt für die Anwendung mit der Prozedur XLSOUT_WRITE_OBJECT0. Die Tabellen mit den Attributen müssen in der Datenbank bereits bestehen oder in einer Konfiguration mit Prozeduren und Methoden vorgängig erzeugt werden. Falls die Datenbankstrukturen automatisiert mit dem Modul erstellt werden sollen, so beachten Sie das Kapitel mit den Record-Definitionen und die Prozedur XSLSOUT_WRITE_RECORD1.

22.7. EXCEL Tabelle vorbereiten

Tabelle gesamthaft schreiben

Wenn der Modul eine Excel-Tabelle vollständig schreiben soll, muss die Excel-Tabelle nach EXCEL-ODBC-Konvention wie folgt angesprochen werden:

[<table>$]

Beispiel:

MAP RECORD_1
   TABLE => [Tabelle1$]
   :
END_MAP

Tabelle tabellarisch schreiben

Damit der Modul Daten tabellarisch - Teile einer Tabelle - in eine Excel-Tabelle schreiben kann, ist die Excel Tabelle wie folgt unter Excel vorzubereiten.

Abbildung B.1.

Spaltennamen

In der ersten Zeile sind die Spaltennamen einzutragen.

Tabellennamen

Die Spalten sind zu markieren.

Über Einfügen > Namen > Festlegen ist dem markierten Bereich ein Namen zu vergeben.

Der markierte Bereiche wird über diesen Namen vom Modul XLSOUT angesprochen.

z.B.

MAP RECORD_1
   TABLE => Einwohner
   :
END_MAP

22.8. Record Definitionen

Mit Record Definitionen können nicht nur Objekte in die Datenbank geschrieben werden, sondern auch Datenbank-Tabellen automatisiert in der Datenbank angelegt werden. Die Record Definitionen werden von der Prozedur XLSOUT_WRITE_RECORD1 verarbeitet. Eine Record Definition sieht wie folgt aus.

MAP RECORD_<n>
   TABLE => <Table-Name>
   :
   <Attribute-Name> => <Attribute-Type>,<Attribute-Value>
   :
END_MAP

Die einzelnen Bestandteile einer Record-Definition sind:

RECORD_<n>

Eine Record Definition ist eine Map. Der Map-Name muss mit dem Prefix RECORD_ beginnen und eine eindeutige Nummer <n> für die Record Definition beinhalten.

TABLE

Diese Komponente ist required und definiert die Datenbank-Tabelle.

<Table-Name>

Definiert als Wert der Komponente TABLE die Datenbank-Tabelle.

<Attribute-Name>

Definiert als Komponente einen Attribut-Namen der Tabelle. Es können beliebig viele Attribute als Komponenten definiert werden.

<Attribute-Type>

Definiert den Attribut-Type in der Datenbank. Im Normalfall können der Datenbank bekannt Typen verwendet werden. Spezialtypen einer Datenbank werden eventuell nocht nicht unterstützt. Solche Spezialtypen werden bei Bedarf und auf Anfrage implementiert. Bei den Typen ist auf folgendes zu achten.

Alle Datenbanken

CHAR(<length>)

Stringtypen sind immer als CHAR mit der Länge <length> zu definieren. Je nach Datenbank wird der Typ vom Modul in einen der Datenbank bekannten Type umgewandelt z.B. Excel als TEXT.

Die length darf maximal 255 betragen.

NUMBER

Number-Typen für reelle und ganze Zahlen.

<Attribut-Value>

Definiert den Wert für das Attribut. Als Wert können absolute Werte oder ICS-Variablen, die einen Wert beinhalten - z.B. IN.OBJID - verwendet werden.

Beispiel einer Record Definition.

MAP RECORD_1
   TABLE => Bodenbedeckung_BoFlaeche_Area
   OBJID => CHAR(10),IN.OBJID
   Entstehung => CHAR(10),IN.Entstehung.OBJID
   Geometrie => DB_GEOMETRY(point;2D),IN.Geometrie
   Qualitaet => CHAR(30),IN.Qualitaet
   Art => INTEGER,IN.Art
   Art_TXT => CHAR(47),IN.Art_TXT
   Herkunft => CHAR(30),IN.Herkunft
END_MAP

22.9. Datasets

Mit dem Parameter DBOUT_PARAM.DATASET => ON kann der Modul veranlasst werden, die Daten in Datasets zu verwalten. In der Regel werden verschiedene Datasets in einen Datenbank geschrieben. Die einzelnen Datasets können danach als Subset des Daten nachgeführt oder gelöscht werden. Typischerweise bildet ein INTERLIS-File ein solches Dataset. Falls der Dataset-Parameter eingeschaltet ist, wird in der Datenbank folgendes angelegt:

CREATE TABLE GS_FILE (
   FileID       INTEGER    -- Schlüssel für Dataset
   ModelName    CHAR(255)  -- Modellname (INTERLIS)
   FileName     CHAR(255)  -- Filenamen
   DateFile     INTEGER    -- YYYYMMDD Datum des Files
   DateUpload   INTEGER    -- YYYYMMDD Datum des lesen in die Datenbank 
   UserUpload   CHAR(255)  -- eventuell ein Username
);

CREATE TABLE <Data-Table> (
   GS_FileID    INTEGER    -- Fremdschlüssel für Dataset
   : 
);

Die Tabelle GS_FILE verwaltet die Datasets. Jedes Dataset erhält eine eindeutigen Schlüssel im Attribut FileID . Jede angelegte Tabelle für die Daten erhält ein Attribut GS_FileID, das den Fremdschlüssel des Datasets beinhalten.

Wird ein Dataset (File) das erste Mal in die Datenbank geschrieben (INSERT) , wird der Eintrag in GS_FILE generiert, und jeder Daten-Record erhält den Fremdschlüssel des Datasets.

Wird ein Dataset (File) ein nächstes Mal in die Datenbank geschrieben (UPDATE) , wird der Eintrag in GS_FILE mit den Daten nachgeführt, die bestehenden Daten des Datasets in der Datenbank gelöscht und die neuen Daten in die Datenbank geschrieben.

Soll ein Dataset (File) aus der Datenbank gelöscht werden (DELETE), so steht folgende Konfiguration zur Verfügung:

ILTOOLS_DIR\system\script\il2db\dbdatasetdelete.cfg

Diese Konfiguration löscht die Daten eines Datasets und den Eintrag des Datasets in GS_FILE .

22.10. Datenbank Modellgenerierung mit CONFIG_PARAM.GENERATE_MODEL

Falls basierend auf den Record-Definitionen vor einem Datentransfer das gesamte Datenbankmodell erstellt werden soll, so ist der Parameter CONFIG_PARAM.GENERATE_MODEL auf ON zu setzten und das Script il2db.lib zu includen:

MAP CONFIG_PARAM
   GENERATE_MODEL => ON
END_MAP
:
|INCL \script\il2db\il2db.lib

Entsprechend den Record-Definitionen wird vor einem Datentransfer das Datenbankmodell angelegt, falls es nicht schon angelegt wurde.

22.11. Exportierte Prozeduren und Methoden

ProzedurXLSOUT_OPEN [s file][]
BeschreibungÖffnet eine Excel File. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
OPT.output XLSOUT_OPEN
ProzedurXLSOUT_WRITE_OBJECT0
Beschreibung

Schreibt ein Objekt in eine Excel Tabelle. Das OUT-Objekt muss gemäss dem Objektmodell gefüllt sein.

Beispiel
XLSOUT_WRITE_OBJECT0
ProzedurXLSOUT_WRITE_RECORD1 ! s recordname
Beschreibung

Schreibt ein Objekt definiert in <recordname> in die Datenbank. <recordname> ist der Name einer Record-Definition (siehe weiter oben). Je nach den gesetzten Parametern führt die Prozedur beim ersten Aufruf für eine Record-Definition folgende Aktionen auf der Datenbank aus:

  1. Die Tabelle oder deren Inhalt wird gelöscht, falls definiert durch Parameter.

  2. Die Tabelle wird erzeugt, falls definiert durch Parameter.

  3. Das Objekt wird in die Datenbank geschrieben.

Beispiel
... => XLSOUT_WRITE_RECORD1,RECORD_1
ProzedurXLSOUT_CLOSE [][]
BeschreibungSchliesst den Modul und gibt die durch den Modul belegten Resourcen wieder frei. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
DBOUT_CLOSE

Neben diesen Prozeduren des Modules stehen auch die Methoden der Klasse DB zur Verfügung (s.a. iG/Script Benutzer- und Referenzhandbuch).

22.12. Skriptbeispiel

! Diese ICS Konfiguration liest ein INTERLIS File,
! erzeugt eine Tabelle für LFP's in Excel
! und schreibt die LFP's in die Tabelle.

|LICENSE \license\iltools.lic

MAP USER_INPUT1
   DIALOG        => FILE
   MESSAGE       => 'Enter INTERLIS Input File'
   FILE_FILTER   => itf
   FILE_EXISTS   => TRUE
   OPT           => input
END_MAP

MAP USER_INPUT2
   DIALOG        => FILE
   MESSAGE       => 'Enter Excel Output File'
   FILE_FILTER   => xls
   FILE_EXISTS   => FALSE
   OPT           => output
END_MAP

MAP ILIN_PARAM
   INTERLIS_DEF => \models\Grunddatensatz.ili
   STATISTICS   => ON
   CALC_SURFACE => ON
   ENUM_TO_TEXT => ON
   TRACE        => OFF
END_MAP

MAP ILIN_TOPO
   DEFAULT => OFF
END_MAP

MAP DB_PARAM
   TRACE      => OFF
END_MAP

MAP DBOUT_PARAM
   STATISTICS      => ON
   CREATE_TABLE    => ON
   DATASET         => ON
END_MAP

MAP XLSOUT_PARAM
END_MAP

MAP RECORD_1
   TABLE => Fixpunkte_LFP
   OBJID => CHAR(10),IN.OBJID
   ENTSTEHUNG => CHAR(10),IN.Entstehung.OBJID
   NUMMER => CHAR(12),IN.Nummer
   GEOMETRIE => DB_GEOMETRY(point;3D),IN.Geometrie
   LAGEZUV_TXT => CHAR(4),IN.LageZuv_TXT
   HOEHEZUV_TXT => CHAR(4),IN.HoeheZuv_TXT
   BEGEHBARKEIT_TXT => CHAR(14),IN.Begehbarkeit_TXT
   SYMBOLORI => NUMBER,IN.SymbolOri
   ART_TXT => CHAR(4),IN.Art_TXT
   HERKUNFT => CHAR(30),IN.Herkunft
END_MAP

MAP INPUT_SOURCES
   I1 => ILTOPO,OPT.input
END_MAP

MAP INOUT
   I1                => IN.TOPIC,IN.TABLE
   I1,Fixpunkte,LFP  => XLSOUT_WRITE_RECORD1,RECORD_1
   I1,*              => OFF
END_MAP

|INCL \script\iltopo.mod
|INCL \script\xlsout.mod
|INCL \script\run1.prg