我刚刚创建了一个简单的应用程序并托管在 IIS6.0 中。在代码中,我只是实例化excel对象。
using excel = Microsoft.Office.Interop.Excel.Application;
namespace TestHosting
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
excel excelObj=new Microsoft.Office.Interop.Excel.Application();
}
}
}
它给了我以下错误
"Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 Access is denied." (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).
系统配置:
Windows Server 2008,64位企业版。 Service Pack 2
我尝试了在互联网上找到的许多可能的解决方案,但没有一个能为我工作。
我试过的一些解决方案在
之下1)在“C:\ Windows \ SysWOW64 \ config \ systemprofile”路径下创建桌面应用程序 2)在DCOMCNFG中为Microsfot.EXcelApplicaiton设置完全权限/控制 3)在任务管理器中杀死所有excel实例
请帮助我这方面,这只是示例应用程序,但在我的原始应用程序主要是关于从/向Excel读取和写入数据。
答案 0 :(得分:37)
最好转移到Open XML,或者您可以配置如下
Com +配置
3.在DCOM配置中更改Microsoft Excel应用程序的安全设置。
控制面板 - >管理工具 - >组件服务 - >计算机 - > myComputer - > DCOM配置 - > Microsoft Excel应用程序。
右键单击以获取属性对话框。转到“安全”选项卡并自定义权限
请参阅此处的帖子:Error while creating Excel object,Excel manipulations in WCF using COM
答案 1 :(得分:30)
有时,您创建新的应用程序池并且无法通过DCOMCNFG解决它。然后还有另一种方法:
将应用程序池的标识(模型名称)设置为 LocalSystem 。
我不知道根本原因,但它一次解决了我的问题。
答案 2 :(得分:5)
回复太迟了。但是,如果这有助于仍然面临问题的人。我解决了这个问题:
→在专用池上设置站点而不是共享池。
→启用32位应用程序支持。
→将应用程序池的标识设置为LocalSystem。
答案 3 :(得分:3)
向IIS用户或组用户授予读/写权限
开始 - >跑 - > INETMGR
为您的默认网站启用ASP.NET身份验证
3。 对于64位(x64),请创建此文件夹: C:\的Windows \ Syswow64资料\配置\ systemprofile \桌面
对于32位(x86),创建此文件夹: C:\的Windows \ system32 \设置\ systemprofile \桌面
如果在systemprofile下运行,Windows服务需要Desktop文件夹。此文件夹是在XP和较旧的Windows Server版本上自动创建的,但不适用于Vista和Windows 2008 Server。
答案 4 :(得分:3)
对我有用的解决方案是更改启动应用程序池的用户(ApplicationPoolIdentity显然没有足够的权限来访问COM对象)。
祝你好运!答案 5 :(得分:3)
尝试执行以下操作:
您可以找到更多详情here
答案 6 :(得分:2)
您是否在服务器上安装了Excel?您正在使用的互操作接口用于自动化 Excel,这需要在那里安装Excel应用程序。每个页面请求周期都可能启动一个单独的excel.exe实例。我强烈建议不要将此作为Web应用程序的一部分。
你为什么要这样做?如果您想要生成Excel文档,那么很多有更好的方法可以做到这一点,包括OpenXML,如本主题其他地方所述。 请不要在服务器上运行Excel!
链接到OpenXML SDK下载:http://www.microsoft.com/en-us/download/details.aspx?id=5124
答案 7 :(得分:1)
这看起来像是一个权限问题。我建议运行processMonitor来确定需要哪些权限。
答案 8 :(得分:1)
我刚创建了一个简单的应用程序
该应用程序的目标处理器是什么?我猜这是x86
- 所以要么将其设置为x64
或anycpu
。
我认为您遇到的问题是由于64位进程尝试访问32位dll。
此外,如果您无法更改目标处理器,则可以尝试从IIS中的“应用程序池”设置启用32位应用程序。
答案 9 :(得分:1)
使用NPOI来读取和编写excel..it的免费和开源
for exapmle
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
//.....
private void button1_Click(object sender, EventArgs e)
{
HSSFWorkbook hssfwb;
using (FileStream file = new FileStream(@"c:\test.xls", FileMode.Open, FileAccess.Read))
{
hssfwb= new HSSFWorkbook(file);
}
ISheet sheet = hssfwb.GetSheet("Arkusz1");
for (int row = 0; row <= sheet.LastRowNum; row++)
{
if (sheet.GetRow(row) != null) //null is when the row only contains empty cells
{
MessageBox.Show(string.Format("Row {0} = {1}", row, sheet.GetRow(row).GetCell(0).StringCellValue));
}
}
}
答案 10 :(得分:1)
使用此链接,我们可以解决excel,word对象的“拒绝访问”问题。 这是非常有用的链接
答案 11 :(得分:1)
就个人而言,我执行了以下几个步骤:
*安装互操作程序集:您可以从Microsoft的网站https://www.microsoft.com/en-us/download/details.aspx?id=3508&tduid=(09cd06700e5e2553aa540650ec905f71)(256380)(2459594)(TnL5HPStwNw-yuTjfb1FeDiXvvZxhh.R.Q)()安装。
*检查程序集版本:检查开发和生产计算机上的程序集版本。程序集将在GAC中,在寡妇7中,此文件夹是%windir%\ assembly。
*创建一个桌面文件夹:该服务使用systemprofile下的桌面文件夹,因此如果不存在,则需要创建此文件夹,这里是文件夹的位置:
对于64位应用程序:C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop
对于32位应用程序:C:\ Windows \ System32 \ config \ systemprofile \ Desktop
*添加DCOM用户权限:
---启动运行窗口并输入'dcomcnfg'
---展开组件服务 - &gt;计算机 - &gt;我的电脑 - &gt; DCOM配置。
---寻找Microsoft Excel应用程序。右键单击它并选择属性,然后选择“安全”选项卡
---选择“启动和激活权限”下的“自定义”单选按钮和“访问权限”,然后单击“编辑”按钮以添加用户,如下所示。
---------单击“添加”按钮和用户“IIS_IUSRS”和“网络服务”并授予他们完全权限
---转到“标识”选项卡,然后选择“交互式用户”选项
---单击“应用”,然后单击“确定”。
答案 12 :(得分:0)
使用此
<system.web>
<identity impersonate="true"
userName="User Name"
password="Password" />
`enter code here`</system.web>
托尼 -
答案 13 :(得分:0)
两天前遇到这个问题,花了整整两天,所以我发现我需要在IUSR用户组的访问权限 DCOMCNFG - &gt;我的电脑属性 - &gt; Com Security - &gt;启动和激活权限 - &gt;编辑默认值并授予IUSR的所有权利。
希望它会帮助某人......
答案 14 :(得分:0)
如果您尝试在 64 位上进行配置,则必须在以下位置进行 DCOMconfig 配置(请参阅上面的其他答案):
C:\WINDOWS\SysWOW64>mmc comexp.msc /32
根据Setting Process-Wide Security Using DCOMCNFG。
此后,我无需管理员权限即可为 IIS_IUSRS
进行配置。