2012

Apr

25

Av

Exporterar du en tabell till Excel- eller merge-format skriver FileMaker automatiskt ut fältens namn på första raden i den exporterade filen. Vill du ha ett annat format på exportfilen, t.ex. tab-separerad textfil, finns det inget omedelbart sätt att få med fältnamnen överst i varje kolumn. 

Du kan förstås använda samma teknik som jag skrivit om tidigare och själv skapa en inledande post med fältens namn innan exporten görs, men du kan också exportera som XML och använda XSLT för att konvertera filen till en tab-separerad textfil. Det är inte så svårt som det hörs :) Speciellt inte när du kan ladda ner “XSLT-programmet” här.

Med hjälp av XSLT kan du konvertera innehållet i FileMaker till i princip vilket annat textbaserat filformat som helst. “XSLT-programmet” skriver du i ett ordbehandlingsprogram som kan skapa textfiler, Anteckningar på Windows eller Textredigeraren i OSX går utmärkt.

De inledande raderna i “XSLT-programmet” ser ut så här för export till tab-separerad textfil:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
      xmlns:fmp="http://www.filemaker.com/fmpxmlresult">
    <xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>

Första raden berättar att det är en XML-fil (XSLT är egentligen en XML-fil), andra raden definierar vilken version av XSLT som används och att det är FileMakers XML som ska behandlas. På tredje raden anges method=”text” som talar om att det är en textfil som ska skapas.

Sen ska alla fältnamnen exporteras, det görs med en loop som i XSLT inleds med <xsl:for-each> och avslutas med</xsl:for-each>. Mellan varje fältnamn ska det exporteras ett tab-tecken, förutom efter det sista fältnamnet, därför finns en if-sats som kontrollerar positionen av fältet. Om det inte är sista fältet exporteras tab-tecken, annars inte.

        <xsl:for-each select="fmp:METADATA/fmp:FIELD">
            <xsl:value-of select="@NAME"/>
            <xsl:if test="position()!=last()">
                <xsl:value-of select="$tab"/>
            </xsl:if>
        </xsl:for-each>

Nästa loop går genom alla raderna i tabellen och för varje rad finns det en loop som går genom alla fälten. Även här gör jag en kontroll om det är sista fältet, annars exporterar jag tab-tecken mellan fältens innehåll.

        <xsl:for-each select="fmp:RESULTSET/fmp:ROW">
            <xsl:for-each select="fmp:COL">
                <xsl:value-of select="fmp:DATA"/>
                <xsl:if test="position()!=last()">
                    <xsl:value-of select="$tab"/>
                </xsl:if>
            </xsl:for-each>
            <xsl:value-of select="$crlf"/>
        </xsl:for-each>

Två variabler är definierade i “XSLT-programmet”, en för tab (heter tab) och en för ny rad (heter crlf). Just “ny rad” är lite speciell, FileMaker får för sig att lägga till ett extra CR-tecken (ASCII 13) vilket kan leda till bekymmer vid import i annat program. Det har varit så sen FileMaker 6, kanske någon som har en lösning?

    <xsl:variable name="tab"><xsl:text>&#9;</xsl:text></xsl:variable>
    <xsl:variable name="crlf"><xsl:text>&#13;&#10;</xsl:text></xsl:variable>

Du kan ladda ner hela XSLT-programmet här.

xslt_text_tab.zip (525,00 bytes)

Packa upp zip-filen och spara det på din hårddisk innan du använder det i någon export.

Du använder det genom att välja kommandot Exportera poster i FileMaker och att du vill exportera till filformatet XML. Du anger sedan filnamnet, t.ex. “export.txt”, och väljer XSLT-programmet som du laddat ner innan du exporterar.

Skriv en kommentar

  • (will not be published)
  • + 9 = thirteen

Läs också: