我在用c#生成Excel时出现如下错误:
无法访问文件。请尝试下列方法之一:• 确认所指定的文件夹已存在。 
• 确认文件所在的文件夹不是只读的。
• 确认给出的文件名不包含下列字符: <  >  ?  [  ]  :  大队测井、试井、仪表检定结算情况统计表.xls 或 * 。
• 确认文件/路径名长度不超过 218 个字符。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Runtime.InteropServices.COMException: 无法访问文件。请尝试下列方法之一:• 确认所指定的文件夹已存在。 
• 确认文件所在的文件夹不是只读的。
• 确认给出的文件名不包含下列字符: <  >  ?  [  ]  :  大队测井、试井、仪表检定结算情况统计表.xls 或 * 。
• 确认文件/路径名长度不超过 218 个字符。源错误: 
行 656:        catch (Exception theException)
行 657:        {
行 658:            throw theException;
行 659:        }
行 660:        finally
 源文件: e:\cs\work\SCJH\App_Code\Print\ddjsPrint.cs    行: 658 堆栈跟踪: 
[COMException (0x800a03ec): 无法访问文件。请尝试下列方法之一:• 确认所指定的文件夹已存在。 
• 确认文件所在的文件夹不是只读的。
• 确认给出的文件名不包含下列字符: <  >  ?  [  ]  :  大队测井、试井、仪表检定结算情况统计表.xls 或 * 。
• 确认文件/路径名长度不超过 218 个字符。]
   ddjsPrint.SendExcel(Page page, String excelname) in e:\cs\work\SCJH\App_Code\Print\ddjsPrint.cs:658
   PrintBussiness.ddjs(Page page, Int32 year, Int32 month, Int32 did, Int32 quarter, Int32 jihuayue) in e:\cs\work\SCJH\App_Code\Print\PrintBussiness.cs:469
   jiesuan_Print.GridView2_SelectedIndexChanged(Object sender, EventArgs e) in e:\cs\work\SCJH\jiesuan\Print.aspx.cs:53
   System.Web.UI.WebControls.GridView.OnSelectedIndexChanged(EventArgs e) +105
   System.Web.UI.WebControls.GridView.HandleSelect(Int32 rowIndex) +89
   System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +221
   System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e) +95
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +35
   System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source, EventArgs e) +117
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +35
   System.Web.UI.WebControls.ImageButton.OnCommand(CommandEventArgs e) +115
   System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument) +171
   System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102 
--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.832; ASP.NET 版本:2.0.50727.832 
这是什么原因,在网上找了好长时间都没找到合适的解决方案,Dcom已经配置好了,而且别的系统用的代码和这个类似,但是没有出现这个错误,没看出这两个系统代码有什么区别???代码:
            excel.Visible = false;
            //excel.DisplayAlerts = false;//在服务器端不显示保存对话框
这句有异常

            xBk.SaveCopyAs(page.Server.MapPath("Reports\\" + excelname + ".xls"));//将excel文件存储到指定位置
            string path = page.Server.MapPath("Reports\\" + excelname + ".xls");
            System.IO.FileInfo file = new System.IO.FileInfo(path);
            page.Response.Clear();
            page.Response.Charset = "GB2312";
            page.Response.ContentEncoding = System.Text.Encoding.UTF8;
            // 添加头信息,为"文件下载/另存为"对话框指定默认文件名 
            page.Response.AddHeader("Content-Disposition", "attachment; filename=" + page.Server.UrlEncode(file.Name));
            // 添加头信息,指定文件大小,让浏览器能够显示下载进度 
            page.Response.AddHeader("Content-Length", file.Length.ToString());            // 指定返回的是一个不能被客户端读取的流,必须被下载 
            page.Response.ContentType = "application/ms-excel";            // 把文件流发送到客户端 
            page.Response.WriteFile(file.FullName);
            // 停止页面的执行             page.Response.End

解决方案 »

  1.   

    权限没问题的,我已经给了everyone完全控制权限还是不行
      

  2.   

    web程序最好不要使用此类方法来进行excel文件的读写。太也麻烦,还容易出错。
      

  3.   

    一样问题
    http://topic.csdn.net/u/20080104/17/5be39aff-07ef-464b-8d62-e27651a9330a.html
      

  4.   

    http://topic.csdn.net/u/20080104/17/5be39aff-07ef-464b-8d62-e27651a9330a.html
      

  5.   

    excelname   确定它正确有值?
      

  6.   

    excelname 换成任何名都不行
      

  7.   

    你可以这样子做,using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.IO;public partial class _Default : System.Web.UI.Page 
    {
        //若要在05中使用GridView导出文件,必须重载此方法
        public override void VerifyRenderingInServerForm(Control control)
        {
            //base.VerifyRenderingInServerForm(control);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        /// <summary>
        /// 导出文件的方法
        /// </summary>
        /// <param name="Model">Model为1时,则导出Excel格式,为2时则导出Word格式</param>
        private void ToFile(int Model)
        {      
            Response.Clear();
            Response.Buffer = true;
            Response.Charset = "GB2312";        
            // 如果设置为 GetEncoding("GB2312");导出的文件将会出现乱码!!!
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            if(Model==1)
            {
                Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.doc");
                Response.ContentType = "application/ms-word";//设置输出文件类型为Word文件。 
            }
            else
            {
                Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls");
                Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 
            }
            System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
            this.GridView1.RenderControl(oHtmlTextWriter);
            Response.Output.Write(oStringWriter.ToString());
            Response.Flush();
            Response.End();    }
        protected void Button1_Click(object sender, EventArgs e)
        {
            ToFile(1);
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            ToFile(2);
        }
    }