导出到Excel,同时使用Gridview和LINQ保持起始零

时间:2017-05-30 18:33:50

标签: c# excel linq gridview model-view-controller

当我将模型导出到excel时,我似乎失去了起始零点。我的数据库中的某些值具有ex.'0345'或'0001'的值。当我将它们导出到excel时,excel表格显示为“345”或“1”。如何保持前导零?我的应用程序正在使用MVC 5,我正在使用LINQ语句gv.DataSource填充db.lookup_client_name.ToList();我已阅读其他文章,声明将值设置为带'的字符串(单引号)在开头或在字符串之前添加\t。如何通过LINQ语句完成此操作?我的代码如下......

public ActionResult ExportToExcel(string Value)
    {
            var gv = new GridView();
            gv.DataSource = db.lookup_client_name.ToList();
            gv.DataBind();
            Response.ClearContent();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", "attachment; filename=LookupClientName_" + DateTime.Now.ToString("yyyy-MM-dd HH:mm") + ".xls");
            Response.ContentType = "application/ms-excel";
            Response.Charset = "";
            StringWriter objStringWriter = new StringWriter();
            HtmlTextWriter objHtmlTextWriter = new HtmlTextWriter(objStringWriter);
            gv.RenderControl(objHtmlTextWriter);
            Response.Output.Write(objStringWriter.ToString());
            Response.Flush();
            Response.End();


        return RedirectToAction("/");
    }

1 个答案:

答案 0 :(得分:1)

您正在使用“廉价技巧”来创建Excel,您没有创建Excel,您正在创建HTML页面,Excel尝试将其转换为Excel工作表。

说,当Excel将这些值视为数值时,它们会转换为数字,这就是删除前导零的原因。

基本上不可能使用HTML技巧定义单元格格式,因此如果您确实需要保留这些零,则必须创建一个真实的XML文件并指定数据类型或在这些值之前或之后添加一些字符以避免Excel将其检测为数字。

如果你想将char添加到值中,我无法编写确切的代码,因为我没有lookup_client_name内容结构,但这里有一个例子,它将为您提供一般的想法:< / p>

//this class represents the structure of the data of the lookup_client_name content
public class RowContent
{
    public string SomeProperty{ get; set; }
    public string PreserveValues{ get; set; }
}

//...

gv.DataSource = db.lookup_client_name.
                Select(i => new 
                { 

                    SomeProperty = i.SomeProperty, 
                    PreserveValues = "'" + i.PreserveValues + "'" 

                }).ToList();