Sebastian: Aus Excel-Tabelle sauberes XML generieren???

Grüezi,

angenommen:

  • es gibt eine Excel(2003)-Tabelle
  • aus der möchte ich eine saubere XML-Datei erhalten (reiner Zellen-Inhalt, keine unnötigen Infos)
  • die Inhalte der XML-Datei sollen später durch diverse XSLT-Stylesheets angefasst werden können.

Gibt es dafür denn einen Königsweg?

Da in die Excel-Tabelle später immer wieder mal Daten eingepflegt werden, sollte das ganze relativ automatisiert sein.
(Also kein Mappen mit MapForce o.Ä. - vorhandene Tools sind nur der XMLSpy und eben Excel)

------------------------------
Wie ichs bisher versucht habe:

  • die Tabelle lässt sich unter Excel 2003 als XML-Spreadsheet speichern.
  • da kommt dann leider relativ viel Datenmüll mit raus, durch Layout- (Tabellenformatierung) und sonstige officebasierte Informationen -
    Ich möchte allerdings nur die reinen, ausgefüllten (String-)Zelleninhalte.

Grüßle

  1. Um die unnötigen Infos auszublenden, sitz ich grade an einem XSL-Stylesheet, welches:

    a) das Excel-XML-Spreadsheet in ein neues XML-Dokument transformiert.
    b) neue XML-Elemente erzeugt, die wiederrum namentlich schon in einem XSD-Schema vorgegeben sind. (--> soweit noch problemlos)
    c) die Excel-Zelleninhalte dann von den Excel-Hieroglyphen auf die neuen Elemente mappt.

    --> und hier hakts. Das Problem scheint zu sein, dass ich die Spreadsheet-Elemente nicht selecten/matchen kann (, weder mit den eigentlichen templates noch for-each-schleifen)?!
    Liegt das evtl. an den Namespaces aus dem Excel-Spreadsheet?

    Excel-Spreadsheet:

    <?xml version="1.0"?>
     <?mso-application progid="Excel.Sheet"?>
     <Workbook
      xmlns="urn:schemas-microsoft-com:office:spreadsheet"
      xmlns:o="urn:schemas-microsoft-com:office:office"
      xmlns:x="urn:schemas-microsoft-com:office:excel"
      xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
      xmlns:html="http://www.w3.org/TR/REC-html40">
    .
    .
      <Worksheet ss:Name="SheetForMatrix">
        <Table>
         <Row ss:AutoFitHeight="0" ss:Height="176.25">
            <Cell ss:StyleID="s82">
      <Data ss:Type="String">DocumentID</Data>
      <NamedCell ss:Name="DocumentID"/>
            </Cell>
    .
    .

    die Namespaces hab ich jetzt alle mal im Prolog des Stylesheets angegeben. oder muss ich sie woanders hinpacken oder doch ignorieren?

    ------------------------

    Welchen XPath-Ausdruck müsste ich dann einer for-Each-Schleife mitgeben, damit sie für jedes NamedCell-Element (welches das Label ss:Name="DocumentType" hat), den jeweils zugehörigen Wert (der aus "Data" davor) in einem neuen Element ausgibt?
    mit folgendem gehts scheinbar nicht:

    <xsl:for-each select="Row/Cell/NamedCell[@ss:Name='DocumentID']"
         <xsl:element name="DocumentID">
     <value-of select...
            .
            .
    er kommt aber schon gar nicht soweit runter, wenn ich das in <xsl:template match="/Worksheet[@ss:Name='SheetForMatrix']/Table"> verpacken möchte...
    Heisst für mich, es liegt irgendwie an dem SS, oder dem Default Namespace...

    Komisch fand ich, dass da scheinbar der gleiche URI 2x vergeben ist:
     xmlns="urn:schemas-microsoft-com:office:spreadsheet"
     xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"

    Hilfe ... :)

    1. Hello out there!

      Komisch fand ich, dass da scheinbar der gleiche URI 2x vergeben ist:
      xmlns="urn:schemas-microsoft-com:office:spreadsheet"
      xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"

      Der Namensraum, der mit dem Präfix 'ss' verbunden ist, ist mit dem voreingestellten Namensraum identisch.

      Das heißt, man kann die Elemente 'foo' dieses Namensraumes 'urn:schemas-microsoft-com:office:spreadsheet' mit Präfix 'ss' oder ohne notieren: <foo>bar</foo> oder <ss:foo>bar</ss:foo>.

      (Dennoch dürfte <foo>bar</ss:foo> ungültiges XML sein.)

      Anders bei Attributen: Diese gehören ohne Präfix nicht zum voreingestellten Namensraum. “Default namespace declarations do not apply directly to attribute names; the interpretation of unprefixed attributes is determined by the element on which they appear.” [XML-NAMES §6.2] Whatever that means: determined by the element on which they appear. (??)

      Offenbar nicht, dass sie zum Namensraum ihres Elements gehören, denn weiter unten heißt es: “the default namespace does not apply to attribute names” [XML-NAMES §6.3]

      Deshalb wurde bei Attributen der Präfix 'ss' verwendet; bei Elementen wurde er weggelassen – Geiz ist geil. ;-)

      See ya up the road,
      Gunnar

      --
      „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
    • es gibt eine Excel(2003)-Tabelle
    • aus der möchte ich eine saubere XML-Datei erhalten (reiner Zellen-Inhalt, keine unnötigen Infos)
    • die Inhalte der XML-Datei sollen später durch diverse XSLT-Stylesheets angefasst werden können.
      Gibt es dafür denn einen Königsweg?

    Nimm doch ein Makro. Mein Test sah recht vielversprechend aus.

    Siechfred

    --
    Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.