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

解决方案 »

  1.   

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

  2.   

    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;
    }
    }
      

  3.   

    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 “无法找到网页”的错误
      

  4.   

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

  5.   

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

  6.   

    seeINFO: 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 .xls2. if the file is temporary, output the file directly to the user, don't create it on the server then redirect