gpt4 book ai didi

excel - ColdFusion:如何生成电子表格而不将其另存为文件?

转载 作者:行者123 更新时间:2023-12-02 10:10:15 24 4
gpt4 key购买 nike

在 ColdFusion 应用程序中,我需要让用户能够将电子表格保存到他们的硬盘上。

我已经能够通过将文件构建为 XML 或 HTML 表并应用 application/vnd.ms-excel 来动态生成文件。 MIME 类型,并使用 .xls 保存它们扩展名。

<cfheader name="Content-Disposition" value="attachment; filename=MySpreadsheet.xls"> 
<cfcontent type="application/vnd.ms-excel">

但是当用户加载这样的文件时,他们总是会收到一条恼人的消息(由于 Excel's Extension Hardening Feature ):

The file you are trying to open, '_____.xls', is in a different format than specified by the file extension. Verify that the file is not corrupted and is from a trusted source before opening the file. Do you want to open the file now?

我宁愿避免收到此消息。

我了解<cfspreadsheet>标签和SpreadsheetWrite()函数将生成一个不显示此消息的正确 Excel 文件,但它们都需要一个参数来指示文件将写入服务器上的何处。由于下载的内容可能包含敏感信息,而且一旦将文件写入服务器,我就无法轻松实现安全性,因此我不想创建这样的文件——即使是暂时的。 (我知道我可以提供密码,但是在 Excel 文件生成后将被使用的业务流程上下文中,这不是一个理想的解决方案。)

如何生成 Excel 文件并提示下载,无需先将其写入文件?

最佳答案

在针对这个问题搜索 Stack Overflow 和其他资源后,我终于在另一个问题的上下文中找到了解决方案。我现在将问题和我的发现发布在这里,希望其他人能比我更容易地找到这些信息。

解决方案围绕 SpreadsheetReadBinary() 展开函数和 variable <cfcontent> 中的属性标签。

我使用 ColdFusion spreadsheet functions 构建了一个电子表格,然后将以下内容放在文件的末尾(与我将 <cfheader><cfcontent> 放在开头的习惯相反)。

<cfheader name="Content-Disposition" value="attachment; filename=MySpreadsheet.xls"> 
<cfcontent type="application/vnd.ms-excel" variable="#SpreadsheetReadBinary( objSpreadsheet )#">

如果有人想从更多详细信息中受益,请参阅 .cfm 中的以下内容文件将构建电子表格并提示下载为格式正确的 Excel 文件:

<!---
Building a spreadsheet that looks like:

+-----+-----+-----+
| FOO | BAR | BAZ |
+-----+-----+-----+
| 101 | 102 | 103 |
+-----+-----+-----+
| 201 | 202 | 203 |
+-----+-----+-----+

--->


<!--- Create a new spreadsheet. --->
<cfset objSpreadsheet = SpreadsheetNew()>

<!--- Create and format the header row. --->
<cfset SpreadsheetAddRow( objSpreadsheet, "FOO,BAR,BAZ" )>
<cfset SpreadsheetFormatRow( objSpreadsheet, {bold=TRUE, alignment="center"}, 1 )>

<!--- Populate the spreadsheet. --->
<!--- In a real situation, this would be looped programmatically; it is done cell-by-cell here for readability. --->
<cfset SpreadsheetSetCellValue( objSpreadsheet, 101, 2, 1, "NUMERIC" ) >
<cfset SpreadsheetSetCellValue( objSpreadsheet, 102, 2, 2, "NUMERIC" ) >
<cfset SpreadsheetSetCellValue( objSpreadsheet, 103, 2, 3, "NUMERIC" ) >
<cfset SpreadsheetSetCellValue( objSpreadsheet, 201, 3, 1, "NUMERIC" ) >
<cfset SpreadsheetSetCellValue( objSpreadsheet, 202, 3, 2, "NUMERIC" ) >
<cfset SpreadsheetSetCellValue( objSpreadsheet, 203, 3, 3, "NUMERIC" ) >

<cfheader name="Content-Disposition" value="attachment; filename=MySpreadsheet.xls">
<cfcontent type="application/vnd.ms-excel" variable="#SpreadsheetReadBinary( objSpreadsheet )#">

关于excel - ColdFusion:如何生成电子表格而不将其另存为文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38615114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com