近期需要把代码自动画出的Table转至EXCEL,于是在网上找到这篇文章,目前还未测试使用,先保存了,在此谢谢作者。
转载地址:http://blog.sina.com.cn/s/blog_62cd5a980100vcxh.html
博主前面介绍了GridView导出为Excel的实例,也给出了代码,网上有很多询问Html中的Table导出为Excel的问题,其实博主前面的文章中导出GridView的方法也完全适用于Table,只是有一点,由于Table不是服务器控件,所以不能直接使用This."控件ID",需要使用控件的遍历,加入以下代码就可以了
foreach (Control tb in this.Page.Controls)
{
if (tb.GetType().Name == "Table")
{
Table table = new Table();
//Response.Write(table.GetType().Name);
table = (Table)tb.FindControl(tb.ID);
table.RenderControl(htmlWrite);
}
}
原来的方法修改为:
public void exportToExcel(object sender, EventArgs e)
{
Response.Clear();
Response.AddHeader("content-disposition","attachment;filename=ExportResult.xls");
Response.Charset = "gb2312";
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = newSystem.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = newHtmlTextWriter(stringWrite);
//GridView1.AllowPaging = false;
//BindData();
foreach (Control tb in this.Page.Controls)
{
if (tb.GetType().Name == "Table")
{
Table table = new Table();
//Response.Write(table.GetType().Name);
table = (Table)tb.FindControl(tb.ID);
table.RenderControl(htmlWrite);
}
}
Response.Write(stringWrite.ToString());
Response.End();
}
还有一种方法就是使用JS。可以很方便的将页面上的Table转换为Excel;
<script type="text/javascript">
function gethtml()
{
var fTableElement,strcell,rows,cols,style,excelstr;
fTableElement = document.getElementByIdx_x("table1");
excelstr ="<html><head><!--<xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>工作表标题</x:Name><x:WorksheetOptions><x:print><x:ValidPrinterInfo/></x:print></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head>";
excelstr += "<tableborder='1'>";
//excelstr = "<tableborder='1'>";
for (i = 0; i < fTableElement.rows.length;i++)
{
excelstr += "<tr>";
for (j = 0; j < fTableElement.rows[i].cells.length;j++)
{
rows = fTableElement.rows[i].cells[j].rowSpan;
cols = fTableElement.rows[i].cells[j].colSpan;
style = fTableElement.rows[i].cells[j].align;
excelstr += "<td colspan=" + cols + " rowspan=" +rows + " align=" + style + ">";
for(k = 0; k <fTableElement.rows(i).cells(j).children.length;k++){
if(fTableElement.rows(i).cells(j).children[k].type ==undefined){
excelstr +=fTableElement.rows(i).cells(j).children[k].innerText;
}else{
excelstr += fTableElement.rows(i).cells(j).children[k].value;
}
}
excelstr += "</td>";
}
excelstr += "</tr>";
}
excelstr +="</table></html>";
return excelstr;
}
function XExportToExcel()
{
var fHtml = gethtml();
var fSaveWindow = window.open();
fSaveWindow.document.open("text/html", "gb2312");
fSaveWindow.document.write(fHtml);
fSaveWindow.document.execCommand("SaveAs", true,"table.xls");
fSaveWindow.close();
}
</script>
在his用的时候需要注意:
页面中最好不要出现服务器端的控件Button,可能会影响导出的Excel的美观。