下面导出excel主要解决repeater产生乱码的问题
public void CreateExcels(DataSet ds, string typeid, string FileName)
{
HttpResponse resp;
resp = Page.Response;
resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
// resp.ContentType = "application/vnd.ms-excel";
string colHeaders = "", ls_item = "";
int i = 0;
//定义表对象和行对像,同时用DataSet对其值进行初始化
DataTable dt = ds.Tables[0];
DataRow[] myRow = dt.Select("");
// typeid=="1"时导出为EXCEL格式文档;typeid=="2"时导出为XML格式文档
if (typeid == "1")
{
//取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符
for (i = 0; i < dt.Columns.Count; i++)
{
if (i == dt.Columns.Count - 1)
{
// colHeaders += dt.Columns[i].Caption.ToString() + "\n";
switch (dt.Columns[i].Caption.ToString())
{
case "R":
colHeaders += "序号" + "\n";
break;
}
}
else
{
// colHeaders += dt.Columns[i].Caption.ToString() + "\t";
switch (dt.Columns[i].Caption.ToString())
{
case "C_EMPOID":
colHeaders += "主键编号" + "\t";
break;
case "C_NAME":
colHeaders += "姓名" + "\t";
break;
case "C_OPERATETIME":
colHeaders += "操作时间" + "\t";
break;
case "C_OPERATOR":
colHeaders += "操作人员" + "\t";
break;
case "C_APPROVEUNIT":
colHeaders += "认证单位" + "\t";
break;
case "C_APPROVEUNITTYPE":
colHeaders += "认证类型" + "\t";
break;
case "C_APPROVEDATE":
colHeaders += "认证时间" + "\t";
break;
case "C_TREATMENT":
colHeaders += "待遇" + "\t";
break;
case "ISVALID":
colHeaders += "是否有效" + "\t";
break;
case "PROJECTNAME":
colHeaders += "参与项目名称" + "\t";
break;
case "PROJECTDESCRIPT":
colHeaders += "参与项目介绍" + "\t";
break;
case "GAINIFO":
colHeaders += "获得荣誉信息" + "\t";
break;
case "DATAUPLOAD":
colHeaders += "资料上传" + "\t";
break;
case "C_COID":
colHeaders += "系统编号" + "\t";
break;
case "C_EXPERTTYPE":
colHeaders += "专家类型" + "\t";
break;
}
}
}
//向HTTP输出流中写入取得的数据信息
resp.Write(colHeaders);
//逐行处理数据
foreach (DataRow row in myRow)
{
//在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\n
for (i = 0; i < dt.Columns.Count; i++)
{
if (i == dt.Columns.Count - 1)
{
ls_item += row[i].ToString() + "\n";
}
else
{
ls_item += row[i].ToString() + "\t";
}
}
//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据
resp.Write(ls_item);
ls_item = "";
}
}
else
{
if (typeid == "2")
{
//从DataSet中直接导出XML数据并且写到HTTP输出流中
resp.Write(ds.GetXml());
}
}
//写缓冲区中的数据到HTTP头文档中
resp.End();
}
新思路方法,gradeview替换repeater控件导出excel表
protected void Button1_Click(object sender, EventArgs e)
{
setExcel();
ExcelExporter.CreateExcel((DataSet)Session["dataSet"], DateTime.Now.ToString() + ".xls", "application/ms-excel", this.Page);
}
protected void setExcel()
{
DataSet ds1 = IBLL.getDataBySqlO(@"a.C_EMPOID,a.C_NAME,a.C_OPERATETIME,a.C_OPERATOR,a.C_APPROVEUNIT,a.C_APPROVEUNITTYPE,a.C_APPROVEDATE,a.C_TREATMENT,
a.ISVALID,a.PROJECTNAME,a.PROJECTDESCRIPT,a.GAINIFO,a.DATAUPLOAD,a.C_COID,B.EXPERTTYPE as C_EXPERTTYPE", @"ZJXX_EXPERTINFO a
inner join zjxx_experttype b on B.EXPERTCODE=A.C_EXPERTTYPE and B.ISVALID=1", where);
GridView1.DataSource = ds1;
GridView1.DataBind();
DataTable rowHead = IBLL.getDataBySqlO("df.id,fieldename,fieldcname", "data_fields df,data_tables dt",
" dt.id=df.tableid and df.isvalid=1 and tableid=19 order by df.id").Tables[0];
for (int o = 0; o < GridView1.Rows[0].Cells.Count; o++)
{
String rName = "";
for (int j = 0; j < rowHead.Rows.Count; j++)
{
rName = rowHead.Rows[j]["fieldename"].ToString();
if (GridView1.HeaderRow.Cells[o].Text == rName)
{
GridView1.HeaderRow.Cells[o].Text = rowHead.Rows[j]["fieldcname"].ToString();
ds1.Tables[0].Columns[o].ColumnName = rowHead.Rows[j]["fieldcname"].ToString();
}
}
}
Session.Add("dataSet", ds1);
}
下面是普通用法
Response.Clear();
Response.Buffer = true;
Response.Charset = "utf-8";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("名称", System.Text.Encoding.UTF8) + ".xls");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); //设置输出流为简体中文
Response.ContentType = "application/ms-excel"; //设置输出文件类型为excel文件。
this.EnableViewState = false;
System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
// repeater控件的ID
this.Repeater1.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End();
导出另类样式的excel表
//ExcelExporter.CreateExcel((DataSet)Session["dataset"], DateTime.Now.ToString() + ".xls", "application/ms-excel", this.Page);
// ExcelExporter.CreateExcelO((DataSet)Session["dataset"], DateTime.Now.ToString() + ".xls", "application/ms-excel", this.Page);
Response.Clear();
Response.Buffer = true;
//Response.AppendHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString()+".xls");
// Response.AddHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString() + ".xls");
Response.Charset = "utf-8";
Response.ContentEncoding = System.Text.Encoding.UTF8;
string names = DateTime.Now.ToString() + ".xls";
//Response.Write(names);
Response.AddHeader("content-disposition", "attachment;filename=" + names);
Response.ContentType = "application/vnd.ms-excel";
//System.IO.StreamWriter write = new System.IO.StreamWriter();
System.IO.StringWriter write = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter html = new HtmlTextWriter(write);
Repeater1.RenderControl(html);
Response.Write(write.ToString());
Response.Flush();
Response.End();
前台方法导出Excel
//导出Excel
function AllAreaExcel(objtableid) {
var oXL = new ActiveXObject("Excel.Application");
var oWB = oXL.Workbooks.Add();
var oSheet = oWB.ActiveSheet;
var sel = document.body.createTextRange();
sel.moveToElementText(document.getElementById(objtableid));
sel.select();
sel.execCommand("Copy");
oSheet.Paste();
oXL.Visible = true;
}
<input type="button" id="output" onclick='AllAreaExcel("table1")'; value="导出" class="buttonStyle"/>