我试图从VB.NET编辑word文档,大部分使用此代码:
如何从Visual Basic .NET自动化Word以创建新文档 http://support.microsoft.com/kb/316383
它在我的机器上工作正常,但当我发布到服务器时,我得到以下错误.
由于以下错误,检索具有CLSID {000209FF-0000-0000-C000-000000000046}的组件的COM类工厂失败:80070005.
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息: System.UnauthorizedAccessException:由于以下错误,检索具有CLSID {000209FF-0000-0000-C000-000000000046}的组件的COM类工厂失败:80070005.
当我尝试创建一个单词应用程序对象时,会发生实际错误
Dim oWord As New Word.Application
Run Code Online (Sandbox Code Playgroud)
使用Visual Studio 2008和VB.NET 3.5.我引用了"Microsoft Word 10.0对象库",我在bin目录中看到了Interop.Word.dll文件.
在开发计算机和Windows Server 2003上使用MS Office 2003
对.NET来说仍然相当新,并且对窗口服务器知之甚少,但"UnauthorizedAccessException"听起来像是一个权限问题.我想知道是否有人可以指出我正确的方向,我可能需要做什么来让我的小应用程序访问使用word.
我是编程/ python的新手,所以我很感激我能得到的任何帮助.我想通过COM使用Excel将excel文件保存为特定格式.这是代码:
import win32com.client as win32
def excel():
app = 'Excel'
x1 = win32.gencache.EnsureDispatch('%s.Application' % app)
ss = x1.Workbooks.Add()
sh = ss.ActiveSheet
x1.Visible = True
sh.Cells(1,1).Value = 'test write'
ss.SaveAs(Filename="temp.xls", FileFormat=56)
x1.Application.Quit()
if __name__=='__main__':
excel()
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我没有明确知道它的代码,我该如何指定FileFormat?浏览文档,我找到了关于FileFormat对象的参考.我对如何访问XlFileFormat对象并以一种我可以找到它的枚举值的方式导入它一无所知.
谢谢!
我想在UNIX类型平台上用C++实现COM的自定义实现,以允许我动态加载和链接面向对象的代码.我认为这将基于POSIX提供的类似功能集来加载和调用dll,即dlopen,dlsym和dlclose.
据我所知,COM的一般思想是你链接到一些函数,即QueryInterface,AddRef和Release in a common dll(Kernel32.dll),然后允许你访问接口,这些接口只是一个用指针封装的函数指针表应该调用函数指针的对象.这些函数通过IUnknown公开,你必须继承它.
那一切都有用吗?有没有更好的方法来动态链接和加载到面向对象的代码?如何从dll继承工作 - 对基类的每次调用都必须是暴露的成员函数,即private/protected/public是否被忽略?
我非常精通C++和模板元编程,并且已经拥有一个完全反映的C++系统,即成员属性,成员函数和使用boost的全局/静态函数.
我以前有一个过时但有价值的解决方案来显示我系统上注册的所有这些库的COM/ActiveX控件和类型库内容(ProgID,方法名称和签名,枚举,常量,接口/ coclass等).
它提供了类似资源管理器的概述,可用于ActiveX开发/脚本编写的所有内容,并作为自动API文档工具提供,因为大多数COM/ActiveX库的官方文档要么完全缺失,要么最不完整.
由于内部依赖于64位Windows上不再支持的32位VB6运行时(comctl32.ocx),我最近转向64位Windows渲染了我无法使用的程序.
有谁知道仍然有效的替代方案?
是否有一个很好的权威参考,讨论32位和64位进程之间的互操作性?基于谷歌搜索我推断:
这表明:1.32位应用程序无法使用GetObject来获取正在运行的64位版本的Excel?或者可以吗?运行对象表(ROT)如何受到32位与64位问题的影响?如果只安装了64位版本的Office,32位进程是否可以创建Excel实例?我认为答案是"否",除非32位进程在其CoCreateInstance调用中使用64位标志,或者Excel是否以某种方式在32位世界中注册了自己?
Microsoft是否自动执行任何操作,例如从32位进程获取CoCreateInstance检查64位注册表并尝试创建一个进程外的64位组件(如果在32位注册表中没有注册)?我已经看到64位Office的一些发行说明,其中Microsoft警告从32位应用程序访问到64位Excel无法正常工作,但我知道有一个实例似乎只是工作.
对此有一个很好的技术事实参考?
我正在通过将Windows消息直接发送到HWND并调用自动化应用程序公开的COM服务器来实现一些自动化.
如果有多个实例正在运行,我需要能够确定COM服务器的进程ID,这样我可以使用COM调用命中相同的实例作为我发送Windows消息的实例.
我可以使用正在运行的对象表枚举所有正在运行的COM服务器,并为所有这些服务器返回monikers,但COM对象本身不会公开任何可用于获取窗口句柄,线程ID,进程ID或任何类型的方法.
有没有办法弄清楚,基于名字对象或名字对象的实际绑定COM对象,COM服务器的进程ID是什么?
谢谢!
我在COM中打开几个不同的工作簿(excel xlsx格式),然后搞砸它们.随着程序的进展,我希望关闭一个特定的工作簿,但保持其余部分.
如何关闭一个工作簿?(而不是整个excel应用程序)
xl = Dispatch("Excel.Application")
xl.Visible = False
try:
output = xl.Workbooks.Open(workbookName)
output2 = xl.Workbooks.Open(workbook2Name)
except com_error:
print "you screwed up blahblahblah"
exit()
#work on some stuff
#close output but keep output2 open
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试实现Interop.MODI.dll(来自Microsoft Office)以使用它应该提供的图像 - >文本功能.但是在做的时候
var modi = new MODI.DocumentClass();
Run Code Online (Sandbox Code Playgroud)
我明白了:
"带有CLSID的COMException 80040154 {40942A6C-1520-4132-BDF8-BDC1F71F547B}".
我有什么办法解决这个问题?
我使用regasm工具注册了DLL:-Problem仍然存在
我尝试将BuildPlatform设置为x86:-Problem仍然存在
我使用Visual Studio 2010 Ultimate和Windows 7 Professional 64Bit并安装了Microsoft Office 2007
编辑:我找到了解决方案:
我需要在MS Office中安装"MS-Office-Document-Imaging"功能才能使其正常工作.(软件 - > MS Office(右键单击 - >编辑) - >添加功能 - > Microsoft Office Document Imaging)
我想在Windows上创建一个ISO映像,即.iso文件.这可以使用COM组件IMAPI2FS.MsftFileSystemImage,我在MSDN博客文章"在PowerShell中使用IMAPI 2编写光盘"中找到了如何使用PowerShell执行此操作的说明.
在第3步之后,这些指令说"在这一步你可以停止并将结果图像保存到本地硬盘,这将是一个纯粹的ISO图像."
我的问题:如何在PowerShell中获取$ resultStream,即检索ImageStream的COM对象,并将其内容保存到文件中?
我负责维护C#应用程序(VS 2005).这个C#应用程序调用一个DLL("mydll.dll").我需要对有问题的dll进行一些更改.
我有用Visual Basic 6.0编写的文件"mydll.vbp".我在Visual Studio中进行了更改,然后从Visual Basic界面"制作"mydll"".
问题是,现在,每次我尝试在C#的debbuger模式中从"mydll.dll"实例化一个类时,我有以下"InvalidCastException"
无法将mydll.ClassFrommydll类型的COM对象强制转换为接口类型mydll._ClassFrommydll'.此操作失败,因为对于具有IID"{384FB79F-B636-4655-9441-8222692AB8AE}"的接口的COM组件上的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE)) .
我试图重新引用有问题的dll ......但这并没有改变任何东西.
对它可能来自何方的任何想法?
非常感谢所有可以提供帮助的yopu.几天来一直坚持这个问题.开始感受到压力......
com ×10
c# ×2
excel ×2
interop ×2
python ×2
winapi ×2
activex ×1
asp.net ×1
c++ ×1
clsid ×1
com-server ×1
comexception ×1
enumeration ×1
exception ×1
imapi ×1
iso-image ×1
moniker ×1
ms-office ×1
ms-word ×1
namespaces ×1
powershell ×1
vb6 ×1
win32com ×1