我使用HTML表格将数据从页面“导出”到Excel。该表在浏览器中看起来很好,但在Excel中,特殊字符(如撇号,商标符号等)编码不正确。如果我在记事本中打开导出的文件并将其保存为ANSII编码,然后在Excel中打开它,一切看起来都很好。
我尝试使用cfcontent,setencoding和cfpagedirective在ColdFusion中设置页面编码,但到目前为止没有运气。有什么建议吗?
编辑:作为临时解决方法,可以通过将导出的文件保存到磁盘,在记事本中打开它,然后再次保存来删除错误的字符。不完全是问题的最佳解决方案。
至于奇怪的人物:
®成为®
™成为â€
'成为
答案 0 :(得分:2)
我遇到了同样的问题,我的Excel电子表格中出现了一个奇怪的字符“”,当时它出现在我的HTML页面中。
只需更改cfcontent:<cfcontent type="application/vnd.ms-excel>
to: <cfcontent type="application/vnd.ms-excel; charset=windows-1252">
为我解决了这个问题。
答案 1 :(得分:1)
您是否考虑过使用XML创建speadsheet?它使文件变得更加臃肿,并且当你有10,000+记录时似乎有一些问题。但是,对于中小型数据集,它可以很好地工作,并提供我正在寻找的格式化功能。
http://www.bennadel.com/blog/917-Creating-Excel-Files-With-ColdFusion-XML-And-POI.htm
答案 2 :(得分:0)
不是使用HTML表导出,而是不能导出到CSV并且每个项目周围都有这样的内容:
"value1","value2"
您可以使用Java stringbuffer并创建一个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>
答案 3 :(得分:0)
您是否在charset="utf-8"
中尝试了CFFile
?如果仍然无效,请尝试charset="windows-1252"
?
仅供参考:CF9可以CFSpreadsheet
答案 4 :(得分:0)
首先,您要导出的Excel版本是什么?除了默认字符集(cp1252我相信但是我对此并不是100%肯定)之外,2007年以下(或可能是2003年)的任何事情都是出了名的糟糕处理。
正如其他人所说,你可能在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。
另外,您也可以在生成excel文件时签出cfreport。
答案 5 :(得分:-2)
这是一个与编程相关的问题吗?
至少,您可以像程序员一样制作并提供一些调试信息。忘记撇号,你可以指出几个不同的角色;什么应该是商标符号在Excel中看起来像:你会显示0,1或2个字符吗?如果非零,则显示哪些字符?您是否可以在公式中使用CODE()函数告诉我们您看到的字符的内部代码?
更新感谢您了解有关屏幕上实际显示的有趣字符的信息。基于此,以及如何使用记事本设法解决它,似乎已保存的页面已经以UTF-8编码,但Excel正在显示它,好像它是在“ANSI”代码页中编码的,例如, cp1252在使用西欧语言的地方。
下一个问题:你是如何创建HTML表的?在HTML的开头附近应该有类似charset=UTF-8
的东西 - 你看到了什么? HTML文件是否已使用.htm,.html或其他内容的扩展名保存?如何将其导入Excel?哪个Excel:2007年,2003年,其他?