ColdFusion XLS“导出”和字符编码

我使用HTML表格将数据从页面导出到Excel。 该表在浏览器中看起来很好,但在Excel中,特殊字符(如撇号,商标符号等)编码不正确。 如果我在记事本中打开导出的文件,并将其保存为ANSII编码,然后在Excel中打开它再次看起来不错。

我尝试使用cfcontent,setencoding和cfpagedirective在ColdFusion中设置页面编码,目前为止没有运气。 有什么build议么?

编辑:作为一个临时的解决scheme,错误的字符可以通过将导出的文件保存到磁盘,在记事本中打开,然后再保存它删除。 不完全是问题的最佳解决scheme。

至于奇怪的人物:

®成为®

™变成â¢

'变成'

这是一个编程相关的问题?

至less,你可以像编程人员一样提供一些debugging信息。 忘记撇号,你可能会指出几个不同的字符; Excel中应该是什么样的商标符号:您是否显示0,1或2个字符? 如果非零,显示什么字符? 是否有可能在公式中使用CODE()函数告诉我们你看到的字符的内部代码?

更新感谢有关有趣的人物实际上出现在屏幕上的信息。 基于这一点,以及如何设法使用记事本来解决这个问题,看起来,保存的页面已经以UTF-8格式编码,但Excel显示它就好像它是在“ANSI”代码页面中编码的,例如cp1252使用西欧语言的地方。

下一个问题:你如何创buildHTML表格? 在HTML开始附近应该有一些像charset=UTF-8 – 你看到了什么? HTML文件是否以.htm,.html或其他的扩展名保存? 你如何导入到Excel? 哪个Excel:2007,2003,其他?

你有没有考虑使用XML创buildspeadsheet? 它使文件更加臃肿,并且当您有10,000条logging时似乎有一些问题。 但是,对于中小型数据集,它工作得非常好,并提供了我期待的格式化function。

http://www.bennadel.com/blog/917-Creating-Excel-Files-With-ColdFusion-XML-And-POI.htm

我遇到了同样的问题,在Excel电子表格中显示的奇怪字符“”在我的HTML页面中不存在的时候出现。

简单地将cfcontent从<cfcontent type="application/vnd.ms-excel>改为: <cfcontent type="application/vnd.ms-excel; charset=windows-1252"> <cfcontent type="application/vnd.ms-excel; charset=windows-1252">修复了我的问题。

而不是使用HTML表格导出,您是否可以不导出为CSV并在每个项目周围都有:

 "value1","value2" 

您可以使用Java stringbuffer并创build一个queryToCSV函数,如下所示:

 <cffunction name="queryToCSV" returntype="string" access="public" output="false"> <cfargument name="query" type="query" required="true"> <cfscript> var csv = createobject( 'java', 'java.lang.StringBuffer'); var i = 1; var j = 1; var cols = ""; var headers = ""; var endOfLine = chr(13) & chr(10); if (arraylen(arguments) gte 2) headers = arguments[2]; if (arraylen(arguments) gte 3) cols = arguments[3]; if (not len( trim( cols ) ) ) cols = query.columnlist; if (not len( trim( headers ) ) ) headers = cols; headers = listtoarray( headers ); cols = listtoarray( cols ); for (i = 1; i lte arraylen( headers ); i = i + 1) csv.append( '"' & headers[i] & '",' ); csv.append( endOfLine ); for (i = 1; i lte query.recordcount; i= i + 1){ for (j = 1; j lte arraylen( cols ); j=j + 1){ if (isNumeric( query[cols[j]][i] ) ) csv.append( query[cols[j]][i] & ',' ); else csv.append( '"' & query[cols[j]][i] & '",' ); } csv.append( endOfLine ); } return csv.toString(); </cfscript> </cffunction> 

你有没有尝试在CFFile charset="utf-8" ? 如果还是不行,试试charset="windows-1252"

仅供参考:CF9可以使用CFSpreadsheet输出到.xle(不只是csv,真正的excel文件!)

首先,你试图导出到哪个版本的Excel? 2007年以下(或者可能是2003年)的任何东西都出现了错误的处理,除了默认的字符集(cp1252我相信,但我不是100%肯定的)。

正如其他人所说,你可能在cfcontent中使用了错误的字符集 – 尝试如下所示:

 <cfcontent type="application/vnd.ms-excel; charset=windows-1252"> 

如果这不是正确的字符集,你可以尝试一些其他的,如iso-8859-1或us-ascii。 请参阅http://livedocs.adobe.com/coldfusion/7/htmldocs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=ColdFusion_Documentation&file=00000232.htm以获取完整列表&#x3002;

另外你也可能想在checkout cfreport的时候也可以生成excel文件。