Excel对象最后能不能不保存而直接输出流到客户端? 要将数据用Excel导出来,现在用的是Excel对象.是先保存然后再输出到客户端.因为行比较多的时候,保存的时间较长,客户端可能会超时.如果直接向客户端输出流,就不会超时了.请问能实现吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 建议把Excel当成一个数据源,然后来进行读写操作,这样或许会快一些!strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'"; 然后用Insert或update类语句来进行修改或新增 /// <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; } } 用ADO.NET会比Excel快 如果对格式没有特殊要求最好导出CSV 最好是 数据源来自ArrayList,输出格式是xls,有没有办法? 请教一个sql动态查询条件的问题! 谁能给我讲讲冒泡排序的原理 代码求解~~ C#NET 关于数据绑定 三个窗体之间的数据传递,在线等 如何根据某个程序标题栏文字得到其进程并关闭有这个标题栏文字的所有程序. pictureBox,scroll,grawImage问题,在线等待解答 请大家指点谢谢 请问C#用什么函数或类操作.ini文件? RichTextBox.SelectionColor 怎样控制文本的颜色? 不抛出异常 VS2005编译环境设置问题
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
然后用Insert或update类语句来进行修改或新增
/// 将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;
}
}