本人在Server端想生成一个Excel文件,结果在保存中SaveAs的时候出错,请大家帮忙看看,谢谢!(office 2003下正常,office2000 和 office2002下出错)部分代码如下:
string strCurrentDir = Server.MapPath(".") + "\\";
string strLinkDir=strCurrentDir.Substring(strCurrentDir.IndexOf("wwwroot")+7);
oXL = new Excel.Application();
oXL.Visible = false;
oWB = (Excel._Workbook)(oXL.Workbooks.Add( Missing.Value ));
oSheet = (Excel._Worksheet)oWB.ActiveSheet;
。填充数据。
oWB.SaveAs(strCurrentDir + strFile,Excel.XlFileFormat.xlWorkbookNormal,null,null,false,false,Excel.XlSaveAsAccessMode.xlExclusive,false,false,null,null);错误提示为:"System.Runtime.InteropServices.COMException (0x800A03EC): Microsoft Excel 不能访问文件“C:\\inetpub\\wwwroot\\InputData”。 可能原因有:\n\n* 指定的文档名称或路径不存在。\n* 所要打开的文档被其他程序占用。切换到相应程序,关闭文档后再试。\n* 所要保存的工作簿的名称与另一个只读文档同名。请用其他名称保存文档。\r\n   at Excel.WorkbookClass.SaveAs(Object Filename, Object FileFormat, Object Password, Object WriteResPassword, Object ReadOnlyRecommended, Object CreateBackup, XlSaveAsAccessMode AccessMode, Object ConflictResolution, Object AddToMru, Object TextCodepage, Object TextVisualLayout)\r\n   at InputData.Opr14.btnprint_Click(Object sender, EventArgs e) in c:\\inetpub\\wwwroot\\inputdata\\opr14.aspx.cs:line 337"
请帮忙看看啊,我急啊,正在客户这边调试出现这个现象,郁闷,哪位大虾赶紧帮帮忙,小弟不胜感激!!!

解决方案 »

  1.   

    错误信息已经很清楚了。
    可能原因有:
    * 指定的文档名称或路径不存在。
    * 所要打开的文档被其他程序占用。切换到相应程序,关闭文档后再试。
    * 所要保存的工作簿的名称与另一个只读文档同名。请用其他名称保存文档。
    ------------------------------------------------------------------
    确保excel文件存在,并且aspnet用户对它有写入权限。查看一下是否已经有别的用户已经打开该excel文件了。
      

  2.   

    关闭正在运行的excel进程试试,或许是因为有程序调用exel但用完后没有结束进程
      

  3.   

    Response.Clear(); 
                 Response.Buffer= true; 
                 Response.Charset="GB2312"; 
     Response.AppendHeader("Content-Disposition","attachment;filename=Account.xls");  
     Response.ContentEncoding=System.Text.Encoding.UTF8;//设置输出流为简体中文
                 Response.ContentType = "application/ms-excel";//设置输出文件类
                 this.EnableViewState = false;   
                  System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN",true);
                  System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad); 
                  System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
                  this.Order_DataGrid.RenderControl(oHtmlTextWriter); 
                  Response.Write(oStringWriter.ToString());
                  Response.End();
      

  4.   

    忘记了,这段代码在Click事件里看看!
      

  5.   

    首先确保你有足够的权限,开始-运行:dcomcnfg
    在应用程序列表框中选择“Microsoft Excel 应用程序”->
    “安全性”->选择“使用自定义访问权限”,点击“编辑”按钮
    添加本地“ASPNET”用户,权限为“允许访问
      

  6.   

    你可以dataset 导入 excel参考
    http://community.csdn.net/Expert/topic/3077/3077526.xml?temp=.8746912
    http://www.dev-club.com/club/bbs/showEssence.asp?id=26350http://dev.csdn.net/Develop/article/18/18623.shtm
    http://community.csdn.net/Expert/topic/3112/3112296.xml?temp=.926861
    http://dotnet.aspx.cc/ShowDetail.aspx?id=BF0A54F9-C7C7-4200-BD9A-802AC1F5DE50
    http://expert.csdn.net/Expert/TopicView1.asp?id=2928057www.foxhis.com/powermjtest/
    原文代码:
    private void Button1_Click(object sender, System.EventArgs e)
    {
      //写入Excel的方法:
      //定义需要参数。
      string SourceFile="Data.XLS";                                //源文件名称。
      string TemplatePath=Server.MapPath("ExcelTemplate");    //存放源文件的文件夹路径。
      string DownloadPath=Server.MapPath("ExcelDownload");    //副本的文件夹路径。
      //副本的文件名。
      string TempFileName = DateTime.Now.ToString("yyyyMMdd") + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + ".XLS";  
      object missing = System.Reflection.Missing.Value;
      Excel.Application myExcel=new Excel.Application();
      //打开新文件
      myExcel.Application.Workbooks.Open(TemplatePath+"\\"+SourceFile,missing,missing,missing,missing,
    missing,missing,missing,missing,missing,missing, missing,missing); 
      Excel.Workbook myBook=myExcel.Workbooks[1];
      Excel.Worksheet curSheet = (Excel.Worksheet)myBook.Sheets[2];

      string DownloadFilePath=DownloadPath+"\\"+TempFileName;

      int i=0;
      while (i<=10)
      {
        myExcel.Cells[4+i,2]=i.ToString();
        myExcel.Cells[4+i,3]=i.ToString();
        myExcel.Cells[4+i,4]=i.ToString();
        myExcel.Cells[4+i,5]=i.ToString();
        myExcel.Cells[4+i,6]=i.ToString();
        i++;
      }   

      myBook.Saved=true;
      //myBook.SaveAs(DownloadFilePath,missing,"","",false,false,Excel.XlSaveAsAccessMode.xlNoChange,1,false,missing,missing);

      myBook.PrintPreview(0);
      //myBook.PrintOut(missing,missing,missing,missing,missing,missing,missing,missing);
      myBook.Close(false, null,null);
      myExcel.Quit();
      System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);
      System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);
      myBook = null;
      myExcel = null;
      GC.Collect();
      //Response.Redirect("ExcelDownload//"+TempFileName); //下载文件
    }
      

  7.   

    已经说得很清楚了1.指定的文档名称或路径不存在。
      ----(你读文件的路径不对)
    2.所要打开的文档被其他程序占用。切换到相应程序,关闭文档后再试。
      ----(你的程序可能因为出错或者其他原因没有关闭,导致EXCEL进程没有关闭)
    3.所要保存的工作簿的名称与另一个只读文档同名。请用其他名称保存文档。
      ---- (你的WORKBOOK的名字重复)依我看,第二种可能比较大。
      

  8.   

    谢谢各位的大力帮助,我觉得还是存在ASPNET用户访问权限造成的,可是我已经在dcomcnfg中配置了还是不好使,没办法,只好改用模板实现了,郁闷!不过还是谢谢大家!