xsl-list
[Top] [All Lists]

Re: [xsl] generating Office Open XML parts using xslt

2014-07-25 23:04:27
I appreciate all the kind interest in this topic. I will set the
difficulty warnings aside for now because I believe the potential
benefits of this approach are worth some effort.

Thanks to Pavel Ptacek's xsl-excel-engine [1], recommended by Vincent
Lizzi, I was able to get a leg up on this effort.

See below for an Xproc pipeline definition that creates a minimal blank
spreadsheet (.xlsx) that can be opened without incident in Excel 2007.
It uses the Exproc [2] extension step pxp:zip (as implemented in
calabash [3]) to produce the xlsx package.

Apologies to those who don't speak xproc, and further apologies since
there is not a line of xslt in it. But imagine that any of the
input[@port='source']/inline elements in the <pxp:zip> step can be
replaced with the results of whatever transformations you like, and this
becomes a very powerful tool. In particular, it should be
straightforward to transform an fo:table to a workbook sheet.

Regards,
--Paul

[1] https://github.com/foglcz/xsl-excel-engine
[2] http://exproc.org/
[3] http://xmlcalabash.com/

Run with calabash like:

java -jar calabash.jar ooxml.xpl
output-file=file://path/to/output.xlsx

============== ooxml.xpl ===============
<declare-step name="ooxml-proc"
              xmlns="http://www.w3.org/ns/xproc";
              xmlns:pxp="http://exproc.org/proposed/steps";
              version="1.0">

  <option name="output-file"/>

  <output port="result" primary="true"/>
  <serialization port="result" indent="true"/>

  <import
href="http://xmlcalabash.com/extension/steps/library-1.0.xpl"/>

  <pxp:zip command="create">
    <with-option name="href" 
                 select="$output-file"/>
    <input port="source">
      <inline xml:base="http://example.org/sheet1";>
        <worksheet 
            xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main";>
          <sheetData />
        </worksheet>
      </inline>
      <inline xml:base="http://example.org/workbook";>
        <workbook 

xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"; 
            xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main";>
          <sheets>
            <sheet name="Sheet1" sheetId="1" r:id="rId1"/>
          </sheets>
        </workbook>
      </inline>
      <inline xml:base="http://example.org/content-types";>
        <Types
xmlns="http://schemas.openxmlformats.org/package/2006/content-types";>
          <Default Extension="rels"
ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
          <Default Extension="xml" ContentType="application/xml"/>
          <Override 
              PartName="/workbook.xml"

ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>
          <Override 
              PartName="/sheet1.xml" 

ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
        </Types>
      </inline>
      <inline xml:base="http://example.org/package-rels";>
        <Relationships
xmlns="http://schemas.openxmlformats.org/package/2006/relationships";>
          <Relationship 
              Id="rId1" 

Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";
 
              Target="workbook.xml"/>
        </Relationships>
      </inline>
      <inline xml:base="http://example.org/workbook-rels";>
        <Relationships
xmlns="http://schemas.openxmlformats.org/package/2006/relationships";>
          <Relationship 
              Id="rId1"

Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet";
              Target="sheet1.xml"/>
        </Relationships>
      </inline>
    </input>
    <input port="manifest">
      <inline>
        <zip-manifest xmlns="http://www.w3.org/ns/xproc-step";>
          <entry name="sheet1.xml" href="http://example.org/sheet1"/>
          <entry name="workbook.xml" href="http://example.org/workbook"/>
          <entry name="[Content_Types].xml"
href="http://example.org/content-types"/>
          <entry name="_rels/.rels" href="http://example.org/package-rels"/>
          <entry name="_rels/workbook.xml.rels"
href="http://example.org/workbook-rels"/>
        </zip-manifest>
      </inline>
    </input>
  </pxp:zip>

</declare-step>
================== end of file ===============



On Fri, 2014-07-25 at 13:51 +0000, Eliot Kimber ekimber(_at_)contrext(_dot_)com
wrote:
If you can use Java, the Apache POI library makes reading and writing MS
Office formats about as easy as it can be. I've successfully used the
libraries to read and write non-trivial Excel spreadsheets and also to
generate Powerpoint slides (although the current support for Powerpoint is
less complete than for Excel). It would be a significant development
effort to build equivalent infrastructure in XSLT and I would be loath to
take it on.

For powerpoint generation I used the technique of using an intermediate
XML format that abstracts slides and then Java code that transforms that
XML into Powerpoint using the POI library. That makes it possible to use
XSLT to generate the slide content but avoids having to deal with the
Office Open complexity in XSLT. The code is the The Slidinator project on
Github (https://github.com/drmacro/slidinator).

Cheers,

E.
—————
Eliot Kimber, Owner
Contrext, LLC
http://contrext.com




On 7/25/14, 7:28 AM, "Nicolas BUONOMO 
nicolas(_dot_)buonomo(_at_)cnafmail(_dot_)fr"
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

Hi,

You can also generating Open Document spreedsheets (xls) and then convert
them to xlsx document with
libreoffice for exemple.
I think that generating Open Document Format is more easy than generating
Office Open XML. I have do it in
some simple case.

Nicolas

On 25/07/2014 03:02, Paul Tyson phtyson(_at_)sbcglobal(_dot_)net wrote:
Does anyone know of success stories in generating Office Open XML
artifacts using XSLT?

(This is the "open" format used by Microsoft Office since 2007,
standardized in ISO/IEC 29500 and ECMA-376.)

I am looking for pointers to solid documentation of namespaces and
package structure, particularly for SpreadsheetML (Microsoft's .xlsx
format) as used in Excel 2007.

Thanks in advance,
--Paul



-- 
Nicolas BUONOMO
CNAF - CNEDI Rhône Alpes
DSI - Direction Fonctionnelle et Processus
Relation avec les Collectivités Territoriales
Tél : 0478636669 / 0677877811
Mél : nicolas(_dot_)buonomo(_at_)cnafmail(_dot_)fr



--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>