Reputation: 2777
I am creating a query and then downloading it into an excel document. I would like to include some links inside the excel document but cannot figure out how to do it. I tried just putting an anchor tag in the querySetCell()
value, but that just prints the html inside the excel file, the html does not get parsed. I'm using CF10. Below is my code, any advice is appreciated.
<cfset q = queryNew("#columnNames#")>
<cfset queryAddRow(q)>
<cfset querySetCell(q, "Attributes", "Part Number")>
<cfset querySetCell(q, "PrimaryPart", "#local.primaryPart.getProductNumber()#")>
<cfset i = 0>
<cfloop array="#local.comparableParts#" index="part">
<cfset i++>
<cfset querySetCell(q, "alternatePart"& i, "#part.getPartNumber()#")>
</cfloop>
<cfspreadsheet action="write" query="q" filename="partCompare.xls" overwrite="true" />
<!--- Make a spreadsheet object --->
<cfset s = spreadsheetNew()>
<!--- Add header row --->
<cfset spreadsheetAddRow(s, "#columnNames#")>
<!--- format header --->
<cfset spreadsheetFormatRow(s, {bold=true, fgcolor="lemon_chiffon"}, 1)>
<cfset spreadsheetAddRows(s, q)>
<cfheader name="content-disposition" value="attachment; filename=partCompare.xls">
<cfcontent type="application/msexcel" variable="#spreadsheetReadBinary(s)#" reset="true">
UPDATE:
I made some changes to my code based on the comments. The links do show up in the excel document now, but the 'friendly name' shows as a 0 until I click the 'enable editing' button in excel. It would be nice if the friendly name is displayed from the beginning but if it is not possible, or depends on user settings, this should be fine.
<cfset partCompareQueryObj = queryNew("#columnNames#")>
<cfset queryAddRow(partCompareQueryObj)>
<cfset querySetCell(partCompareQueryObj, "Attributes", "Part Number")>
<cfset querySetCell(partCompareQueryObj, "PrimaryPart", "#local.primaryPart.getProductNumber()#")>
<cfset i = 0>
<cfloop array="#local.comparableParts#" index="part">
<cfset i++>
<cfset querySetCell(partCompareQueryObj, "alternatePart"& i, "#part.getPartNumber()#")>
</cfloop>
<cfspreadsheet action="write" query="partCompareQueryObj" filename="partCompare.xls" overwrite="true" />
<!--- Make a spreadsheet object --->
<cfset partCompareSpreadSheet = spreadsheetNew()>
<!--- Add header row --->
<cfset spreadsheetAddRow(partCompareSpreadSheet, "#columnNames#")>
<!--- format header --->
<cfset spreadsheetFormatRow(partCompareSpreadSheet, {bold=true, fgcolor="lemon_chiffon"}, 1)>
<cfset spreadsheetAddRows(partCompareSpreadSheet, partCompareQueryObj)>
<cfset SpreadsheetSetCellFormula(partCompareSpreadSheet, 'HYPERLINK("http://www.google.com","#local.primaryPart.getProductNumber()#")', 2, 2)>
<cfset i = 0>
<cfloop array="#local.comparableParts#" index="part">
<cfset i++>
<cfset SpreadsheetSetCellFormula(partCompareSpreadSheet, 'HYPERLINK("http://www.google.com","#local.primaryPart.getProductNumber()#")', 2, i+2)>
</cfloop>
<cfheader name="content-disposition" value="attachment; filename=partCompare.xls">
<cfcontent type="application/msexcel" variable="#spreadsheetReadBinary(partCompareSpreadSheet)#" reset="true">
Upvotes: 3
Views: 1636
Reputation: 14859
Make sure to wrap a call to Excel's Hyperlink() function with a call to ColdFusion's SpreadsheetSetCellFormula() function.
<cfset spreadsheetSetCellFormula(sheetName
, 'HYPERLINK(url, linkText)'
, rowNumber
, columnNumber)>
Upvotes: 5