Web DataGrid 导出Execl,速度很慢怎么办?

TrainYouTrainMe 2005-11-04 10:04:26
private void DataTableToExecl(System.Data.DataTable dt)
{
Excel.Application oExcel=new Excel.Application();
Excel.Workbooks oBooks;
Excel.Workbook oBook;
Excel.Sheets oSheets;
Excel.Worksheet oSheet;
Excel.Range oCells;
string sFile,sTemplate;

sFile=Server.MapPath(Request.ApplicationPath) + const_ExeclPrintFileName;
sTemplate=Server.MapPath(Request.ApplicationPath) + const_ExeclTemplateFileName ;
oExcel.DisplayAlerts=false;
oBooks=oExcel.Workbooks;
try
{
oBooks.Open(Server.MapPath(Request.ApplicationPath) + const_ExeclTemplateFileName ,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value) ;
}
catch (Exception ez)
{
throw ez;
}
oBook=oBooks[1];
oSheets=oBook.Worksheets;
oSheet=(Excel.Worksheet) oSheets[1];

oSheet.Name="First Sheet";
oCells=oSheet.Cells;
DumpData(dt,oCells);

oSheet.SaveAs(sFile,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value) ;

oBook.Close(Missing.Value,Missing.Value,Missing.Value);

oExcel.Quit();
Marshal.ReleaseComObject(oCells);
Marshal.ReleaseComObject(oSheet);
 
Marshal.ReleaseComObject(oSheets) ;
Marshal.ReleaseComObject(oBook);
Marshal.ReleaseComObject(oBooks);
Marshal.ReleaseComObject(oExcel);
 
oExcel = null;
oBooks = null;
oBook = null;
 
oSheets = null;
oSheet = null ;
oCells = null;
System.GC.Collect();
}


private void DumpData(System.Data.DataTable dt, Excel.Range oCells)
{
int iCol;
int iRow;
DataRow dr;
object[] ary;
for (iCol=0;iCol<dt.Columns.Count;iCol++)
{
oCells[2,iCol+1]=dt.Columns[iCol].ToString();
}

for (iRow=0 ;iRow<dt.Rows.Count;iRow++)
{
dr=dt.Rows[iRow];
ary=dr.ItemArray;
for(iCol=0 ;iCol<=ary.GetUpperBound(0);iCol++)
{
oCells[iRow+3,iCol+1]=ary[iCol].ToString();
}
}
}
...全文
201 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
TrainYouTrainMe 2005-11-05
  • 打赏
  • 举报
回复
感谢大家的回复,问题解决了,方法就是大家所说的不在服务器上生成excel文件,而是
直接把DataGrid 导出到 excel文件流,这样的速度非常快。

再次感谢大家
gngnandgngn 2005-11-04
  • 打赏
  • 举报
回复
直接把datagrid导出去啊,不必要用excelapplication的
luoboqingcai 2005-11-04
  • 打赏
  • 举报
回复
不要循环套循环就好了。
使用Windows剪切板技术。
liuredstar 2005-11-04
  • 打赏
  • 举报
回复
是不是Excel进程的原因呢?
shan1119 2005-11-04
  • 打赏
  • 举报
回复
不了解
jxufewbt 2005-11-04
  • 打赏
  • 举报
回复
可以参考:
http://dotnet.aspx.cc/ShowDetail.aspx?id=8A4CBF47-B888-4832-3389-ED3A3A3C8AAB
abc789 2005-11-04
  • 打赏
  • 举报
回复
先生成在服务器上,然后再下载
jyoeiei 2005-11-04
  • 打赏
  • 举报
回复
是不是没有权限,虚拟运行了
Toti 2005-11-04
  • 打赏
  • 举报
回复
为什么不可以直接把DATAGRID导入EXCEL??
这个是我用的:
try
{
Response.Clear();
   Response.Buffer= true;
   Response.Charset="gb2312"; 
Response.AppendHeader("Content-Disposition","attachment;filename=FileFlow.xls");
   Response.ContentEncoding=System.Text.Encoding.GetEncoding("gb2312"); 
Response.ContentType = "application/ms-Excel";
   this.EnableViewState = false;  
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
   System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter); 
this.dtgmark.RenderControl(oHtmlTextWriter);   
   //this 表示输出本页,你也可以绑定datagrid,或其他支持obj.RenderControl()属性的控件
   Response.Write(oStringWriter.ToString());
   Response.End(); 
}
catch
{}
LiangBo21 2005-11-04
  • 打赏
  • 举报
回复
反对楼上的。
jQuery EasyUI是一组基于jQuery的UI插件集合,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。开发者不需要编写复杂的javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单的html标签 1.3.6更新 Bug treegrid: getChecked方法不能返回正确的行. fixed. tree: 异步树,在onlyLeafCheck:true时复选框不显示正确. fixed. Improvement treegrid:继承datagrid组件所有的selecting和checking方法。 linkbutton:图标对齐方式,支持值:'top','bottom','left','right'。 linkbutton:添加"size"属性,支持值:'small','large'。 linkbutton:添加的onClick事件。 menubutton:添加"menuAlign"属性,允许用户设置顶级菜单对齐。 combo:添加"panelAlign"属性,支持值:'left','right'。 calendar:"formatter"、"styler"和"validator"选项可用于自定义日历日期。 calendar:添加的onChange事件。 panel:添加"method","queryParams"和"loader"属性。 panel:添加"onLoadError"事件。 datagrid:添加"onBeginEdit"事件。 datagrid:添加"onEndEdit"事件。 datagrid:添加"sort"方法和"onBeforeSortColumn"事件。 datagrid:"combogrid"编辑器集成到datagriddatagrid:添加"ctrlSelect"属性,允许使用ctrl+click 多选 slider:添加"converter"选项,允许用户决定如何将一个值转换为滑块的位置或滑块位置值。 searchbox:添加"disabled"属性。 searchbox:添加"disabled","enable","clear","reset"方法。 spinner:添加"readonly"属性、"readonly"方法和"onChange事件。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧