配置

  1. 从网上下载安装程序DsoFramer_KB311765_x86.exe,建议使用x86版本,64未版本可能会有兼容性问题。按照提示安装程序。
    图片
  2. 把dsoframer.ocx拷贝到系统目录下(c:\windows\system32),并注册。
    打开CMD,执行regsvr32.exe c:\windows\system32\dsoframer.ocx
    图片
  3. 在工具箱中右键——>选择项——>COM组件下找到DSO Framer Control Object——>勾选——>确定。
    图片
  4. 在工具箱中右键——>选择项——>COM组件下找到DSO Framer Control Object——>勾选——>确定。
    图片

PS:这只是一种配置的方式,貌似还可以在后台动态注册,添加。

使用

  1. 在工具箱中找到DSO Framer Control Object,拖动到窗口中就可以使用了。
    图片
  2. 图中的ActiveX Document Object部分就是我们需要的打开office文档控件。由于我的项目中要求只有Excel和Word用此控件打开,其余格式的文件都是直接读取文件内容所以用了一个MemoEdit来显示。当文件格式为Excel或Word时就用BringToFront()把DsoFramer控件显示在最前面,把MemoEdit用SendToBack()放到后边,然后设置DsoFramer控件的Dock属性为Fill就可以了。
      图中右侧部分的属性——>杂项中可以设置标题栏,菜单栏和工具栏的显示/隐藏。
        Titlebar:标题栏
        Menubar:菜单栏
        Toolbar:工具栏
    图片
  3. 后台使用的方式如下,可以读取本地文件也可以读取服务器文件。其中打开本地文件的时候如果对文件内容做出任何改动,当关闭窗口后都会自动保存到原文件,虽然Open()方法中虽然有ReadOnly参数的设置,但是截至到此文编写时为止都是不生效的,也许Web上可以,但实测Winfom不行。
    Jquery
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    if (ext == "xlsx" || ext == "docx")
    {
        MemoEdit1.SendToBack();
        axFramerControl1.BringToFront();
        axFramerControl1.Dock = DockStyle.Fill;
        axFramerControl1.Open(filePath);
    }
    else
    {
        MemoEdit1.BringToFront();
        axFramerControl1.SendToBack();
        MemoEdit1.Dock = DockStyle.Fill;
        MemoEdit1.Text = File.ReadAllText(filePath);
    }