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.