【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"/> ) ,需要删除之!...
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"/> ) ,需要删除之!...