业务描述:
项目中用户需要实现:pdf,word,txt文件的查看(暂时只有这几种格式,未来可能会有其他格式,还有可能会扩展编辑,保存,上传到服务器等功能)
环境:VS2013 Office 2016
我选择使用DsoFramer控件,展示word文件,具体步骤
1.下载dsoframer.ocx (我的百度分享:http://pan.baidu.com/s/1eRUdNxS 没有密码)
2.把下载的dsoframer.ocx文件复制到C:\Windows\SysWOW64(我是64位系统,32位系统复制到C:\Windows\System32)
3.注册:regsvr32 C:\Windows\SysWOW64\dsoframer.ocx(cmd命令)
4:注册后会提示注册成功
5:项目里添加Com组件:工具箱=》右键=》选择项=》Com组件=》DSO Framer Control Object=》确定
6:这个时候,工具箱里有 DSO Framer Control Object这个控件, 把控件拖到你的界面上。
7:代码
string[] ss = System.IO.Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.doc");//也可以是.docx
string path = ss[0];
fileStream =FileHelper .FileToStream (path );
try
{
// this.axFramerControl1.Open(path, true, "Excel.Sheet", "", "");
this.axFramerControl1.Open(path, true, "Word.Document", "", "");
}
catch (Exception ex)
{
}
出现错误:
1.注册的时候报0x80070005 错误
解决:
错误代码0x80070005是没有使用管理员权限进行注册。
解决方法也很简单:
①开始
②搜索“cmd”
③右键点击“cmd”
④选择“以管理员身份运行”
然后再进行注册
2.项目的目标平台是Any CPU的时候,运行到InitializeComponent();的报错说,含有未注册的类
解决:我把目标平台改为X86,好了
3.运行到this.axFramerControl1.Open(path, true, “Word.Document”, “”, “”);的时候程序报错
捕捉到 System.Runtime.InteropServices.COMException
_HResult=-2147217149
_message=The associated COM server does not support ActiveX Document embedding.
HResult=-2147217149
IsTransient=false
Message=The associated COM server does not support ActiveX Document embedding.
Source=DsoFramerControl
ErrorCode=-2147217149
StackTrace:
在 DSOFramer._FramerControl.Open(Object Document, Object ReadOnly, Object ProgId, Object WebUsername, Object WebPassword)
在 AxDSOFramer.AxFramerControl.Open(Object document, Object readOnly, Object progId, Object webUsername, Object webPassword)
在 OGT.MainLine.NodeDesigner.WordViewControl..ctor(Byte[] fileStreamBytes) 位置 Codes\新建文件夹\OGT.MainLine.NodeDesigner\WordViewControl.cs:行号 43
InnerException:
解决:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\WOW6432Node\CLSID{F4754C9B-64F5-4B40-8AF4-679732AC0607}\DocObject]@=”16”
把这两句代码放到Notepade++或者txt文件里,然后保存为 a.reg的格式(例如 DocObject.reg) ,然后双击
但是这样只是能加载Word文件(.doc,和.docx都可以,但是Excel文件还是报这个错误,最后也没找出问题所在,我打算试试PageOffice了)