我用如下代码导出excel,但是结果却是html形式,如图 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
repeater.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End();
导出形式:
<tr>
<td>ID</td>
<td>Name</td>
</tr>
<tr>
<td>123</td>
<td>名字</td>
</tr>实际需要效果是excel形式的
在线等待,急急急
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
repeater.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End();
导出形式:
<tr>
<td>ID</td>
<td>Name</td>
</tr>
<tr>
<td>123</td>
<td>名字</td>
</tr>实际需要效果是excel形式的
在线等待,急急急
#region 利用DataTable Html流导出EXCEL文档方法
/// <summary>
/// 利用Datatable Html流导出EXCEL
/// </summary>
/// <param name="ds"></param>
/// <param name="fileName"></param>
private void CreateExcel(DataSet ds)
{
HttpResponse response = Page.Response;
string fileName = "ExportFile" + DateTime.Now.ToShortDateString();
string excelHeader = string.Empty;
string excelContent = string.Empty;
StringBuilder sb = new StringBuilder(); DataTable dt = ds.Tables[0];
DataRow[] dr = dt.Select();
int colCount = dt.Columns.Count;
string headName = string.Empty; sb.Append("<table border='1'><tr>");
for (int i = 0; i < colCount; i++)
{
sb.Append("<td style='font-size:small; text-align:center; font-family:@宋体; font-weight:bold;'>");
headName = GetHeaderName(dt.Columns[i].Caption);
if (i == colCount - 1)
{
//excelHeader += headName + "\n";
sb.Append(headName + "</td></tr>");
}
else
{
//excelHeader += headName + "\t";
sb.Append(headName + "</td>");
}
}
foreach (DataRow row in dt.Rows)
{
sb.Append("<tr>");
for (int i = 0; i < colCount; i++)
{
sb.Append("<td style='font-size:small; text-align:center'>");
if (i == colCount - 1)
{
sb.Append(row[i].ToString() + "</td></tr>");
//excelContent += row[i].ToString() + "\n";
}
else
{
sb.Append(row[i].ToString() + "</td>");
//excelContent += row[i].ToString() + "\t";
}
}
}
sb.Append("</table>");
response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
//octet-stream html流,vnd.ms-excel-->Excel格式
response.ContentType = "application/vnd.ms-excel";
response.AddHeader("Content-Dispositon", "attachment; filename=" + fileName);
response.Write(@"<html><head>");
response.Write(@"<meta http-equiv='content-type' content='text/html; charset=gb2312'>");
response.Write("</head>");
response.Write("<body>");
response.Write(sb.ToString());
response.Write("</body>");
response.Write(@"</html>");
response.Write(excelHeader);
response.Write(excelContent);
response.Flush();
response.End();
}
/// <summary>
/// 得到表头名
/// </summary>
/// <param name="caption"></param>
/// <returns></returns>
private string GetHeaderName(string caption)
{
string headName = string.Empty;
switch (caption)
{
case "ID":
headName = "序号";
break;
case "StudentClass":
headName = "班级";
break;
case "StudentName":
headName = "学生";
break;
case "ChineseGrade":
headName = "语文";
break;
case "MathGrade":
headName = "数学";
break;
case "TotalGrade":
headName = "总成绩";
break;
default:
break;
}
return headName;
}
#endregion详情请见http://blog.csdn.net/davidcoffee/archive/2011/03/30/6290375.aspx
试试把Response.ContentType = "application/ms-excel";
改成Response.ContentType = "application/vnd.ms-excel";看看~
{
HttpResponse resp;
resp = Page.Response;
resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
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";
}
else
{
colHeaders+=dt.Columns[i].Caption.ToString()+"\t";
}
}
//向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();
}
给你换种方法实现,Repeater导出到Excel
前台页面加上这么一段js代码
<head>
<script type="text/javascript">
//导出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;
}
</script> <style media="print" type="text/css">
.Noprint
{
display: none;
}
.PageNext
{
page-break-after: always;
}
</style>
</head>
<body>
<table id="table">
//这里是你放repeater的地方
</table>
<div style="text-align: left">
<img src="images/dcexcel.gif" onclick='AllAreaExcel("table");' alt="导出到Execl" style="cursor: hand;" />
</div>
</body>
http://dotnet.aspx.cc/file/Export-Gridview-To-Excel-With-Multi-Sheet.aspx
这样的代码网上也很多
问题已经发现并解决了,没有完整的html呈现形式,因此不行