von Patrick Gundlach |

Excel nach PDF Konverter

Im letzten Beitrag habe ich schon erwähnt, dass der Publisher nun Excel-Dateien lesen und nach XML konvertieren kann. Somit eignet sich der speedata Publisher als »Excel nach PDF« Konverter. Das einzige, das man machen muss, ist eine kleine Prozedur schreiben, die die Daten bestimmten XML-Knoten zuweist.

Excel-Dateien lesen

Der erste Schritt für die Ausgabe von Excel-Dateien, diese einzulesen.

Das Gerüst (der Lua Filter) habe ich nun mehrfach beschrieben, z.B. ist das ähnlich wie bei den CSV-Dateien.

Es muss eine Lua-Datei erzeugt werden (z.B. xl2pdf.lua), die folgenden Aufbau hat:

spreadsheet, err = xlsx.open(".....xlsx")

if not spreadsheet then
    print(err)
    os.exit(-1)
end

mit dem spreadsheet-Objekt kann man auf die einzelnen Arbeitsblätter zugreifen:

-- Die Anzahl der Arbeitsblätter kann man mit dem # operator (#spreadsheet) erhalten.
ws = spreadsheet[1]
if not ws then
    os.exit(-1)
end

Nun kann man mit ws(x,y) auf die Zelle x,y zugreifen, wobei 1,1 die erste Zelle oben links ist. Die Größe des Arbeitsblattes ist in den Variablen ws.minrow, ws.maxrow und ws.mincol, ws.maxcol enthalten.

Und die XML-Daten schreiben

Die XML-Daten kann man über die Schnittstelle xml.encode_table(data) erzeugen. Wenn z.B. ein rechteckiger Bereich einfach als XML geschrieben werden soll, dann kann folgender Code benutzt werden:

local data = {}
local row, cell

data._name = "data"

for y=ws.minrow,ws.maxrow do
    row = {}
    row._name = "row"
    for x=ws.mincol,ws.maxcol do
        cell = {}
        cell._name = "cell"

        cell[1] = ws(x,y)
        row[#row + 1] = cell
    end
    data[#data + 1] = row
end

ok, err = xml.encode_table(data)
if not ok then
    print(err)
    os.exit(-1)
end

Die Ausgabe ist wieder wie bei dem CSV2PDF converter:

Das vollständig lauffähige Beispiel ist im Examples-Repository im Bereich technical zu finden.