CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

B/S程序生成Excel时经常出现“无法找到网页”错误,将服务器Win2000Server重新启动后正常

楼主newtang(newtang)2003-11-03 14:59:43 在 .NET技术 / C# 提问

本人所开发的B/S体系程序,服务器将DataGrid数据输出到Excel,由客户端下载,现在经常出现客户端在点击“生成Excel”事件时出现“无法找到网页”的错误,将Web服务器重新启动后一切正常,客户端可以下载Web服务器生成的Excel文件,请问高手原因何在?  
   
  Web服务器:MS   Windows2000   Server/SP4/IE6.0SP1/.Net   Framework1.1  
                        MS   SQL   Server2000开发人员版  
                        MS   Office   XP  
   
  已做过已下设置:  
  1、Dcomcnfg配置,已将“Microsoft   Excel   应用程序”中的三种权限都加上“Everyone”和“本地ASP.net用户”,并都赋予权限  
  2、在产生Excel文档的目录:(C:\Inetpub\wwwroot\PTACE\Web\Temp),属性-安全-添加用户-添加AspNet用户,aspnet用户的允许写钩上  
  3、已在“计算机管理”中将“本地ASP.Net用户”加入Administrator用户组  
   
  有哪位高手遇到过这种问题,敬请告之,谢谢!!!  
  问题点数:100、回复次数:8Top

1 楼yhzhang37(yhzhang)回复于 2003-11-03 15:06:49 得分 5

可能在调用Excel的过程中出现错误,Excel未正确关闭。。  
  你在任务管理器里,将调用的Excel进程结束,然后试试。。Top

2 楼haoliqi(学习男孩)回复于 2003-11-03 15:21:20 得分 0

可否把你点击“生成Excel”事件时的代码拿来看看!Top

3 楼newtang(newtang)回复于 2003-11-03 17:57:13 得分 0

public   string   BuildExcel(string   paTempletID,string   paBillID,string   paPath,DataSet[]   paDataSet,string[]   paTableName)  
  {  
  string   SQLText,FileName,SheetName,FieldName,TableName,SaveFileName,ReturnFile;//文件名,字段名,表名,保存的文件名  
  int   FieldCount,PrintCount;//字段数,记录数  
  int   VRow,HRow;//打印行,列  
  int   DataSetCount;  
  int   i,j,m;  
  DataSet   TempletDS;//临时数据集  
  Excel.Application   AppExcel;  
  Excel.Workbook   AppBook;  
  Object   ValMissing;  
  DataSetCount=paDataSet.Length;  
  TempletDS=new   DataSet();  
  //获取模伴文件名  
  SQLText="Select   TempletName,SheetName   from   dtSysReportTemplet   where   TempletID='"+paTempletID+"'";  
  objDbSqlRun.GetDataSet(SQLText,   TempletDS);  
  FileName   =   TempletDS.Tables[0].Rows[0]["TempletName"].ToString();  
  SheetName=   TempletDS.Tables[0].Rows[0]["SheetName"].ToString();  
  ReturnFile=SheetName+paBillID+".xls";  
  FileName=paPath+"Templet\\"+FileName;//模板文件  
  SaveFileName=paPath+"Temp\\"+SheetName+paBillID+".xls";//保存的临时文件:模板名+编号(确定唯一性)  
  try  
  {  
  File.Delete(SaveFileName);  
  }  
  catch  
  {  
  //          
  }  
  try  
  {  
  ValMissing   =   System.Reflection.Missing.Value;  
  AppExcel   =   new   Excel.Application();  
  //获取模板名称及Excel文件所在路径  
   
  //打开Excel模板  
  AppBook   =   AppExcel.Workbooks.Open(FileName,ValMissing,ValMissing,ValMissing,ValMissing,ValMissing,ValMissing,ValMissing,   ValMissing,ValMissing,ValMissing,ValMissing,   ValMissing,ValMissing,ValMissing);  
  //查询  
  for(i=0;i<=DataSetCount-1;i++)  
  {  
  TableName=paTableName[i].ToString();  
  SQLText="Select   a.*,b.FieldNameE   from   dtReportField   a,dtSysReportField   b   where   a.FieldID=b.FieldID   and   a.TempletID=b.TempletID   and   a.TempletID='"+paTempletID+"'and   TableNameE='"+paTableName[i]+"'   Order   By   a.SortNo";  
  objDbSqlRun.GetDataSet(SQLText,   TempletDS);  
  FieldCount=TempletDS.Tables[0].Rows.Count;  
  PrintCount=paDataSet[i].Tables[0].Rows.Count;  
  for   (j=0;j<FieldCount;j++)  
  {  
  FieldName=TempletDS.Tables[0].Rows[j]["FieldNameE"].ToString();  
  VRow=Convert.ToInt32(TempletDS.Tables[0].Rows[j]["VRow"].ToString());  
  HRow=Convert.ToInt32(TempletDS.Tables[0].Rows[j]["HRow"].ToString());  
  for(m=0;m<PrintCount;m++)  
  {  
  AppExcel.Cells[VRow,HRow]=paDataSet[i].Tables[0].Rows[m][FieldName].ToString();  
  VRow++;  
  }  
  }  
  }  
   
  Sheets   sheets   =   AppBook.Worksheets;  
  _Worksheet   worksheet   =   (_Worksheet)   sheets.get_Item(1);  
  AppBook.Saved   =   true;          
  AppExcel.UserControl   =   false;  
  //保存文件  
  worksheet.SaveAs(SaveFileName,ValMissing,ValMissing,ValMissing,ValMissing,ValMissing,ValMissing,ValMissing,   ValMissing,ValMissing);  
   
  AppExcel.Quit();  
  ValMissing=null;  
  sheets=null;  
  worksheet=null;  
  AppBook=null;  
  AppExcel=null;  
  GC.Collect();//强制释放垃圾  
   
  return   ReturnFile;  
  }  
  catch  
  {  
  return   ReturnFile;  
  }  
  }  
  Top

4 楼saucer(思归)回复于 2003-11-03 18:29:51 得分 0

catch  
  {  
      return   ReturnFile;  
  }  
   
  what   is   ReturnFile?   is   that   a   file   name   returned   or   SaveFileName?   that   looks   bad,   in   the   case   of   an   exception,   the   file   doesn't   exist,   your   users   will   get   “无法找到网页”的错误Top

5 楼newtang(newtang)回复于 2003-11-03 19:42:53 得分 0

TO     saucer(思归)   :  
   
  ReturnFile为返回的在服务器上生成的Excel文件名,由客户端下载。  
  可是我在开发的机器上一切正常,执行N次“生成Excel”都无问题,在别的服务器上也OK,就是客户的那台服务器老出现不能生成Excel的“无法找到网页”的错误。  
   
  另外,我发现不管是哪一台机器运行系统,生成Excel后都会在Web服务器上产生一个不能自动释放的Excel进程,是不是跟这个有关?但其它机器即使这样也都正常可以不断重复生成Excel啊。  
   
  百思不得其解。。。Top

6 楼newtang(newtang)回复于 2003-11-03 20:20:45 得分 0

自己顶。。。Top

7 楼redbb(....DB & DEV....抵制日货,人人有责...)回复于 2003-11-03 21:09:50 得分 5

check   your   IE   's     security   's   setting   ,   set   it   to   lowTop

8 楼saucer(思归)回复于 2003-11-03 21:18:00 得分 90

see  
   
  INFO:   Considerations   for   Server-Side   Automation   of   Office  
  http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q257757  
   
   
  suggestion:  
   
  1.   don't   use   Excel   on   the   server   side,   just   create   CVS   file   but   rename   them   to   .xls  
   
  2.   if   the   file   is   temporary,   output   the   file   directly   to   the   user,   don't   create   it   on   the   server   then   redirect  
  Top

相关问题

  • ●●● 如何生成excel文件 ●●●
  • jsp生成excel的问题!
  • 生成Excel,在线等
  • 如何生成EXCEL文件
  • 关于DataGrid 生成excel(C#)
  • php生成Excel问题。
  • VB生成Excel表格的问题
  • 一个生成excel文件的问题
  • Vb中怎样生成excel图表?
  • 请问生成Excel的问题!

关键词

  • asp.net
  • b/s
  • excel
  • 文件名
  • web服务器
  • 用户
  • 客户
  • server
  • templetds
  • 生成

得分解答快速导航

  • 帖主:newtang
  • yhzhang37
  • redbb
  • saucer

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo