导出gridview以优化自定义值格式
我在我的内容页面有4个东西:
- 一个gridview
- 查询button,执行数据库视图,并显示查询结果在视图中的gridview
- 导出为excelbutton,将gridview导出为excel
- 发送电子邮件与上面的Excel作为附件
他们工作得很好,但是我注意到一列中的一些单元格的格式奇怪的问题,该列有2个格式应用于值,“数字”和“一般”,是“数字”不正确的一个。
这里有一些照片的前几个结果来说明我在说什么:
在SQL Server中
在内容页面
在Excel中
请注意,在SQL Server和页面上,单元格显示的格式是正确的,即XXXXX.etc( 通用格式 ),但数字较多的单元格被格式化为“数字”
我会发布一些代码下面:
网格视图
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"></asp:GridView>
导出为excelbutton
protected void Buttonexcel_Click(object sender, EventArgs e) { try { Response.Clear(); Response.Buffer = true; Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.Charset = ""; Response.AddHeader("content-disposition", "attachment;filename=dados.xls"); StringWriter sWriter = new StringWriter(); HtmlTextWriter hWriter = new HtmlTextWriter(sWriter); GridView1.RenderControl(hWriter); Response.Output.Write(sWriter.ToString()); Response.Flush(); Response.End(); } catch (Exception ex) { Label1.Text = ex.ToString(); } }
有没有办法,我可以强制只有“一般”格式的整个xls?
这对我有效
var grid = new GridView(); grid.DataSource = candidates; grid.DataBind(); Response.ClearContent(); Response.AddHeader("content-disposition", "attachment; filename=candidates.xls"); Response.ContentType = "application/excel"; StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); grid.RenderControl(htw); string style = @"<style> td { mso-number-format:\@;} </style>"; Response.Write(style); Response.Write(sw.ToString()); Response.End();
@Poormina,感谢您的input,我现在的代码是:
protected void Buttonexcel_Click(object sender, EventArgs e) { try { Response.Clear(); Response.Buffer = true; Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.Charset = ""; Response.AddHeader("content-disposition", "attachment;filename=dados.xls"); StringWriter sWriter = new StringWriter(); HtmlTextWriter hWriter = new HtmlTextWriter(sWriter); GridView1.RenderControl(hWriter); string style = @"<style> .textmode {mso-number-format:General} </style>"; Response.Output.Write(sWriter.ToString()); Response.Flush(); Response.End(); } catch (Exception ex) { Label1.Text = ex.ToString(); } }
然而,excel格式保持不变,一些单元格被格式化为“数字”,其他格式为“一般”,我也试过:
string style = @"<style> .textmode { mso-number-format:\@; } </style>";
但结果是一样的,我应该指出的另一件事是,并不是所有logging在ITMREF_0应该像XXXXX.YYYY.ZZZZZ,我会张贴截图波纹pipe:
12000073是正确的,excel应该像这样显示,22284.01.01也应该像在excel中那样显示
我将不胜感激一些帮助
编辑:我想通了,我只需要添加:
string style = @"<style> TD { mso-number-format:\@; } </style>"; Response.Write(style);
excel仍然给我一个警告,说这个数字被格式化为文本,或者它有一个撇号,但没关系
编辑2:
正如我在第一篇文章中所说,我也有一个button,发送一个Excel文件的电子邮件作为具有gridview数据的附件,我想要做同样的事情这种方法,格式列为“一般”,但我无法弄清楚如何。
这里是发送电子邮件button代码:
protected void Buttonmail_Click(object sender, EventArgs e) { fn_AttachGrid(); } public void fn_AttachGrid() { StringWriter sWriter = new StringWriter(); HtmlTextWriter hWriter = new HtmlTextWriter(sWriter); GridView1.RenderControl(hWriter); MailMessage mail = new MailMessage(); mail.IsBodyHtml = true; mail.To.Add(new MailAddress(txtto.Text)); mail.Subject = "Foi"; System.Text.Encoding Enc = System.Text.Encoding.ASCII; byte[] mBArray = Enc.GetBytes(sWriter.ToString()); string style = @"<style> TD { mso-number-format:\@; } </style>"; Response.Write(style); System.IO.MemoryStream mAtt = new System.IO.MemoryStream(mBArray, false); mail.Attachments.Add(new Attachment(mAtt, "rotina.xls")); mail.Body = "Foi detectado o seguinte problema"; SmtpClient smtp = new SmtpClient(); mail.From = new MailAddress("email_from", "name displayed"); smtp.Host = "smtp.gmail.com"; smtp.UseDefaultCredentials = true; System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential(); NetworkCred.UserName = "email_from"; NetworkCred.Password = "password"; smtp.Credentials = NetworkCred; smtp.EnableSsl = true; smtp.Port = 587; smtp.Send(mail); ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "anything", "alert('Enviado com sucesso.');", true); }
有人可以帮我吗?
你可以使用这个。 这对我有用..
foreach (GridViewRow row in dummyGridView.Rows) { foreach (TableCell item in row.Cells) { item.Attributes.Add("class", "textmode"); } }
- 将string转换为date从一个Excel文件的asp.net mvc
- 如何格式化我的导出到excel工作簿在microsoft.office.interop.excel?
- ASP.NET:System.UnauthorizedAccessException – 访问path被拒绝
- 使用C#从ASP.NET导出数据表到Excel
- 将GridView导出到Excel,而不使用超链接显示为红色的gridview单元格
- ClosedXML System.Exception:语法错误
- 如何将数据批量导出为excel
- Gridview没有得到Excel文件中的最后一行
- 在ASP.NET中将DataTable导出到Excel