use*_*177 6 c# sql asp.net excel gridview
我的内容页面中有 4 件事:
它们工作正常,但是我注意到列中某些单元格的格式存在一个奇怪的问题,该列有 2 种格式应用于值,“数字”和“一般”,“数字”是不正确的。
这是前几个结果的一些图片来说明我在说什么:
在 sql 服务器中

在内容页面

在 Excel 中

请注意,在 sql server 和页面上,单元格以正确的格式显示,即 XXXXX.etc(常规格式),但具有更多数字的单元格被格式化为“数字”
我将在下面发布一些代码:
网格视图
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"></asp:GridView>
Run Code Online (Sandbox Code Playgroud)
导出到excel按钮
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();
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让我只能强制整个 xls 的“通用”格式?
@Poormina,谢谢您的输入,我的代码现在是:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
但是Excel格式保持不变,一些单元格格式为“数字”,其他单元格格式为“常规”,我也尝试过:
string style = @"<style> .textmode { mso-number-format:\@; } </style>";
Run Code Online (Sandbox Code Playgroud)
但结果是一样的,我应该指出的另一件事是,并非ITMREF_0中的所有记录都应该像XXXXX.YYYY.ZZZZZ,我将在下面发布一个屏幕截图:

12000073是正确的,excel应该像这样显示它,22284.01.01也应该像excel中那样显示
我希望得到一些帮助
编辑:我想通了,我只需要添加:
string style = @"<style> TD { mso-number-format:\@; } </style>";
Response.Write(style);
Run Code Online (Sandbox Code Playgroud)
excel 仍然给我一个警告,说该数字被格式化为文本或它有一个撇号,但这没关系
编辑2:
正如我在第一篇文章中所说,我还有一个按钮,可以发送一封电子邮件,其中包含 excel 文件作为附件,其中包含 gridview 数据,我想对此方法执行相同的操作,将列格式设置为“常规”,但是我不知道怎么办。
这是发送电子邮件按钮代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我吗?
| 归档时间: |
|
| 查看次数: |
23779 次 |
| 最近记录: |