NET导出Excel遇到的80070005错误的解决方法:
检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005基本上net导出excel文件,都需要如此配置一下,不配置有的时候没错,而配置后基本应该不会出错。
具体配置方法如下:
1:在服务器上安装office的Excel软件
2:在"开始"->"运行"中输入dcomcnfgexe启动"组件服务"
3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"
4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",d出"Microsoft Excel 应用程序属性"对话框
5:点击"标识"标签,选择"交互式用户"
6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在d出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限
7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在d出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限
8如果交互式用户设置后出现错误8000401a,可取消交互式用户,指定为administratr,可暂时解决此问题。进一步的解决方式还有待探讨。
9采用第8点的设置后,打开Excel可能会出现“无法使用对象引用或链接”,并且不能进行单元格粘贴。原因不明,取消设置后即可消失。
另外说明:光按以上设置并不能完全保证不出问题,因为调用OFFICE的 *** 作可能涉及其他的系统资源,很可能依然权限不够而导致问题,只是设置EXCEL应用程序后,还是可能会报80070005的错误,最保险的是应该在dcomcnfg中选中我的电脑然后右键属性->com安全,将里面的访问权限,启动和激活权限全都编辑默认,在当中加上network service(iis 50的话,要加的是aspnet用户),并如前面对networkservice设置上相同的权限,这样基本上能保证不会再出什么问题。
以上为基本出路方法,但是我也遇到过应用以上方法还是报错的情况,我的环境是windows2003 + office2003+office2007,在测试服务器上都可以导出无任何问题!但是更新了正式环境就是报错,权限都设置了还是报错,因为我的测试服务器是默认office启动的,所以我怀疑是office版本环境问题!于是我卸载了office2007,马上测试ok了,但是重启服务器后就产生了have not been Pre-compiled错误,导出页面都无法打开了,于是我又重新安装了office2007,页面可以打开了,但是导出excel时又开始报错!我又把所有的权限重新设置一遍,问题依旧!后来发现两个服务器默认打开excel的程序不一样,测试环境是默认office2003打开,正式环境是office2007打开,于是我在正式环境重新注册office2003,使其同样也是默认office2003打开程序,靠!问题终于解决了!!!
注册方法 执行 开始----运行----输入excel2003的安装路径,例如 "C:\Program Files\Microsoft Office\OFFICE11\excelexe" /regserver 注意/符号前面有一个空格,其中"C:\Program Files\Microsoft Office\OFFICE11\excelexe" 是excel2003的安装程序的路径,参数regserver表示注册的意思!
运行后,会启动Office 2003的安装程序,进行修复,重新注册。
excel2007为默认的启动程序的方法类同,可以执行 开始----运行----"D:\Program Files\Microsoft Office\Office12\excelexe" /regserver
综上所述,再遇到Excel导出、导入问题时,先考虑权限问题,再考虑office的版本环境!如此基本能够解决这些问题了
这个,你试试那个history对象。这个里面有的研究。
一个窗口window。location就可以了。要是打开了多个IE浏览器说明你要找到这么些正在运行的IE实例。找到他们的windowlocation。试试看。
你进行如下 *** 作可以看到 activex的设置处
打开ie----》工具------》internet选项----》安全----》自定义级别,在这里是设置的。
你把禁用的选择起用就可以 但是电脑的安全性可能会下降
ActiveX控件运行在客户端。我们可以获得客户端的一些信息,如IC卡的信息,客户端的验证等等。但是ActiveX控件也有许多缺点:客户端的部署很困难,如客户端不能正确下载,下载了以后不能正确执行,下载的时候需要设置IE的安全级别等等。
更多的时候,我都在使用COM组件来扩展ASP的功能。准确地说,是服务端运行的Activex Dll组件。使用ServerCreateObject(“工程名类名”)即可完成对组件的调用。这种方式问题很少,只要组件中以PUBLIC对外暴露方法既可。但是,有时候我们必须使用ACTIVEX 控件(OCX)嵌入到网页中执行来获取客户端的信息。这就有了许许多多的一些问题。
这是我们需要解决的N个问题(从简单到难)
1. 如何从服务端获取数据,传递到ActiveX控件中。
1) 初始化时使用参数绑定
2) 运行时得到数据
2. ActiveX控件得到客户端的信息,如何传递到服务端。
3. 安全性
1) 数字签名
2) 使用IOBJSAFE接口
好了,我们开始实例学习。
这个功能演示了如何制作一个简单的控件,并嵌入网页中执行。
工作环境:WINXP+VB6+IE6
我的IE安全设置为安全级别-中。所有的Activex选项设为启用。
打开vb6,新建ActiveX控件工程。
工程名:fOcx,用户控件名:UC1
为了方便,我们使用ActiveX控件接口向导…,菜单->外接程序->外接程序管理器->VB 6 ActiveX控件接口向导。确定即可。
打开ActiveX控件接口向导,下一步,对于可用名称和选定名称我们默认下一步,新建自定义成员,GetInfo类型:属性,下一步,共有方法中选择我们刚才添加的GetInfo,映射到控件选择TxtInfo,成员选择Text,下一步直到完成。代码窗口中会生成一些我们不需要的,删除,剩下的代码如下:
Option Explicit
'注意!不要删除或修改下列被注释的行!
'MappingInfo=txtinfo,txtinfo,-1,Text
Public Property Get GetInfo() As String
GetInfo = txtinfoText
End Property
Public Property Let GetInfo(ByVal New_GetInfo As String)
txtinfoText() = New_GetInfo
PropertyChanged "GetInfo"
End Property
'从存贮器中加载属性值
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
txtinfoText = PropBagReadProperty("GetInfo", "Text1")
End Sub
'将属性值写到存储器
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
Call PropBagWriteProperty("GetInfo", txtinfoText, "Text1")
End Sub
OK,好了,我们编译成fOcxocx文件,然后F5直接运行,VB会打开一个测试页。如下:
E:\Program Files\Microsoft Visual Studio\VB98\UC1html
同时,打开你的IE浏览器,看到了吧,你做的控件出现在了这个测试页中。
你可以打开测试页,可以看到ClsID,比如:890D1028-298B-45CF-9A64-6ED5A5BACBC9
因为VB编译的时候已经完成注册所以无法模拟客户端没有安装该控件时出现的提示
我们继续
使用regsvr32 F:\csdn_vb\com+_activeX\sample1\fOcxocx –u卸载
或者
打开注册表,在HKEY_CLASSES_ROOT\CLSID下面找到
890D1028-298B-45CF-9A64-6ED5A5BACBC9项,删除之,当然这种方式还有项存在而没有删除干净
此时浏览>
CString GetMacAddress()
/
通过WMI取第一块活动网卡地址,事先需要调用过CoInitialize()初始化COM
/
{
HRESULT hRes;
hRes = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT,
RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
if (FAILED(hRes))
return _T("");
IWbemLocator pLoc = NULL;
hRes = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID)&pLoc);
if (FAILED(hRes))
return _T("");
IWbemServices pSvc = NULL;
hRes = pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"), NULL, NULL, 0,
NULL, 0, 0, &pSvc);
if (FAILED(hRes))
{
pLoc->Release();
return _T("");
}
hRes = CoSetProxyBlanket(pSvc, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE,
NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_DEFAULT);
if (FAILED(hRes))
{
pSvc->Release();
pLoc->Release();
return _T("");
}
IEnumWbemClassObject pEnumerator = NULL;
hRes = pSvc->ExecQuery(_bstr_t(L"WQL"),
_bstr_t(L"SELECT FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = TRUE"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL, &pEnumerator);
if (FAILED(hRes))
{
pSvc->Release();
pLoc->Release();
return _T("");
}
CString szMacAddress = _T("");
while (true)
{
IWbemClassObject pclsObj = NULL;
ULONG uReturn = 0;
hRes = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
if (FAILED(hRes) || !uReturn)
break;
VARIANT vtProp;
VariantInit(&vtProp);
if (SUCCEEDED(pclsObj->Get(L"MACAddress", 0, &vtProp, 0, 0)))
{
if (V_VT(&vtProp) == VT_BSTR)
{
szMacAddress = vtPropbstrVal;
VariantClear(&vtProp);
pclsObj->Release();
break;
}
VariantClear(&vtProp);
}
pclsObj->Release();
}
pEnumerator->Release();
pSvc->Release();
pLoc->Release();
return szMacAddress;
}
------解决方案--------------------奥,那个DLL大概在02年左右整理的好像,时间太久了,应该是不支持vsita的,楼主看看这段代码是否有用?我是拷贝来的:/ //函数名称:GetDriverInfomation //函数功能:得到驱动器的信息 //参数1:bAlpha - BYTE型,驱动器的代号A-Z(a-z) //参数2:iGTI_TYPE - int,将要获取的驱动器信息类型 // GDI_VOLUMENAME 得到驱动器名字 // GDI_VOLUMESERIALNUMBER 得到驱动器序列号 // GDI_VOLUMEFILESYSTEM 得到驱动器文件系统 // GDI_VOLUMETYPE 得到驱动器类型 // GDI_VOLUMESIZE 得到驱动器总大小 // GDI_VOLUMEFREESIZE 得到驱动器剩余大小 //返回值:CString型,所要得到的驱动器信息的字符串表达 //例子:得到C盘的名字GetDriverInfomation('C',GDI_VOLUMENAME) / #define GDI_VOLUMENAME 0 #define GDI_VOLUMESERIALNUMBER 1 #define GDI_VOLUMEFILESYSTEM 2 #define GDI_VOLUMETYPE 3 #define GDI_VOLUMESIZE 4 #define GDI_VOLUMEFREESIZE 5 CString GetDriverInfomation(BYTE bAlpha,int iGTI_TYPE) { CString strResult = _T("");
以上就是关于检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以全部的内容,包括:检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以、如何获得win10系统trustedinstaller权限、怎样获取当前浏览器正在浏览的网址,如www.baidu.com等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)