.NET导出EXCEL的问题

huanxu512 2010-01-19 11:56:47
protected void Button2_Click(object sender, EventArgs e)
{
GridViewToExcel();
}
public override void VerifyRenderingInServerForm(Control control)
{
// Confirms that an HtmlForm control is rendered for
}
private void GridViewToExcel()
{
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls");
Response.ContentEncoding = System.Text.Encoding.UTF7;
Response.ContentType = "application/ms-excel";
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
gvMenus.RenderControl(oHtmlTextWriter);
//gvDishes.RenderControl(oHtmlTextWriter);
//gvExtrol.RenderControl(oHtmlTextWriter);
Response.Output.Write(oStringWriter.ToString());
Response.Flush();
Response.End();
}
菜编号 菜名(中文) 操作
这样做后 我导出的EXCEL包括操作(删除,编辑) 如何能把操作去掉 只留下查询出来的数据 谢谢
有比较完整的代码更好
...全文
202 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyboyc 2010-01-19
  • 打赏
  • 举报
回复
在Response.Output.Write(oStringWriter.ToString());
上面添加
oStringWriter.Replace("删除", "").Replace("编辑", "");
linkbutton可以换成span.
在至于那一列,不太好去。
当然想去掉你也可以用string.Remove(),用IndexOf()算好长度和位置。
xiedu414 2010-01-19
  • 打赏
  • 举报
回复
学习下,正好要用到。
昕颖 2010-01-19
  • 打赏
  • 举报
回复
只要能导出到Excel中。那样的话办法也就解决了。你导出来之前不就是grdview数据源的数据吗??这样的话你换过角度。不从grdview导出。在点导出的时刻重新生成数据源。就可以了啊。也就是楼上说的那样重新生成datatable。只不过这样性能可能差点。
chen_ya_ping 2010-01-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 huanxu512 的回复:]
protected void Button2_Click(object sender, EventArgs e)
    {
        GridViewToExcel();
    }
    public override void VerifyRenderingInServerForm(Control control)
    {
        // Confirms that an HtmlForm control is rendered for
    }
    private void GridViewToExcel()
    {
        Response.Clear();
        Response.Buffer = true;
        Response.Charset = "GB2312";
        Response.AppendHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls");
        Response.ContentEncoding = System.Text.Encoding.UTF7;
        Response.ContentType = "application/ms-excel";
        System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
        gvMenus.RenderControl(oHtmlTextWriter);
        //gvDishes.RenderControl(oHtmlTextWriter);
        //gvExtrol.RenderControl(oHtmlTextWriter);
        Response.Output.Write(oStringWriter.ToString());
        Response.Flush();
        Response.End();
    }
菜编号  菜名(中文)  操作
这样做后  我导出的EXCEL包括操作(删除,编辑)  如何能把操作去掉  只留下查询出来的数据 谢谢
有比较完整的代码更好
[/Quote]
笨办法就是你可以把要导出的数据放入到datatable中,然后再导出到excel中就可以了。
wxg22526451 2010-01-19
  • 打赏
  • 举报
回复
  /// <summary>
/// GridView导出到Excel
/// </summary>
/// <param name="exportTargetGridView">目标GridView</param>
/// <param name="filename">文件名称</param>
public static void ExportExcel(GridView exportTargetGridView, string filename)
{
HttpContext.Current.Response.ClearContent();

HttpContext.Current.Response.Charset = "GB2312";

HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF7;

HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + HttpUtility.UrlPathEncode(filename + ".xls"));

HttpContext.Current.Response.ContentType = "application/excel";

StringWriter sw = new StringWriter();

HtmlTextWriter htw = new HtmlTextWriter(sw);

PrepareGridViewForExport(exportTargetGridView);//调用模式化特殊元素

exportTargetGridView.RenderControl(htw);

HttpContext.Current.Response.Write(sw.ToString());

HttpContext.Current.Response.End();
}
/// <summary>
/// 使用GridView导出excel表格,对特殊的控件进行模式化处理
/// </summary>
/// <param name="gv">模式化特殊元素的函数 </param>
public static void PrepareGridViewForExport(Control gv)
{

HyperLink lb = new HyperLink();
LinkButton bt = new LinkButton();
Literal l = new Literal();
string name = String.Empty;
RadioButton rb = new RadioButton();

for (int i = 0; i < gv.Controls.Count; i++)
{
if (gv.Controls[i].GetType() == typeof(HyperLink))
{
l.Text = (gv.Controls[i] as HyperLink).Text;
gv.Controls.Remove(gv.Controls[i]);
gv.Controls.AddAt(i, l);

}
else if (gv.Controls[i].GetType() == typeof(LinkButton))//替换
{

l.Text = (gv.Controls[i] as LinkButton).Text;
gv.Controls.Remove(gv.Controls[i]);
gv.Controls.AddAt(i, l);

}
else if (gv.Controls[i].GetType() == typeof(DropDownList))
{

DropDownList dl = gv.Controls[i] as DropDownList;
for (int j = 0; j < dl.Items.Count; j++)
{
rb.Text = dl.Items[j].Text;
if (rb.Text == dl.SelectedItem.Text)
rb.Checked = true;
gv.Controls.AddAt(i, rb);
}
gv.Controls.Remove(dl); //移除DropDownlist

}
else if (gv.Controls[i].GetType() == typeof(CheckBox))
{

l.Text = (gv.Controls[i] as CheckBox).Checked ? "" : "";
gv.Controls.Remove(gv.Controls[i]);
gv.Controls.AddAt(i, l);

}
else if (gv.Controls[i].GetType() == typeof(ImageButton))
{
l.Text = "图片";
gv.Controls.Remove(gv.Controls[i]);
gv.Controls.AddAt(i, l);
}
if (gv.Controls[i].HasControls())
{
PrepareGridViewForExport(gv.Controls[i]);
}

}

}
huanxu512 2010-01-19
  • 打赏
  • 举报
回复
回复8楼 谢谢 确实比较好用
antony1029 2010-01-19
  • 打赏
  • 举报
回复
mark!
YnSky 2010-01-19
  • 打赏
  • 举报
回复
GridView1.Columns[GridView1.Columns.Count - 1].Visible = false;
绝对好用.这样导出的时候就不导出对后一列了..
段传涛 2010-01-19
  • 打赏
  • 举报
回复
高手都来了。 我只能帮顶了。
wuyq11 2010-01-19
  • 打赏
  • 举报
回复
获取绑定gridview的数据集,再打开excel模板导出到excel或
隐藏列再显示
protected void Btn(object sender, EventArgs e)
{
string style = @"<style> .text { mso-number-format:\@; } </script> ";
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=ExcelFile.xls");
Response.ContentType = "application/excel";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
gv.RenderControl(htw);
Response.Write(style);
Response.Write(sw.ToString());
Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{

}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧