Excel genereren vanuit Invantive Cloud en UniversalSQL

Met Invantive UniversalSQL kunnen Excel-files omgezet worden via een select op een exceltable, zoals bijvoorbeeld beschreven in Combining Excel-based sales estimate with Exact Online actuals.

De andere richting - namelijk het omzetten van resultaten uit een query in Excel - is ook mogelijk vanaf versie 22.0.16. De werking is vergelijkbaar met het omzetten naar XML en JSON met, respectievelijk, for xml en for json (voorbeeld). Het lijkt ook op het omzetten naar CSV zoals beschreven in CSV genereren vanuit Invantive Cloud en UniversalSQL.

De for excel clause

Het omzetten van de resultaten van een select SQL query naar het Excel xlsx-formaat gebeurt door een for excel clause toe te voegen aan het einde van de query. Deze for excel clause zorgt er voor dat de query maar één kolom teruggeeft met in de kolom Excel de waarde die de volledige resultaten van het select-statement bevat. Er komt altijd precies één rij terug met daarin het binaire xlsx-bestand.

Via extra mogelijkheden op de for excel clause kan het uitvoerformaat gepreciseerd worden:

Het meestgebruikte (en standaard) Excel-uitvoerformaat is een werkboek met in het eerste werkblad een koprij en daarna de data met per rij één record.

Excel uitvoer van webpagina’s op app-online

De Excel xlsx-file die als uitvoer uit een query met for excel clause komt is eenvoudig terug te geven via een applicatiemodule op Invantive Cloud. Dat kan voor grootschalig gebruik ook via app-online. Vergeet in dat geval niet om het Content Type van de gegenereerde pagina in te stellen op application/vnd.openxmlformats-officedocument.spreadsheetml.sheet. Op deze wijze kunnen eenvoudig rapporten gemaakt worden die met enkele of meerdere queries Excel teruggeven voor verdere verwerking in andere pakketten of EDI.

Excel bestand wegschrijven

Het wegschrijven van het Excel-bestand vanuit Invantive Query Tool en andere on-premises producten gaat met Invantive Script. Een voorbeeld:

select Excel as blobcontents
,      'my-first-excel.xlsx' filename
from   ( select lnd_code
         ,      lnd_omschrijving
         from   bubs_landen_v@ora
         for    excel
       )

local export documents in blobcontents to "c:\temp\" filename column filename

Geheugenbeslag for xlsx

De for excel clause geeft één rij terug met één kolom. De omvang kan niet groter worden dan 2 GB. Bovendien gelden de reguliere eisen voor een Excel werkboek zoals maximaal één miljoen rijen.

Select excel kolom

De for excel achter de query verandert het aantal kolommen die uit de query terugkomen. Alle kolommen van de query verdwijnen en worden vervangen door de kolom excel die de uitkomst van een groepfunctie op de opgevraagde waarden is. Echter, dit gebeurt pas na het selecteren van de kolommen met select * of select COLUMNS.

Alhoewel het logisch is dat de for excel gebeurt na het selecteren van de op te nemen kolommen, kan het verwarrend zijn. Een query zoals:

select excel excel_new
from   dual@datadictionary
for    json auto

is niet mogelijk omdat de excel kolom al de oorspronkelijke kolommen vervangt na de selectie. Als de kolomnaam absoluut ingesteld moet worden, gebruik dan een constructie zoals:

select excel excel_new
from   ( select *
         from dual@datadictionary
         for    excel
       )