【发布时间】:2014-07-16 19:49:26
【问题描述】:
我正在创建一个查询,然后将其下载到一个 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">
更新:
我根据 cmets 对我的代码进行了一些更改。链接现在确实显示在 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">
【问题讨论】:
-
在我看来,您可能需要使用 Excel
HYPERLINK函数。因此,将=HYPERLINK(link_location,friendly_name)添加到您的单元格应该可以得到什么。 (我没有要测试的系统。) -
@FishBelowtheIce 这几乎行得通。它首先以纯文本形式打印该函数,但是一旦我单击单元格并按 Enter 键,它就会运行该函数并创建链接。一种奇怪的行为海事组织..
-
对 hyperlink() 的调用是否用 SpreadsheetSetCellFormula() 封装?
-
@AdrianJ.Moreno 通话未完成,但现在已完成,并且链接有效。但是,友好名称显示为“0”,直到在 Excel 中单击“启用编辑”按钮。有什么我可以做的吗?我用新代码更新了问题。
-
我认为在 受保护的视图 中打开 excel 时我无能为力,因为它是一个 excel 设置。你们谁能写一个答案,我会标记它已接受。
标签: excel coldfusion export-to-excel coldfusion-10 cfspreadsheet