我参考了几种导出Excel的方法:
1、DataGrid导出Excel
用此种方法导出的Excel,打开后有内容的能很好的显示,没内容就是白白一片,有什么好方法能使导出的excel美观,即有带线的Excel
2、调用Excel的COM组件
此种方法,速度慢了点,同时又有杀Excel进程的问题
3、还有其他的方法,我没试过,不懂效果怎么样有办法是用第一种方法导出的Excel更加美观吗??

解决方案 »

  1.   

    我用的是com导出的方式,慢死了。
      

  2.   

    我是用的 com 组件,速度感觉还可以!
      

  3.   

    1、DataGrid导出Excel是不是调用DataGrid的RenderControl方法?先要设置好DataGrid的样式,Border , GridLine ...
      

  4.   

    com的话仅仅是管理员用,一次两次还没问题,如果普通用户谁都能点“导出”,并且数据又常常变动难以长期Cache,那效率就成问题了。如果你觉得DataGrid不好,可以自己写<table>的生成代码,自己控制表格有关的一切样式。
      

  5.   

    ljhkim6(龙成啊少)说的对,用摸板EXCEL,那样你想怎么花哨就怎么花哨。
      

  6.   

    http://blog.csdn.net/deadshot123/archive/2006/02/22/606126.aspx
      

  7.   

    to jianyi0115(随意):
    没错是调用服务端控件的RenderControl()方法,对服务端的控件,比如DataGrid可以设置相关的样式,但是在DataGrid之外的区域,输出的就是白茫茫的一片了,覆盖掉的Excel的样式了。
    to cat_hsfz(http://cathsfz.sitesled.com):
    用Com的方法确实会变得很慢,而且会有杀Excel进程的麻烦,用<table>方法也会产生我上述说的问题,好像只要调用控件输出的Excel,控件区域的内容可以很好显示,但控件之外的区域就是白色的一片了。
    to blackhero(黑侠客)
    FarPoint 控件是免费的吗? 
      

  8.   

    我现在换了一种方法,用datatable 导出数据,有什么办法可以设置导出的Excel字体的大小、颜色???
    代码如下:
    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();
            }