【问题标题】:Include links in exported excel file在导出的 Excel 文件中包含链接
【发布时间】: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


【解决方案1】:

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

<cfset spreadsheetSetCellFormula(sheetName
                  , 'HYPERLINK(url, linkText)'
                  , rowNumber
                  , columnNumber)>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    相关资源
    最近更新 更多