Die Flexperten Herrlich & Ramuschkat

ColdFusion 9: Excel zaubern

Seit ColdFusion 9 kann man mit dem Tag CFSpreadSheet oder diversen neuen Funktionen Excel-Dateien (XLS und XLSX) lesen und schreiben.

Neulich bestand in einem Kundenprojekt Reports als Excel-Dateien zu erstellen. Diese Reports hatten bereits ein Layout und sollen aktive Autofilter beinhalten. Die Lösung war, eine Excel-Datei quasi als Template zu erstellen. Dieses Template hat auch bereits aktive Autofilter. ColdFusion liest dann dieses Template ein und modifiziert dieses im Speicher (Zellen mit neuen Inhalten updaten, Formatierungen setzen, dynmaisch eine Summenformel setzen). Anschliessend wird das Excel-Objekt im Speicher wieder ins Dateisystem geschrieben.

<cfscript>
	excelobj = SpreadSheetRead("#ExpandPath('./Excel-Orders-AutoFilter.xls')#");
</cfscript>


<cfquery datasource="cfartgallery" name="ArtOrders">
	SELECT orderid, customerfirstname, customerlastname, total 
	FROM orders ORDER BY orderid
</cfquery>

<!--- SetCellValue Updatet vorhandene Zellen und behält Layout bei! --->
<cfscript>
	// Define a format for the cell.
	FormatText=StructNew();
	FormatText.font="Arial";
	FormatText.fontsize="10";
	FormatText.alignment="left";
	FormatText.bottomborder = "thin";
	FormatText.leftborder = "thin";
	FormatText.rightborder = "thin";
	FormatText.topborder = "thin";
	FormatNum=StructNew();
	FormatNum.font="Arial";
	FormatNum.fontsize="10";
	FormatNum.alignment="right";
	FormatNum.bottomborder = "thin";
	FormatNum.leftborder = "thin";
	FormatNum.rightborder = "thin";
	FormatNum.topborder = "thin";
	FormatNum.dataformat = "0.00";
</cfscript>

<cfset Zeile = 8>
<cfloop query="ArtOrders">
	<cfset SpreadsheetSetCellValue(excelobj,ArtOrders.orderid,Zeile,1)>
	<cfset SpreadsheetFormatCell(excelobj,FormatText,Zeile,1)>
	<cfset SpreadsheetSetCellValue(excelobj,ArtOrders.customerfirstname,Zeile,2)>
	<cfset SpreadsheetFormatCell(excelobj,FormatText,Zeile,2)>
	<cfset SpreadsheetSetCellValue(excelobj,ArtOrders.customerlastname,Zeile,3)>
	<cfset SpreadsheetFormatCell(excelobj,FormatText,Zeile,3)>
	<cfset SpreadsheetSetCellValue(excelobj,ArtOrders.total,Zeile,4)>
	<cfset SpreadsheetFormatCell(excelobj,FormatNum,Zeile,4)>
	<cfset Zeile = Zeile +1>
</cfloop>

<cfset rowDataStart=8>
<cfset rowDataEnd=ArtOrders.recordCount+1+8>
<cfset rowTotal=rowDataEnd+2>
<cfset totalFormula="SUM(D#rowDataStart#:D#rowDataEnd#)">

<!--- Add total formula --->
<cfset SpreadsheetSetCellValue(excelobj, "TOTAL:", rowTotal, 3)>
<cfset spreadsheetSetCellFormula(excelobj, totalFormula, rowTotal, 4)>

<!--- Format amount column as currency --->
<cfset SpreadsheetFormatColumn(excelobj, {dataformat="$00000.00"}, 4)>

<!--- Ergebnis als Excel-Datei ins Filesystem schreiben --->
<cfscript>
	SpreadSheetWrite(excelobj,"#ExpandPath('./Report.xls')#","yes");
</cfscript>

Das Excel-Template
die fertige Report.xls

Noch keine Kommentare

Einen Kommentar schreiben