Api > Excel
Met de update van versie 2.0.9 is het mogelijk om XLSX bestanden te lezen en te maken in nodum. Dit betekend dat je data in Excel en ook Google Spreadsheets kunt importeren en uit Excel/Spreadsheets kunt exporteren naar nodum
3 API's maken het mogelijk om Excelbestanden te lezen en te schrijven.
- api.Excel_Write( array objectWithData, [ array objectFormatting])
- api Excel_Read( mixed (object / string) fileData, [ string documentType = 'Excel2007', bool withMetaData = false, bool orderRowCol = true ] )
- api Excel_ReadToCSV( mixed (object / string) fileData, string documentType = 'Excel2007' )
Import
api.Excel_Read( mixed (object / string) fileData, [ string documentType = 'Excel2007', bool withMetaData = false, bool orderRowCol = true ] )
Met de api.Excel_Read lees je een Excelbestand, en geeft een array terug met kolommen en rijen en de waarden van cellen per werkblad. Een documenttype dient opgegeven te worden als het document geen Excel2007 formaat heeft. Optioneel kan de meta-data terug worden gegeven van het Excelbestand (zoals de auteur e.d.) en is het mogelijk de Row/Col volgorde van datateruggave om te zetten naar Col/Row.
Geldige document-types zijn:
- Excel2007
- Excel5
- OOCalc
- SYLK
- Excel2003XML
- Gnumeric
{% set xlsdata = api.IO_staticFile('test.xlsx').get %}
{{ api.Excel_Read( xlsdata )|pre }}
Je krijgt vervolgens in een array de data per Excel werkmap te zien. Je kan hierbij kiezen om per rij je data te groeperen of per kolom. Het verschil hier tussen wordt duidelijk met een voorbeeld.
Een voorbeeld om per rij data te tonen.
Een voorbeeld om per kolom data te tonen.
Met de update van versie 2.1.3 is het mogelijk om de kolomtitels als key te gebruiken. De waarden uit de rijen worden hieronder gemerged. Zo zijn het niet meer de letters (kolommen) of cijfers (rijen) die worden getoont maar de gewenste titels.
{% set data = api.IO_staticFile('test.xlsx').get %}
{% set data = api.Excel_Read(data, 'Excel2007', false, false , true ) %}
{{ data|pre }}
Array
(
[Blad1] => Array
(
[2]=> Array
(
[Naam] => Kevin Koobs
[Functie] => Developer
[E-mail] =>Kevin@nodum.io
[Telefoon] => 0612345678
)
[3] => Array
(
[Naam] => José van Laar
[Functie] => Procesbeheer
[E-mail] =>jose@nodum.io
[Telefoon] => 0612345678
)
)
)
Export
api.Excel_Write( array objectWithData, [ array objectFormatting ] )
Hiermee schrijf je een array naar een nieuw Excel bestand (1e werkblad). Het eerste argument dient de data te bevatten, en zal worden omgezet regels en rijen. Het tweede argument is optioneel, en bevat een object met een rij / kolom / cel als key, en als waarde een van de volgende drie opties:
- Een string: HTML Hex achtergrondkleur
- Een array met 2 strings; 1e argument = HTML Hex achtergrondkleur, 2e argument = HTML Hex voorgrond (tekst) kleur
- Een Object met meerdere opmaakinstellingen, zoals background, color, bold, size, name (font) en italic
Nodum past automatisch al de kolombreedte aan de data. En herkent al een aantal veldtypes, zoals datum, tijd, nummeriek, tekst, decimalen. Hierdoor maakt nodum bij decimale getallen van punten al komma's zoals wenselijk is in Excel. Nodum ziet de eerste rij van een excelwerkmap als titelrij, daarom geeft hij deze rij al automatisch filter opties mee.
Gegevens bewerken
In nodum kan je gegevens ook bewerken. Hiervoor voeg je argumenten toe in de tweede argumentenreeks. Je kan de argumenten per rij, per kolom of per cel toevoegen. In de tweede argumentenreeks kan je strings toevoegen, voeg je 1 string toe dan zal die betrekking hebben op de achtergrondkleur. Bij twee strings wordt de eerste string de achtergrondkleur en de tweede string de kleur van de tekens. Een voorbeeld hiervan zie je in onderstaande code.
{% set xlsdata = api.Excel_Write([
[ 'Naam' , 'Leeftijd', 'Geboortedatum' ],
[ "Wietse" , 28, '08-01-1988' ],
[ "Pepper" , 5, '17-01-2011' ],
[ "" , '=SUM(B2:B3)', '' ]
], {
C : 'ccc',
B4 : {
background : 'CA0000',
color : 'FFFFFF',
bold : true,
size : 15,
name : "Verdana" ,
italic : true
},
1 : [ 'FFCC00', 'CA0000']
}) %}
{# Voorbeeld #}
{{ xlsdata|pre }}
{# Wegschrijven #}
{% do api.IO_staticFile(xlsdata.name).set(xlsdata.data) %}
Read to CSV
api.Excel_ReadToCSV( mixed (object / string) fileData, string documentType = 'Excel2007' )
Hiermee kan je een Excelbestand lezen, en de data (per werkblad) omzetten in een "file" object met CSV data. Zie voor de geldige document-types: api.Excel_Read
{% set data = api.IO_staticFile('1.xlsx').get() %}
{# Let op! Er kunnen meerdere files (werkbladen) in één xlsx bestand zitten#}
{% for file in api.Excel_ReadToCSV(data).files %}
{% do api.IO_staticFile(file.name).set(file.data) %}
{% endfor %}