2

我们正在将网站应用程序中的一些数据导出到 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();

任何想法我们如何获得所需的输出?

ps 不知道我是否应该把它分成一个单独的问题,但是当生成电子表格时,会触发一条警告消息:

您尝试打开的文件“EngageReplies.xls”的格式与文件扩展名指定的格式不同。在打开文件之前,请确认文件没有损坏并且来自受信任的来源。您现在要打开文件吗?

我已经使用 Firefox 和 IE 使用 Office 2007 打开文件。单击“是”可以打开文件,但如果我的用户没有受到它的影响,我会更喜欢它。

4

5 回答 5

6

啊哈!

首先我尝试删除 Charset 和 CharacterEncoding,但仍然得到错误的输出,所以我将它们设置为以下并且它工作正常:

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

感谢罗兰的灵感!

于 2009-04-21T10:58:37.100 回答
3

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

于 2009-04-21T10:51:36.303 回答
0

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

您可能希望查看此问题以了解更多在 ASP.NET 中生成 Excel 文件

于 2009-04-21T10:53:25.503 回答
0

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

另一种方法是使用 office interop 正确创建表(需要在服务器上安装并进行大量配置)或找到可以正确创建 excel 文件的库。

于 2009-04-21T11:31:03.697 回答
0
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*/

试试这个代码它完美地解决了这个问题。

于 2017-07-13T13:56:52.387 回答