代码之家  ›  专栏  ›  技术社区  ›  Knickerless-Noggins

ColdFusion XLS“导出”和字符编码

  •  3
  • Knickerless-Noggins  · 技术社区  · 16 年前

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

    我尝试使用cfcontent、setencoding和cfpagedirective在ColdFusion中设置页面编码,但到目前为止没有成功。有什么建议吗?

    编辑:作为临时解决办法,可以通过将导出的文件保存到磁盘,在记事本中打开文件,然后再次保存来删除错误字符。这并不是解决这个问题的最好办法。

    变成

    变成

    6 回复  |  直到 16 年前
        1
  •  2
  •   spoony    11 年前

    我遇到了同样的问题,在Excel电子表格中出现了奇怪的字符“”,而它却不在我的HTML页面中。

    <cfcontent type="application/vnd.ms-excel> 致: <cfcontent type="application/vnd.ms-excel; charset=windows-1252"> 为我解决了这个问题。

        2
  •  1
  •   Jason    16 年前

    您是否考虑过使用XML创建speadsheet?当您有10000多条记录时,它会使文件有点臃肿,并且似乎有一些问题。但是,对于中小型数据集,它工作得非常好,并提供了我相信您正在寻找的格式化功能。

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

        3
  •  0
  •   Ian    16 年前

    与使用HTML表格导出不同,您是否可以不导出到CSV并在每个项目周围添加“,”,以便:

    "value1","value2"
    

    <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>
    
        4
  •  0
  •   Henry    16 年前

    你试过了吗 charset="utf-8" CFFile ? 如果仍然不起作用,试试看 charset="windows-1252" ?

    CFSpreadsheet

        5
  •  0
  •   Loftx    16 年前

    正如其他人所建议的,您可能在cfcontent中使用了错误的字符集-请尝试以下操作:

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

    http://livedocs.adobe.com/coldfusion/7/htmldocs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=ColdFusion_Documentation&file=00000232.htm 查看完整的列表。

    此外,您可能希望在可以生成excel文件时签出cfreport。

        6
  •  -2
  •   John Machin Santi    16 年前

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

    至少,您可以像程序员一样进行调试,并提供一些调试信息。忘了撇号吧,这里有几个不同的字符,你可以这么说;在Excel中,商标符号应该是什么样子:是否显示0、1或2个字符?如果非零,则显示什么字符?您是否可以在公式中使用CODE()函数来告诉我们您看到的字符的内部代码?

    使现代化 感谢您提供有关屏幕上实际出现的有趣角色的信息。基于此,以及您如何使用记事本解决此问题,保存的页面似乎已用UTF-8编码,但Excel显示它时,就好像它是用“ANSI”代码页编码的一样,例如在使用西欧语言的地方使用cp1252。

    接下来的问题:如何创建HTML表?在HTML的开头应该有如下内容 charset=UTF-8 --你看到了什么?HTML文件是否以.htm、.HTML或其他扩展名保存?如何将其导入Excel?哪个Excel:2007、2003、其他?

    推荐文章