C# asp.net导出到Excel UTF-8
这是我的密码:C# asp.net导出到Excel UTF-8,c#,asp.net,excel,C#,Asp.net,Excel,这是我的密码: var model = _db.FacebookInfo.OrderByDescending(f => f.Followers).ToList(); var grid = new System.Web.UI.WebControls.GridView(); grid.DataSource = (from u in model select new {
var model = _db.FacebookInfo.OrderByDescending(f => f.Followers).ToList();
var grid = new System.Web.UI.WebControls.GridView();
grid.DataSource = (from u in model
select new
{
fullname = System.Text.RegularExpressions.Regex.Replace(u.FullName, "<span .*?>(.*?)", ""),
followers = u.Followers,
friends = u.Friends,
url = u.FbLink
}).ToList();
grid.DataBind();
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=Nana bregvadze Friends.xls");
Response.ContentType = "application/excel";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
grid.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
它只是创建了一个excel文件,但我有一个unicode问题,无法读取格鲁吉亚字符。请看图片:
也许这是一个重复,但没有解决方案对我有效 您的代码并没有创建真正的XLSX文件,而是创建了一个带有伪造头和扩展名的HTML表。Excel将使用最终用户的默认设置和区域设置导入此文件 与伪造Excel文件不同,您可以使用类似的库轻松创建一个真正的XLSX文件,只需很少的代码。Codeplex站点中甚至有一个例子。在您的情况下,可以使用LoadFromCollection而不是LoadFromDataTable:
using (ExcelPackage pck = new ExcelPackage())
{
//Create the worksheet
var ws = pck.Workbook.Worksheets.Add("Demo");
//Load the datatable into the sheet, starting from cell A1.
// Print the column names on row 1
var table=ws.Cells["A1"].LoadFromCollection(model, true);
//Write it back to the client
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=ExcelDemo.xlsx");
Response.BinaryWrite(pck.GetAsByteArray());
}
请注意,表是一个实际的ExcelRange对象,可以指定名称、样式等。好的,我可以解决这个问题:
只需将Response.clearcont更改为Response.Clear并添加
Response.Write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />")
完整代码:
var model = _db.FacebookInfo.OrderByDescending(f => f.Followers).ToList();
var grid = new System.Web.UI.WebControls.GridView();
grid.DataSource = (from u in model
select new
{
fullname = System.Text.RegularExpressions.Regex.Replace(u.FullName, "<span .*?>(.*?)", ""),
followers = u.Followers,
friends = u.Friends,
url = u.FbLink
}).ToList();
grid.DataBind();
Response.Clear();
Response.AddHeader("content-disposition", "attachment; filename=Nana bregvadze Friends.xls");
Response.ContentType = "application/excel";
Response.Write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />");
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
grid.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
Excel和UTF8没有问题。您的代码根本不生成Excel—它创建了一个带有假标题和文件扩展名的HTML表,Excel将其导入为HTML。使用像EPPlus这样的库来创建真正的XLSX文件。实际上更简单,像'ws.Cells[A1].LoadFromCollectionmodel这样的调用将从任何IEnumerable CollectionModel生成一个工作表只是无法从html中读取utf-8字符表?当然可以,只要设置正确的HTTP头。但是,当正确的解决方案更容易时,为什么还要坚持使用丑陋的黑客呢?如果在Excel中导入带有默认设置的HTML文件时发现下一个问题,会发生什么情况?如果您和客户端之间的防火墙或代理检测到您发送的不是二进制xls文件而是HTML文件并阻止它,会发生什么情况?如果客户端需要格式化怎么办?孩子们玩真正的Excel文件,真的很难用HTML