Einzelnen Beitrag anzeigen

Killuah

Registriert seit: 18. Okt 2007
6 Beiträge
 
Delphi 2006 Architect
 
#4

Re: Suchen & Ersetzen in einem OpenOffice-Dokument

  Alt 2. Sep 2009, 11:17
*push*

So, ich habe mir das Ganze mit XML jetzt mal etwas genauer angesehn.

Ich öffne die content.xml in Delphi mit der JvSimpleXML und gehe rekursiv durch die einzelnen
Nodes/ChildNodes und ersetze dann jeweils die im Value stehenden Variablen.
Klappt soweit echt super.

Bezüglich der Tabellen habe ich mir überlegt einfach weitere Nodes einzufügen. Da das an zwei
verschiedenen Stellen geschehen muss könnte ich ja den Namen der Tabelle/Zelle im Bereich
"office:automatic-styles" suchen und das Ganze dann dort noch erweitern.

Dazu habe ich testweise eine Writer-Datei erstellt, die eine Tabelle mit drei Spalten und
einer Zeile besitzt. Jetzt sieht meine XML folgendermaßen aus:

XML-Code:
<office:automatic-styles>
  <style:style style:name="Tabelle1" style:family="table">
    <style:table-properties style:width="16.999cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle1.A" style:family="table-column">
    <style:table-column-properties style:column-width="5.666cm" style:rel-column-width="21845*"/>
  </style:style>
  <style:style style:name="Tabelle1.A1" style:family="table-cell">
    <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle1.C1" style:family="table-cell">
    <style:table-cell-properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
</office:automatic-styles>
<office:body>
  <office:text>
    <table:table table:name="Tabelle1" table:style-name="Tabelle1">
    <table:table-column table:style-name="Tabelle1.A" table:number-columns-repeated="3"/>
      <table:table-row>
        <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string">
          <text:p text:style-name="Table_20_Contents"/>
        </table:table-cell>
        <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string">
          <text:p text:style-name="Table_20_Contents"/>
        </table:table-cell>
        <table:table-cell table:style-name="Tabelle1.C1" office:value-type="string">
          <text:p text:style-name="Table_20_Contents"/>
        </table:table-cell>
      </table:table-row>
    </table:table>
  </office:text>
</office:body>
Wie man sieht, sind im Bereich "office:automatic-styles" nur die Tabelle und 2 der 3 Spalten
deklariert. Im Bereich "office:body" wurde dann der Stylename 'Tabelle1.A1' doppelt vergeben,
obwohl es unterschiedliche Zellen sind.

In der API-Beschreibung von OpenOffice habe ich gelesen, das die Zellennamen eindeutig zugewiesen
sind und man auch über Funktionen direkt auf eine spezielle Zelle per Namen zugreifen kann. Wo
sind diese Namen denn hinterlegt, wenn nicht hier? (habe alle andern .xml durchgeschaut aber nix
gefunden)

Eine weitere Frage ist, was mir "table:number-columns-repeated" aussagen soll. Ich habe in der Tabelle
doch alle Spalten/Zellen deklariert, wozu dann also nochmal solch eine Eigenschaft?

Ich werds weiterversuchen, für jede Hilfe bin ich dennoch dankbar.

Mfg
Killuah


Edit: "Delphi-Code" durch "XML-Code" ersetzt
  Mit Zitat antworten Zitat