代码之家  ›  专栏  ›  技术社区  ›  Rich

如何将磅符号从C Web应用程序正确导出到Excel?(生产而不是)

  •  2
  • Rich  · 技术社区  · 17 年前

    我们正在将网站应用程序中的一些数据导出到Excel电子表格中,但是,当使用GBP符号时,它不会输出“_9.99”,而是生成“_9.99”。

    以下是同事为生成电子表格而编写的代码[Tableout是一个包含HTML表的StringBuilder]:

    string filename = "EngageReplies.xls";
    Response.Clear();
    Response.Buffer = true;
    Response.ContentType = "application/vnd.ms-excel";
    Response.AddHeader( "content-disposition", "attachment;filename=" + filename );
    Response.Charset = "UTF-8";
    Response.ContentEncoding = System.Text.Encoding.UTF8;
    this.EnableViewState = false;
    
    Response.Write( tableOut );
    Response.End();
    

    有什么办法可以得到我们想要的产出吗?

    P.S.不确定我是否应该将其分为单独的问题,但当生成电子表格时,会触发一条警告消息:

    你要打开的文件, “engagereplies.xls”位于不同的 文件指定的格式以外的格式 延伸。验证文件是否 已损坏并且来自受信任的源 打开文件之前。你想要 现在打开文件?

    我已经使用火狐和IE在Office2007中打开了文件。单击“是”可以打开文件,但如果我的用户没有受到影响,我更喜欢它。

    5 回复  |  直到 9 年前
        1
  •  6
  •   Rich    17 年前

    啊哈!

    首先,我尝试删除字符集和字符编码,但仍然得到了错误的输出,因此我将它们设置为以下值,它已经正常工作:

    Response.Charset = "";
    Response.ContentEncoding = System.Text.Encoding.Default;
    

    感谢罗兰德的灵感!

        2
  •  3
  •   Rowland Shaw    17 年前

    我不希望在传输二进制文件(如XLS文件)时看到charset/contentencoding头。我还将测试输出是否将其保存到某个地方的lcoal磁盘,并验证文件创建是否在做“正确的事情”。

        3
  •  0
  •   Community Mohan Dere    9 年前

    警告是因为您将HTML数据而不是Excel电子表格数据保存在扩展名为XLS的文件中。您可以尝试将文件扩展名更改为“.htm”,但我不确定如何在Excel而不是Web浏览器中打开该扩展名。

    你很可能想了解更多关于这个问题的信息 Generating an Excel file in ASP.NET

        4
  •  0
  •   PeteT    17 年前

    我同意Martin Brown的观点,这是一个HTML表,而不是Excel电子表格,这就是您收到该消息的原因。但是,我可以理解为什么开发人员将其保存为.xls,这意味着最终用户可以使用Excel(它处理带有警告的HTML转换)打开表,而不是使用Web浏览器打开HTML。我想这会让用户体验更好一点。

    另一种方法是使用Office Interop(需要在服务器上安装大量配置)或查找可以正确创建Excel文件的库来正确创建表。

        5
  •  0
  •   Thomas Rollet Jitendra Mittal    9 年前
    Response.ContentEncoding = System.Text.Encoding.Unicode; /*c# uses UTF-16 internally*/  
    Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble()); /*Include the UTF-16 header so excel will treat this as UTF-16*/
    

    尝试此代码,它可以很好地解决此问题。