要将数据用Excel导出来,现在用的是Excel对象.是先保存然后再输出到客户端.
因为行比较多的时候,保存的时间较长,客户端可能会超时.
如果直接向客户端输出流,就不会超时了.
请问能实现吗?

解决方案 »

  1.   

    建议把Excel当成一个数据源,然后来进行读写操作,这样或许会快一些!
    strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'"; 
    然后用Insert或update类语句来进行修改或新增
      

  2.   

    /// <summary> 
    /// 将datatable中的数据导出到指定的excel文件中 
    /// </summary> 
    /// <param name="page">web页面对象</param> 
    /// <param name="tab">包含被导出数据的datatable对象</param> 
    /// <param name="filename">excel文件的名称</param> 
    public static void export(system.web.ui.page page,system.data.datatable tab,string filename) 

    system.web.httpresponse httpresponse = page.response; 
    system.web.ui.webcontrols.datagrid datagrid=new system.web.ui.webcontrols.datagrid(); 
    datagrid.datasource=tab.defaultview; 
    datagrid.allowpaging = false; 
    datagrid.headerstyle.backcolor = system.drawing.color.green; 
    datagrid.headerstyle.horizontalalign = horizontalalign.center; 
    datagrid.headerstyle.font.bold = true; 
    datagrid.databind(); 
    httpresponse.appendheader("content-disposition","attachment;filename="+httputility.urlencode(filename,system.text.encoding.utf8)); //filename="*.xls"; 
    httpresponse.contentencoding=system.text.encoding.getencoding("gb2312"); 
    httpresponse.contenttype ="application/ms-excel"; 
    system.io.stringwriter tw = new system.io.stringwriter() ; 
    system.web.ui.htmltextwriter hw = new system.web.ui.htmltextwriter (tw); 
    datagrid.rendercontrol(hw); string filepath = page.server.mappath("..")+"\\files\\" +filename; 
    system.io.streamwriter sw = system.io.file.createtext(filepath); 
    sw.write(tw.tostring()); 
    sw.close(); downfile(httpresponse,filename,filepath); httpresponse.end(); 

    private static bool downfile(system.web.httpresponse response,string filename,string fullpath) 

    try 

    response.contenttype = "application/octet-stream"; response.appendheader("content-disposition","attachment;filename=" + 
    httputility.urlencode(filename,system.text.encoding.utf8) + ";charset=gb2312"); 
    system.io.filestream fs= system.io.file.openread(fullpath); 
    long flen=fs.length; 
    int size=102400;//每100k同时下载数据 
    byte[] readdata = new byte[size];//指定缓冲区的大小 
    if(size>flen)size=convert.toint32(flen); 
    long fpos=0; 
    bool isend=false; 
    while (!isend) 

    if((fpos+size)>flen) 

    size=convert.toint32(flen-fpos); 
    readdata = new byte[size]; 
    isend=true; 

    fs.read(readdata, 0, size);//读入一个压缩块 
    response.binarywrite(readdata); 
    fpos+=size; 

    fs.close(); 
    system.io.file.delete(fullpath); 
    return true; 

    catch 

    return false; 


      

  3.   

    用ADO.NET会比Excel快 如果对格式没有特殊要求最好导出CSV
      

  4.   

    最好是 数据源来自ArrayList,输出格式是xls,有没有办法?