我参考了几种导出Excel的方法:
1、DataGrid导出Excel
用此种方法导出的Excel,打开后有内容的能很好的显示,没内容就是白白一片,有什么好方法能使导出的excel美观,即有带线的Excel
2、调用Excel的COM组件
此种方法,速度慢了点,同时又有杀Excel进程的问题
3、还有其他的方法,我没试过,不懂效果怎么样有办法是用第一种方法导出的Excel更加美观吗??
1、DataGrid导出Excel
用此种方法导出的Excel,打开后有内容的能很好的显示,没内容就是白白一片,有什么好方法能使导出的excel美观,即有带线的Excel
2、调用Excel的COM组件
此种方法,速度慢了点,同时又有杀Excel进程的问题
3、还有其他的方法,我没试过,不懂效果怎么样有办法是用第一种方法导出的Excel更加美观吗??
没错是调用服务端控件的RenderControl()方法,对服务端的控件,比如DataGrid可以设置相关的样式,但是在DataGrid之外的区域,输出的就是白茫茫的一片了,覆盖掉的Excel的样式了。
to cat_hsfz(http://cathsfz.sitesled.com):
用Com的方法确实会变得很慢,而且会有杀Excel进程的麻烦,用<table>方法也会产生我上述说的问题,好像只要调用控件输出的Excel,控件区域的内容可以很好显示,但控件之外的区域就是白色的一片了。
to blackhero(黑侠客)
FarPoint 控件是免费的吗?
代码如下:
private void OutputExcelThree(DataTable dt)
{
HttpResponse resp;
resp = Page.Response;
resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
resp.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(strName, System.Text.Encoding.UTF8) + "(" + HttpUtility.UrlEncode(QDateText, System.Text.Encoding.UTF8) + ")" + ".xls");
string colHeaders= "", ls_item="";
int i=0;
DataRow[] myRow=dt.Select("");
//取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符
for(i=0;i<dt.Columns.Count;i++)
colHeaders+=dt.Columns[i].Caption.ToString()+"\t";
//colHeaders +=dt.Columns[i].Caption.ToString() +"\n";
colHeaders += "\n";
////向HTTP输出流中写入取得的数据信息
resp.Write(colHeaders);
//逐行处理数据
foreach(DataRow row in myRow)
{
//在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\n
for (i = 0; i < dt.Columns.Count; i++)
ls_item += row[i].ToString() + "\t";
//ls_item += row[i].ToString() + "\n";
ls_item += "\n";
//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据
resp.Write(ls_item);
ls_item="";
}
resp.End();
}