本次需要导出的Excel表格格式如下:
项目 | 本周实际 | 本月实际 | 本年实际 | |||
刷卡额 | 佣金收入 | 刷卡额 | 佣金收入 | 刷卡额 | 佣金收入 | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
多表头具体的后台代码是在Row_Created事件中创建的。先看创建代码:
protected void GridView_RowCreated(object sender, GridViewRowEventArgs e)
{
//判断创建的行是否为表头行
if (e.Row.RowType == DataControlRowType.Header)
{
TableCellCollection tcHeader = e.Row.Cells;
//清除自动生成的表头
tcHeader.Clear();
tcHeader.Add(new TableHeaderCell());
tcHeader[0].RowSpan = 2;
tcHeader[0].Text = "项目";
tcHeader.Add(new TableHeaderCell());
tcHeader[1].ColumnSpan = 2;
tcHeader[1].Text = "本周实际";
tcHeader.Add(new TableHeaderCell());
tcHeader[2].ColumnSpan = 2;
tcHeader[2].Text = "本月实际";
tcHeader.Add(new TableHeaderCell());
tcHeader[3].ColumnSpan = 2;
tcHeader[3].Text = "本年实际</th></tr><tr>";
tcHeader.Add(new TableHeaderCell());
tcHeader[4].Text = "刷卡额";
tcHeader[4].Attributes.Add("style", "font-weight: bold;text-align: center;");
tcHeader.Add(new TableHeaderCell());
tcHeader[5].Text = "佣金收入";
tcHeader[5].Attributes.Add("style", "font-weight: bold;text-align: center;");
tcHeader.Add(new TableHeaderCell());
tcHeader[6].Text = "刷卡额";
tcHeader[6].Attributes.Add("style", "font-weight: bold;text-align: center;");
tcHeader.Add(new TableHeaderCell());
tcHeader[7].Text = "佣金收入";
tcHeader[7].Attributes.Add("style", "font-weight: bold;text-align: center;");
tcHeader.Add(new TableHeaderCell());
tcHeader[8].Text = "刷卡额";
tcHeader[8].Attributes.Add("style", "font-weight: bold;text-align: center;");
tcHeader.Add(new TableHeaderCell());
tcHeader[9].Text = "佣金收入";
tcHeader[9].Attributes.Add("style", "font-weight: bold;text-align: center;");
}
Excel表格导出方法代码如下:
protected void ExportGridView(GridView gv)
{
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition","attachment;filename=export.xls");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
Response.Write("<meta http-equiv=Content-Type content=\"text/html; charset=GB2312\">");
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
gv.RenderControl(oHtmlTextWriter);
Response.Output.Write(oStringWriter.ToString());
Response.Flush();
Response.End();
}
根据这个方法导出的表格格式结果有问题,如下:
项目 | 本周实际 | 本月实际 | 本年实际 | |||
刷卡额 | 佣金收入 | 刷卡额 |
| |||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
我发现表头格式不对,少了3个。
调试了一下,发现gv.HeaderRow.Cells.Count 值为7。
也就是GridView默认表头是7个TableCell(这个和以下有7列数据是一样的)。但是实际上需要有10个TableCell,少了3个TableCell。
因此我在Excel表格导出方法代码里面加了以下语句:
gv.HeaderRow.Cells.Add(new TableCell());
gv.HeaderRow.Cells.Add(new TableCell());
gv.HeaderRow.Cells.Add(new TableCell());
增加了这3条语句之后,导出的Excel表头格式正确。
得出结论:在用通过页面流的方式导出当前页的gridview内容到excel中的方法的时候,如果你写的是多行表头。遇到导出Excel格式缺失的话,你可以考虑在导出方法里面增加表头添加TableCell的方法。