Tutorials

Tutorial

Hyperlinks und Formeln

English version

Hyperlinks

Aus Platzgründen ist nur ein Teil des Quellcodes angegeben, der vollständige Code ist der zugehörigen Zip-Datei beigelegt.

Links können auf Zellen innerhalb der aktuellen Datei, auf eine andere Datei oder einen Ordner verweisen.

Bei Verweisen außerhalb der aktuellen Datei müssen die Angaben für Excel und OpenOffice verschieden sein (siehe Differenzen).

DECLARE
  -- test_40.sql
  v_fileHandle            utl_file.FILE_TYPE;

  tab_columns             xml_spreadsheet.t_tab_columns;
  tab_caption             xml_spreadsheet.t_tab_caption;

  r_font                  xml_spreadsheet.t_rec_font;
  r_customStyles          xml_spreadsheet.t_rec_customStyles;

  tab_customStyles        xml_spreadsheet.t_tab_customStyles;

BEGIN

  r_customStyles.id           := 'Hyperlink';
  r_customStyles.type         := 'Text';
  r_font.fColor               := xml_spreadsheet.c_blue;
  r_font.fUnderline           := 's';
  r_customStyles.font         := r_font;
  tab_customStyles(1)         := r_customStyles;

  -- New File
  v_fileHandle   := xml_spreadsheet.createNewFile('DOC','test_40.xml');
  ...

  -- Write a data row
  xml_spreadsheet.writeData(
      v_fileHandle
     ,'Link same page F2'
     ,'Hyperlink'
     ,NULL
     ,NULL
     ,NULL
     ,'#page_1!F2'
     );
  xml_spreadsheet.writeData(
      v_fileHandle
     ,'#page_1!F2'
     );
...

  -- close worksheet
  xml_spreadsheet.closeWorksheet(
       v_fileHandle
      ,0
      );

  -- Close file
  xml_spreadsheet.closeFile(v_fileHandle);

END;
/
Ergebnisse für Test 40
ExcelOO-Calc
MS-Excel Output für Test 40 OO-Calc Output für Test 40

Bilder zum Vergrößern anklicken

Unterschiede

  • Bei OO-Calc bekommen Hyperlinks einen grauen Hintergrund
Link Syntax
Link TypExcelOO-Calc
selbes Arbeitsblatt #<Arbeitsblatt>!<Zell Referenz in A1 Notation>
z.B. #page_1!F2
#<Arbeitsblatt>!<Zell Referenz in A1 Notation>
z.B. #page_1!F2
anderes Arbeitsblatt #<Arbeitsblatt>!<Zell Referenz in A1 Notation>
z.B. #page_2!B3
#<Arbeitsblatt>!<Zell Referenz in A1 Notation>
z.B. #page_2!B3
andere Datei oder Ordner, absoluter Pfad Windows Stil mit Backslash
z.B. C:\temp\test_30.xml
Unix Stil mit Schrägstrich
z.B. /C:/temp/test_30.xml
andere Datei oder Ordner, relativer Pfad Windows Stil mit Backslash
z.B. \test_30.xml
ausgehend vom ROOT des aktuellen Laufwerks
Unix Stil mit Schrägstrich
z.B. ../test_30.xml
ausgehend vom Ort der aktuellen Datei

Formeln

Aus Platzgründen ist nur ein Teil des Quellcodes angegeben, der vollständige Code ist der zugehörigen Zip-Datei beigelegt.

Grundsätzlich können alle Formeln verwendet werden, die in Excel zur Verfügung stehen. Allerdings sind die englischen Formelbezeichnungen zu verwenden.

Der einfachste Weg die entsprechende Formelsyntax zu finden ist die, eine leere Datei mit nur dieser Formel zu erstellen, als XML-Format zu speichern und sich die generierte Datei in einem Texteditor anzusehen.

Wichtig: Zellbezüge werden im Gegensatz zu den Hyperlinks immer relativ zur aktuellen Zelle angegeben. Zum Ermitteln der korrekten Syntax kann die Funktion xml_spreadsheet.getRelativeCellReference verwendet werden.

Formeln
FormelSyntax
Summe SUM()
Anzahl COUNT()
Maximum MAX()
Vorzeichen SIGN()
Heute = aktuelles Datum TODAY()
Jetzt = aktuelles Datum + Zeitanteil NOW()
SVERWEIS VLOOKUP()
Zellbezüge
TypSyntax
einzelne Zelle R[x]C[y]
Bereich R[x1]C[y1]:R[x2]C[y2]
Mehrere Zellen R[x1]C[y1],R[x2]C[y2],R[x3]C[y3],...
DECLARE
  -- test_41.sql
  v_fileHandle            utl_file.FILE_TYPE;

  tab_columns             xml_spreadsheet.t_tab_columns;

BEGIN

  tab_columns(1).cWidth       := 60;
  tab_columns(2).cWidth       := 250;
  tab_columns(3).cWidth       := 80;

  -- New File
  v_fileHandle   := xml_spreadsheet.createNewFile('DOC','testFormula.xml');
  ...

  -- Write a data row
  xml_spreadsheet.writeData(
      v_fileHandle
     ,1
     ,xml_spreadsheet.c_integer
     );
  xml_spreadsheet.writeData(
      v_fileHandle
     ,'Summe A1 - A20'
     );
  xml_spreadsheet.writeData(
      v_fileHandle
     ,TO_NUMBER(NULL)
     ,xml_spreadsheet.c_integer
     ,NULL
     ,'=SUM(RC[-2]:R[19]C[-2])'
     );
  xml_spreadsheet.newDatarow(v_fileHandle);
  xml_spreadsheet.writeData(
      v_fileHandle
     ,TO_NUMBER(NULL)
     ,xml_spreadsheet.c_integer
     ,TO_NUMBER(NULL)
     ,'=R[-1]C+1'
     );
  xml_spreadsheet.writeData(
      v_fileHandle
     ,'Summe A1 - A20 auf Blatt 2'
     );
  xml_spreadsheet.writeData(
      v_fileHandle
     ,TO_NUMBER(NULL)
     ,xml_spreadsheet.c_integer
     ,NULL
     ,'=SUM(page_2!R[-1]C[-2]:R[18]C[-2]))'
     );
    xml_spreadsheet.newDatarow(v_fileHandle);
...

  -- close worksheet
  xml_spreadsheet.closeWorksheet(
       v_fileHandle
      ,0
      );

  -- Close file
  xml_spreadsheet.closeFile(v_fileHandle);

END;
/
Ergebnisse für Test 41
ExcelOO-Calc
MS-Excel Output für Test 41 OO-Calc Output für Test 41

Bilder zum Vergrößern anklicken

Unterschiede

  • Keine, abgesehen von der bekannten unterschiedlichen Darstellung der Datumswerte