3

我正在创建一个查询,然后将其下载到一个 Excel 文档中。我想在 excel 文档中包含一些链接,但不知道该怎么做。我尝试只在值中放置一个锚标记querySetCell(),但这只是在 excel 文件中打印 html,html 没有被解析。我用的是CF10。以下是我的代码,不胜感激。

<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">


更新:我根据评论对我的代码进行了一些更改。链接现在确实显示在 excel 文档中,但“友好名称”显示为 0,直到我单击 excel 中的“启用编辑”按钮。如果从一开始就显示友好名称会很好,但如果不可能,或者取决于用户设置,这应该没问题。

<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">
4

1 回答 1

5

确保在调用 ColdFusion 的 SpreadsheetSetCellFormula() 函数时调用 Excel 的 Hyperlink() 函数。

<cfset spreadsheetSetCellFormula(sheetName
                  , 'HYPERLINK(url, linkText)'
                  , rowNumber
                  , columnNumber)>
于 2014-07-17T15:47:00.947 回答