首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用自定义值格式将网格视图导出为excel

问用自定义值格式将网格视图导出为excel
EN

Stack Overflow用户
提问于 2013-12-06 16:56:10
回答 2查看 24.7K关注 0票数 6

我在我的内容第4页有:

  • 单一的网格视图
  • 执行数据库视图并在网格视图中显示视图中查询结果的查询按钮。
  • 导出到excel按钮,该按钮将网格视图导出到excel中。
  • 将上面的excel作为附件发送电子邮件。

它们工作得很好,但是我注意到列中某些单元格的格式有一个奇怪的问题,该列有2种格式应用于值,"number“和"general",是"number”不正确的。

下面是一些前几个结果的图片来说明我的意思:

在sql server中

​

​

在内容页中

​

​

在excel

​

​

请注意,在sql server和页面上,单元格的格式是正确的,即XXXXX.etc (general formatting),但数字较多的单元格被格式化为"number“。

我会在下面发布一些代码:

网格视图

代码语言:javascript
复制
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"></asp:GridView>

导出到excel按钮

代码语言:javascript
复制
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?的“通用”格式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-09 11:57:37

@Poormina,谢谢您的投入,我的代码是:

代码语言:javascript
复制
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格式保持不变,有些单元格被格式化为"number“,而其他单元格则被格式化为"general",我也尝试过:

代码语言:javascript
复制
string style = @"<style> .textmode { mso-number-format:\@; } </style>";

但结果是一样的,我要指出的另一件事是,并非ITMREF_0中的所有记录都应该像XXXXX.YYYY.ZZZZZ那样,我将在下面发布一个截图:

​

​

12000073是正确的,excel应该这样显示,22284.01.01也应该显示在excel中。

我很感谢你的帮助

编辑: --我想出来了,我只需要添加:

代码语言:javascript
复制
string style = @"<style> TD { mso-number-format:\@; } </style>";
        Response.Write(style);

excel仍然给我一个警告,说数字被格式化为文本,或者它有一个撇号,但没关系

编辑2:

正如我在第一篇文章中说的那样,我还有一个按钮,它发送一个带有excel文件的电子邮件作为附件,其中包含网格视图数据,我想对这个方法做同样的事情,将列格式化为"general“,但是我不知道怎么做。

以下是发送电子邮件按钮代码:

代码语言:javascript
复制
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);
}

有人能帮我吗?

票数 2
EN

Stack Overflow用户

发布于 2016-01-27 11:09:46

这对我来说很管用

代码语言:javascript
复制
        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();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20429382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档