在c#中想实现如下功能:通过程序把VSD文件(visio)转化为图片显示出来,我引用了Microsoft Visio 11.0 Type Library 组件(COM),但声明ApplicationClass app=new ApplicationClass();显示如下错误:检索 COM 类工厂中 CLSID 为 {00021A20-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。

解决方案 »

  1.   

    我也刚接触visio和asp.net的编程,头疼啊,你说的转化成图片网上有一段代码,但是注释好像不可以显示出来,代码有些问题,自己调试一下吧:
    需要添加对Microsoft Visio 11.0 Type Library的引用(COM组件)。代码如下: 
       using Microsoft.Office.Interop.Visio;;
    private void Button1_Click(object sender, System.EventArgs e) 
       { 
       Document doc=null;;
       Cell cell=null;; 
       ApplicationClass app=new ApplicationClass();;//运行Visio应用程序 
       string CurrentPath=MapPath(".");;
       doc=app.Documents.OpenEx(CurrentPath+"\\bin\\test2.vsd",(short)Microsoft.Office.Interop.Visio.VisOpenSaveArgs.visOpenCopy);;//打开一个visio文件 
       const string CUST_PROP_PREFIX = "Prop.";; //自定义属性前缀 
       try 
       { 
       for(int i=1;;i〈=doc.Pages[1].Shapes.Count;;i++) 
       { 
       doc.Pages[1].Shapes[i].Rotate90();;//将图形旋转90度 
       doc.Pages[1].Shapes[i].Text="hello";;//设置图形的文本 
       if(doc.Pages[1].Shapes[i].get_CellExists("TagNum",(short)Microsoft.Office.Interop.Visio.VisExistsFlags.visExistsAnywhere)!=0)//检查定制是否存在指定定制属性 
       { 
       doc.Pages[1].Shapes[i].Text=data;;//在此处显示图形数据 
       } 
       } 
       doc.Saved=true;;//告诉Visio应用程序该文件已保存, 不然Visio要出现是否要保存的对话框,实际上并未保存,因为我们不想对源文件作修改,只是修改过后显示一下就行了。 
       doc.Pages [1].Export(CurrentPath+"\\test.jpg");;//转换成jpg格式的文件 
       } 
       finally 
       { 
       doc.Close();;//关闭打开的文件 
       app.Quit();;//退出Visio应用程序 
       } 
    测试环境: 
    Visio 2003+IIS 5.0+.NET FrameWork 1.1 
    未解决的问题: 
    1、 即使在一个形状中定义了自定义属性, 通过get_CellExists也无法检测到 
    2、 不知如何通过代码改变形状的背景色    
       }