Export from GnuCash to Gnumeric
Zach Garner
zach@neurosoft.org
04 Mar 2002 15:21:56 -0600
--=-0cxq10g6y6n80STo18jC
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
I have spent a couple hours learning some XML and hacked an XSL file to
convert from a GnuCash Account file to a Gnumeric spreadsheet. It is
very rough at this point. Downloaded it at
http://www.neurosoft.org/gnucash/gnumeric_xsl , or get it from the
attachment.
A couple of obvious (and major) problems:
1. Gnucash does not define its Namespaces properly. For XSL to work, you
have to edit the Account file, and change <gnc-v2> to:
<gnc-v2 xmlns:act="http://www.gnucash.org/act"
xmlns:gnc="http://www.gnucash.org/gnc"
xmlns:trn="http://www.gnucash.org/trn"
xmlns:ts="http://www.gnucash.org/ts"
xmlns:split="http://www.gnucash.org/split">
These are just bogus values. The Gnucash project needs to properly
define the namespaces; this has been mentioned before on this list.
2. I haven't been able to properly connect the Account Name and the
Account ID within the spreadsheet. This causes the transactions to be
listed by the ID instead of by the name.
---
To use with Apache Xalan, execute
$ java org.apache.xalan.xslt.Process -in Accounts.gnucash -xsl
gnumeric.xsl -out Accounts.gnumeric
---
Suggestions/Criticism/etc welcome.
I'm doing this for my own benefit, but I would like to know if this
would be useful to the project. I'm curious if this might be better
implemented as a SXSL (scheme XSL: http://okmij.org/ftp/Scheme/xml.html)
thanks,
Zach Garner
p.s. I sent a similar message little while back, but it apparently
didn't make it because the maintainer is behind. (that's OK though!)
--=-0cxq10g6y6n80STo18jC
Content-Disposition: attachment; filename=gnumeric.xsl
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=ISO-8859-1
<?xml version=3D"1.0"?>
<!--
- Copyright (c) 2002 Zach Garner. All rights reserved.
-=20
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. All advertising materials mentioning features or use of this softwar=
e
- must display the following acknowledgement:
- This product includes software developed by the University of
- California, Berkeley and its contributors.
- 4. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this softwar=
e
- without specific prior written permission.
-=20
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURP=
OSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABL=
E
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STR=
ICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-->
<xsl:stylesheet version=3D"1.0"
xmlns:gnc=3D"http://www.gnucash.org/gnc"
xmlns:act=3D"http://www.gnucash.org/act"
xmlns:trn=3D"http://www.gnucash.org/trn"
xmlns:ts=3D"http://www.gnucash.org/ts"
xmlns:split=3D"http://www.gnucash.org/split"
xmlns:xsl=3D"http://www.w3.org/1999/XSL/Transform">
<xsl:output indent=3D"yes"/>
<xsl:template match=3D"/">
<gmr:Workbook xmlns:gmr=3D"http://www.gnumeric.org/v10.dtd" xmlns:xsi=3D"ht=
tp://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=3D"http://www.g=
numeric.org/v8.xsd">
<gmr:Attributes>
<gmr:Attribute>
<gmr:name>WorkbookView::show_horizontal_scrollbar</gmr:name>
<gmr:type>4</gmr:type>
<gmr:value>TRUE</gmr:value>
</gmr:Attribute>
<gmr:Attribute>
<gmr:name>WorkbookView::show_vertical_scrollbar</gmr:name>
<gmr:type>4</gmr:type>
<gmr:value>TRUE</gmr:value>
</gmr:Attribute>
<gmr:Attribute>
<gmr:name>WorkbookView::show_notebook_tabs</gmr:name>
<gmr:type>4</gmr:type>
<gmr:value>TRUE</gmr:value>
</gmr:Attribute>
<gmr:Attribute>
<gmr:name>WorkbookView::do_auto_completion</gmr:name>
<gmr:type>4</gmr:type>
<gmr:value>TRUE</gmr:value>
</gmr:Attribute>
</gmr:Attributes>
<gmr:Summary>
<gmr:Item>
<gmr:name>application</gmr:name>
<gmr:val-string>gnumeric</gmr:val-string>
</gmr:Item>
<gmr:Item>
<gmr:name>author</gmr:name>
<gmr:val-string>Zach Garner</gmr:val-string>
</gmr:Item>
</gmr:Summary>
<gmr:SheetNameIndex>
<gmr:SheetName>Sheet1</gmr:SheetName>
</gmr:SheetNameIndex>
<gmr:Names/>
<gmr:Geometry Width=3D"1166" Height=3D"746"/>
<gmr:Sheets>
<gmr:Sheet DisplayFormulas=3D"false" HideZero=3D"false" HideGrid=3D"fal=
se" HideColHeader=3D"false" HideRowHeader=3D"false" DisplayOutlines=3D"true=
" OutlineSymbolsBelow=3D"true" OutlineSymbolsRight=3D"true">
<gmr:Name>Sheet1</gmr:Name>
<gmr:MaxCol>1</gmr:MaxCol>
<gmr:MaxRow>0</gmr:MaxRow>
<gmr:Zoom>1.000000</gmr:Zoom>
<gmr:Names/>
<gmr:PrintInformation>
<gmr:Margins>
<gmr:top Points=3D"28.3" PrefUnit=3D"cm"/>
<gmr:bottom Points=3D"28.3" PrefUnit=3D"cm"/>
<gmr:left Points=3D"28.3" PrefUnit=3D"cm"/>
<gmr:right Points=3D"28.3" PrefUnit=3D"cm"/>
<gmr:header Points=3D"14.2" PrefUnit=3D"cm"/>
<gmr:footer Points=3D"14.2" PrefUnit=3D"cm"/>
</gmr:Margins>
<gmr:Scale type=3D"percentage" percentage=3D"100"/>
<gmr:vcenter value=3D"0"/>
<gmr:hcenter value=3D"0"/>
<gmr:grid value=3D"0"/>
<gmr:even_if_only_styles value=3D"0"/>
<gmr:monochrome value=3D"0"/>
<gmr:draft value=3D"0"/>
<gmr:titles value=3D"0"/>
<gmr:repeat_top value=3D""/>
<gmr:repeat_left value=3D""/>
<gmr:order>r_then_d</gmr:order>
<gmr:orientation>landscape</gmr:orientation>
<gmr:Header Left=3D"" Middle=3D"&[TAB]" Right=3D""/>
<gmr:Footer Left=3D"" Middle=3D"Page &[PAGE]" Right=3D""/>
<gmr:paper>A4</gmr:paper>
</gmr:PrintInformation>
<gmr:Styles>
<gmr:StyleRegion startCol=3D"0" startRow=3D"0" endCol=3D"0" endRow=
=3D"65535">
<gmr:Style HAlign=3D"1" VAlign=3D"2" WrapText=3D"0" Orient=3D"1" =
Shade=3D"0" Indent=3D"0" Locked=3D"1" Hidden=3D"0" Fore=3D"0:0:0" Back=3D"F=
FFF:FFFF:FFFF" PatternColor=3D"0:0:0" Format=3D"m/d/yy">
<gmr:Font Unit=3D"9" Bold=3D"0" Italic=3D"0" Underline=3D"0" St=
rikeThrough=3D"0">Helvetica</gmr:Font>
<gmr:StyleBorder>
<gmr:Top Style=3D"0"/>
<gmr:Bottom Style=3D"0"/>
<gmr:Left Style=3D"0"/>
<gmr:Right Style=3D"0"/>
<gmr:Diagonal Style=3D"0"/>
<gmr:Rev-Diagonal Style=3D"0"/>
</gmr:StyleBorder>
</gmr:Style>
</gmr:StyleRegion>
<gmr:StyleRegion startCol=3D"1" startRow=3D"0" endCol=3D"255" endRo=
w=3D"65535">
<gmr:Style HAlign=3D"1" VAlign=3D"2" WrapText=3D"0" Orient=3D"1" =
Shade=3D"0" Indent=3D"0" Locked=3D"1" Hidden=3D"0" Fore=3D"0:0:0" Back=3D"F=
FFF:FFFF:FFFF" PatternColor=3D"0:0:0" Format=3D"General">
<gmr:Font Unit=3D"9" Bold=3D"0" Italic=3D"0" Underline=3D"0" St=
rikeThrough=3D"0">Helvetica</gmr:Font>
<gmr:StyleBorder>
<gmr:Top Style=3D"0"/>
<gmr:Bottom Style=3D"0"/>
<gmr:Left Style=3D"0"/>
<gmr:Right Style=3D"0"/>
<gmr:Diagonal Style=3D"0"/>
<gmr:Rev-Diagonal Style=3D"0"/>
</gmr:StyleBorder>
</gmr:Style>
</gmr:StyleRegion>
</gmr:Styles>
<gmr:Cols DefaultSizePts=3D"48">
<gmr:ColInfo No=3D"0" Unit=3D"48" MarginA=3D"2" MarginB=3D"2" Count=
=3D"2"/>
</gmr:Cols>
<gmr:Rows DefaultSizePts=3D"12.8">
<gmr:RowInfo No=3D"0" Unit=3D"12.8" MarginA=3D"1" MarginB=3D"0"/>
</gmr:Rows>
<gmr:Selections CursorCol=3D"1" CursorRow=3D"7">
<gmr:Selection startCol=3D"1" startRow=3D"7" endCol=3D"1" endRow=3D=
"7"/>
</gmr:Selections>
<gmr:Cells>
<xsl:apply-templates/>
</gmr:Cells>
<gmr:SheetLayout TopLeft=3D"A1"/>
<gmr:Solver TargetCol=3D"-1" TargetRow=3D"-1" ProblemType=3D"1" Input=
s=3D""/>
</gmr:Sheet>
</gmr:Sheets>
<gmr:UIData SelectedTab=3D"0"/>
</gmr:Workbook>
</xsl:template>
<xsl:template match=3D"gnc-v2">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match=3D"gnc:count-data">
</xsl:template>
<!-- output comma delimited account information -->
<xsl:template match=3D"gnc:account">
<gmr:Cell Col=3D"5" ValueType=3D"60"><xsl:attribute name=3D"Row"><xsl:numb=
er level=3D"any"/></xsl:attribute><xsl:value-of select=3D"act:name"/></gmr:=
Cell>
<gmr:Cell Col=3D"6" ValueType=3D"60"><xsl:attribute name=3D"Row"><xsl:numb=
er level=3D"any"/></xsl:attribute><xsl:value-of select=3D"act:type"/></gmr:=
Cell>
<gmr:Cell Col=3D"7" ValueType=3D"60"><xsl:attribute name=3D"Row"><xsl:numb=
er level=3D"any"/></xsl:attribute><xsl:value-of select=3D"act:id"/></gmr:Ce=
ll>
</xsl:template>
<xsl:template match=3D"gnc:transaction">
<xsl:for-each select=3D"trn:splits/trn:split">
<gmr:Cell Col=3D"0" ><xsl:attribute name=3D"Row"><xsl:number level=3D"any=
"/></xsl:attribute>=3Ddatevalue(left("<xsl:value-of select=3D"../../trn:dat=
e-posted/ts:date"/>", 10))</gmr:Cell>
<gmr:Cell Col=3D"1" ValueType=3D"60"><xsl:attribute name=3D"Row"><xsl:num=
ber level=3D"any"/></xsl:attribute><xsl:value-of select=3D"../../trn:descri=
ption"/></gmr:Cell>
<gmr:Cell Col=3D"2"><xsl:attribute name=3D"Row"><xsl:number level=3D"any"=
/></xsl:attribute>=3D<xsl:value-of select=3D"split:value"/></gmr:Cell>
<gmr:Cell Col=3D"3" ValueType=3D"60"><xsl:attribute name=3D"Row"><xsl:num=
ber level=3D"any"/></xsl:attribute><xsl:value-of select=3D"split:account"/>=
</gmr:Cell>
<gmr:Cell Col=3D"4" ValueType=3D"60"><xsl:attribute name=3D"Row"><xsl:num=
ber level=3D"any"/></xsl:attribute>
<xsl:value-of select=3D"/gnc-v2/gnc:account[act:id=3Dsplit:account]"/>
</gmr:Cell>
<!--
<gmr:Cell Col=3D"4" ValueType=3D"60"><xsl:attribute name=3D"Row"><xsl:num=
ber level=3D"any"/></xsl:attribute><xsl:for-each select=3D"/gnc-v2/gnc:acco=
unt"><xsl:if test=3D"act:id=3Da"></xsl:if></xsl:for-each></gmr:Cell>
-->
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
--=-0cxq10g6y6n80STo18jC--