这里有不会产生多个excel进程的方法(推荐)

【zhangliu_521】:
http://support.microsoft.com/kb/926065/

【smile9961】:
有没更详细的错误信息,我是说有没具体提示那一行有错?

【GXY2005】:
Disable the JIT compiler

【zhangliu_521】:
从新装安装 Microsoft.NETFramework

【CathySun118】:
要在windows的组件服务中启动Dcom服务

【RedErick】:
没有详细的信息,刚才把framework重装了一遍,好了。

【littlekeen】:
一般出现比较不常见的系统错误,重装软件很可能就解决问题了。



【stephen0126】:
从装安装 Microsoft.NET Framework试下!

【RedErick】:
异常详细信息: System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
源错误: 
行 173:
行 174:        //打开工作簿
行 175:        Excel.Workbook mybook = my.Workbooks.Open(SavePath, objMissing, objMissing, objMissing,
行 176:            objMissing, objMissing, objMissing,objMissing, objMissing, objMissing,objMissing, objMissing, objMissing, objMissing, objMissing);
行 177:
 

源文件: d:/FeedBack/Controls/ImportFeedBackData.ascx.cs    行: 175 
各位看看这个吧,问题多多,真是难缠,Excel的版本是2003

【RedErick】:
自己顶,希望高手赐教

【zhangliu_521】:
没有详细的信息,刚才把framework重装了一遍,好了。

--------------------------------------------------------
现在你跟踪调试一下啊.
看看这些SavePath, objMissing, objMissing, objMissing,
取到值没有,然后再分析啊

【RedErick】:
问题是,在本地没有问题,传到服务器上就出问题了,dcom已经配置过了,但是还是出现这个问题,我怀疑是excel已经打开了SavePath指定的文件,所以这个地方无法打开,但是之前我并没有什么操作excel的语句,只有上传文件这个步骤,但是上传并没有打开excel

【Jackforid2003】:
上传的代码有没有?
上传得目录可有对excel文件的操作权限?
之前有没有成功做过excel文件的操作,操作结束com对象的释放是否合理?

【littlekeen】:
是进程自己打开的,关闭excel试试。

【RedErick】:
这是保存的函数
 private bool saveFile()
    {
        //保存文件信息        
        string ExcelFilePath = "../Uploads/"; //Excel文件路径
        strFilePath = Server.MapPath(ExcelFilePath);//暂时
        strfilename = UploadData.FileName;

        if (strfilename != "")
        {
            string extendName = strfilename.Substring(strfilename.Length - 3, 3);
            if (extendName != "xls" && extendName != "XLS")
            {
                labNode.Text = "您上传的文件不是EXCEL文件,请检查后重新上传!";
                return false;
            }
            else
            {
                if (UploadData.FileContent.Length != 0)
                {
                    string[] arrFile = strfilename.Split('//');
                    string FileName = arrFile[arrFile.Length - 1];
                    SavePath = strFilePath + FileName;
                    UploadData.SaveAs(SavePath);
                    labNode.Text = "成功上传文件!";
                    return true;
                }
                else
                {
                    labNode.Text = "文件不存在或者文件大小为0字节,请选择有效的上传文件";
                    return false;
                }
            }
        }
        else
        {
            labNode.Text = "请选择上传文件!";
            this.popupMessage("<script>alert('请选择上传文件! ');</script>", this.Page);
            return false;
        }
    }

【RedErick】:
这是操作excel的部分
Excel.ApplicationClass my = new Excel.ApplicationClass();
        object objMissing = System.Reflection.Missing.Value;
        //打开excel文件
        my = new Excel.ApplicationClass();
        my.Visible = false;        

        //打开工作簿
        Excel.Workbook mybook = my.Workbooks.Open(SavePath, objMissing, objMissing, objMissing,
            objMissing, objMissing, objMissing,objMissing, objMissing, objMissing,objMissing, objMissing, objMissing, objMissing, objMissing);

        Excel.Worksheet mysheet = (Excel.Worksheet)mybook.Worksheets.get_Item(1);
        mysheet.Cells.EntireColumn.AutoFit();
        my.Application.DisplayAlerts = false;
            mybook.Close(objMissing, objMissing, objMissing);
            my.Quit();
            mysheet = null; 
            mybook = null;
            my = null;

【Fan52027】:
http://www.cnblogs.com/Roger52027/archive/2006/12/28/606016.html

【RedErick】:
问题大概是解决了,重新做了一个简单的例子,放到服务器上没有问题,所以大概项目设置问题,所以索性重建了一个项目,把原来项目的大部分文件都挪了过来。另外,杀excel进程的解决方法:my.Application.DisplayAlerts = false;
    mybook.Saved = true;
    mybook.Save();
    mybook.Close(false, objMissing, objMissing);
    my.Quit();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(mysheet);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(mybook);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(my);
    mysheet = null;
    mybook = null;
            my = null;
            GC.Collect();

另外配置dcomcnfg
检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005

解决办法: 配置 DCOM 中 EXCEL 应用程序:
要在交互式用户帐户下设置 Office 自动化服务器,请按照下列步骤操作: 
1. 以管理员身份登录到计算机,并使用完整安装来安装(或重新安装)Office。为了实现系统的可靠性,建议您将 Office CD-ROM 中的内容复制到本地驱动器并从此位置安装 Office。 
2. 启动要自动运行的 Office 应用程序。这会强制该应用程序进行自我注册。 
3. 运行该应用程序后,请按 Alt+F11 以加载 Microsoft Visual Basic for Applications (VBA) 编辑器。这会强制 VBA 进行初始化。 
4. 关闭应用程序,包括 VBA。 
5. 单击开始,单击运行,然后键入 DCOMCNFG。选择要自动运行的应用程序。应用程序名称如下所示: 
Microsoft Access 97 - Microsoft Access 数据库
Microsoft Access 2000/2002 - Microsoft Access 应用程序
Microsoft Excel 97/2000/2002 - Microsoft Excel 应用程序
Microsoft Word 97 - Microsoft Word Basic
Microsoft Word 2000/2002 - Microsoft Word 文档 
单击属性打开此应用程序的属性对话框。
6. 单击安全选项卡。验证使用默认的访问权限和使用默认的启动权限已选中。 
7. 单击标识选项卡,然后选择交互式用户。 
8. 单击确定,关闭属性对话框并返回主应用程序列表对话框。 
9. 在 DCOM 配置对话框中,单击默认安全性选项卡。 
10. 单击访问权限的编辑默认值。验证访问权限中是否列出下列用户,如果没有列出,则添加这些用户: 
SYSTEM
INTERACTIVE
Everyone
Administrators
IUSR_<machinename>*
IWAM_<machinename>*
* 这些帐户仅在计算机上安装了 Internet Information Server (IIS) 的情况下才存在。 
11. 确保允许每个用户访问,然后单击确定。 
12. 单击启动权限的编辑默认值。验证启动权限中是否列出下列用户,如果没有列出,则添加这些用户: 
SYSTEM
INTERACTIVE
Everyone
Administrators
IUSR_<machinename>*
IWAM_<machinename>*
* 这些帐户仅在计算机上安装有 IIS 的情况下才存在。 
13. 确保允许每个用户访问,然后单击确定。 
14. 单击确定关闭 DCOMCNFG。 
如果你之前起用了身份模拟 (在 web.config 中配置了   <identity impersonate="true"/> ) ,需要删除之!...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值