从 SQL asp.net 页面导出数据到 excel 会截断 < 字符上的数据

Posted

技术标签:

【中文标题】从 SQL asp.net 页面导出数据到 excel 会截断 < 字符上的数据【英文标题】:Export data from SQL asp.net page to excel truncates data on < character 【发布时间】:2020-05-26 00:48:42 【问题描述】:

我们已经成功地将数据从 asp.net 系统导出到 excel 文件中。然而,我们刚刚遇到了一个问题。如果要导出的数据在其文本中包含“

例如,小于号周围没有单引号''(必须将它们放在此处以显示符号):

如果我们导出的文本是 "项目的成本是 '"

唯一可以导入到 excel 中的部分是 "该项目的成本是 "

但是,当我们查看我们在 asp.net 系统本身中导出的完全相同的字段时,我们会看到整行文本 "项目的成本是 '"

有没有人知道如何在不让excel截断文本的情况下导出整行文本(即:能够显示特殊字符)?

设置excel文件的代码

                Response.Buffer = true;
                Response.ContentType = "application/vnd.ms-excel ";
                Response.AddHeader("content-Disposition", "attachment;filename=" +
                    SessionInfo.CurrentComplete + RepType + ".xls");
                Response.Write(@"<!DOCTYPE html PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">");
                Response.Charset = "UTF-8";

设置excel字段的代码

                        switch (defrow["DataType"].ToString())
                        
                            case "image":
                                System.Web.UI.WebControls.Image imgPS = new System.Web.UI.WebControls.Image();
                                imgPS.ImageUrl = datarow[defrow["ColumnName"].ToString()].ToString();
                                imgPS.Height = 15;
                                imgPS.Width = 15;
                                tCell.Controls.Add(imgPS);
                                tCell.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;
                                break;
                            case "date":
                                convertedDate = Convert.ToDateTime(datarow[defrow["ColumnName"].ToString()].ToString());
                                tCell.Text = convertedDate.ToString("d MMM yyyy");
                                break;
                            case "comment":
                                tCell.Text = datarow[defrow["ColumnName"].ToString()].ToString();
                                tCell.Width = 300;
                                break;
                            case "longtext":
                                tCell.Text = RemoveHtmlTag(datarow[defrow["ColumnName"].ToString()].ToString()); 
                                tCell.Width = 500;
                                break;
                            case "shorttext":
                                tCell.Text = datarow[defrow["ColumnName"].ToString()].ToString();
                                tCell.Width = 250;
                                break;
                            default:
                                tCell.Text = datarow[defrow["ColumnName"].ToString()].ToString();
                                break;
                        

SQL 查询用于获取数据以在 asp.net 系统本身使用的主表中显示信息以及此处显示的主导出。

        string sql = "SELECT * " + rights +
                     "from table_information " + condition + sortorder;

非常感谢所有想法。

【问题讨论】:

您正在向浏览器编写 HTML 响应 - 元素内容中不能包含任何未转义的 &amp;lt;,因为浏览器将其视为元素标记的开始。所以你需要将你的&amp;lt; 转义为&amp;lt; 【参考方案1】:
    如果您的文本包含单引号/双引号,则需要将每个引号括在双引号中。然后,它也会保留双引号。

尝试更改文本

"The cost of the project was '<'$5,000 and the benefit far outweighed the cost"

"The cost of the project was "'<"'$5,000 and the benefit far outweighed the cost"
    此外,不需要单引号。您是否也可以尝试通过您的代码替换来自 - 的文本
"The cost of the project was '<'$5,000 and the benefit far outweighed the cost"

"The cost of the project was &lt;$5,000 and the benefit far outweighed the cost"

【讨论】:

以上是关于从 SQL asp.net 页面导出数据到 excel 会截断 < 字符上的数据的主要内容,如果未能解决你的问题,请参考以下文章

SQL:将数据库导出到 asp.net

将 SQL 数据库导出到 Access - ASP.NET

在asp.net中向客户端导出大量数据

我可以通过 Visual Studio 从 ASP.NET 网站导出生成的 html 页面吗?

asp.net web页面导出word

如何在不重新加载页面的情况下使用 ASP.NET MVC 5 将数据导出到 Excel?