不能啓動此對象的源應用程序
案例:
某公司有文員使用CAD2006劃圖然後將圖紙複製粘貼到excel 2007當中,因公司發展需要,把CAD2006升級到CAD2008版本後,excel2007中原先做好的圖紙文檔打不開,會提示“不能啓動此對象的源應用程序”,圖例:
原因:
這是因爲不同版本的AutoCAD使用不同的註冊表項來連接OLE對象的服務器程序。當對應版本的軟件沒有安裝時,容器程序便無法找到OLE服務程序。
本例中電腦安裝的是AutoCAD2008的版本,而圖紙是用AutoCAD2006畫的,本機默認的圖紙打開程序爲CAD2008,而不是CAD2006,缺少2006對2008的OLE轉換對象,即AutoCAD.Drawing.16不能向AutoCAD.Drawing.17轉換。
解決方法:
由於AutoCAD具有向下兼容性,因此可以通過註冊表項的自動轉向方式讓舊的OLE對象去使用新的服務器程序,即通過修改註冊表實現AutoCAD.Drawing.16向AutoCAD.Drawing.17的轉換。
我們先來了解一下AutoCAD各版本的OLE對象在註冊表中的SID值是多少
AutoCAD 2007/2008的OLECLSID
{7AABBB95-79BE-4C0F-8024-EB6AF271231C}
AutoCAD 2004,05,06的OLECLSID
{8E75D913-3D21-11d2-85C4-080009A0C626}
AutoCAD 2000,2000i,2002的OLECLSID
{8E75D913-3D21-11d2-85C4-080009A0C626}
各版本的OLESID其時很容易查到,當在excel當中點擊圖紙時會顯示圖紙調用的OLE對象版本,如圖:
在圖中我們可以看到該案例中能正常打開的圖像調用的OLE對象爲
AutoCAD.Drawing.17(AutoCAD 2008版本使用的OLESID),這時我們打開註冊表編輯器
查看HKEY_CLASSES_ROOT\[DWG格式號]\CLSID就能找到對應的DWG文件格式的CLSID。即:
*AutoCAD.Drawing.17格式DWG文件的CLSID可查看
HKEY_CLASSES_ROOT\AutoCAD.Drawing.17\CLSID;
附各版本對應的OLESID
*AutoCAD 2000/2000i/20002格式DWG文件的CLSID可查看
HKEY_CLASSES_ROOT\AutoCAD.Drawing.15\CLSID;
*AutoCAD 2004/2005/2006格式DWG文件的CLSID可查看
HKEY_CLASSES_ROOT\AutoCAD.Drawing.16\CLSID;
*AutoCAD2007格式DWG文件的CLSID可查看
HKEY_CLASSES_ROOT\AutoCAD.Drawing.17\CLSID,依此類推。
其他各版本AutoCAD查看OLESID碼的方法大致相同。
當知道了現在本機安裝的AutoCAD(案例中使用的是AutoCAD 2008)程序版本和要讀的文件版本後,可以通過下面的註冊表添加語句添加一個自動轉換項。
Windows RegistryEditor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{8E75D913-3D21-11d2-85C4-080009A0C626}\Autoconvertto]
@="{7AABBB95-79BE-4C0F-8024-EB6AF271231C}"
上面的例子是使AutoCAD.Drawing.16生成的OLE對象在AutoCAD2008中得到支持。
然後就可正常打開了。