根据自己对dsoframer控件的学习,想把dsoframer控件进行简单的包装为C#的usercontrol,大体需要作如下:(创建windows的usercontrol的步骤就不再说了。。。)
我们暂时不对dso打开网络文件的功能和上传文件功能作过多研究,一来由于我自己不用它提供的这个功能,二来确实觉得它的这方面功能不是很强大而且使用起来比较
麻烦,呵呵,请见谅!
1.使用前注册该dsoframer控件,我把该dso控件当作嵌入资源,用学习笔记1中的方法注册即可

  1. /// <summary>
  2. /// usercontrol控件初始化
  3. /// </summary>
  4. /// <param name="_sFilePath">本地文件全路径</param>
  5. public void Init(string _sFilePath)
  6. {
  7. try
  8. {
  9. RegControl();//注册控件
  10. if(!CheckFile(_sFilePath))//判断是否为所支持的office文件
  11. {
  12. throw new ApplicationException("文件不存在或未标识的文件格式!");
  13. }
  14. AddOfficeControl();//这里一定要先把dso控件加到界面上才能初始化dso控件,这个dso控件在没有被show出来之前是不能进行初始化操作的,很奇怪为什
  15.  
  16. //么作者这样考虑.....
  17. InitOfficeControl(_sFilePath);
  18. }
  19. catch(Exception ex)
  20. {
  21. throw ex;
  22. }
  23. }
  24.  
  25. public bool RegControl()
  26. {
  27. try
  28. {
  29. Assembly thisExe = Assembly.GetExecutingAssembly();
  30. System.IO.Stream myS = thisExe.GetManifestResourceStream("NameSpaceName.dsoframer.ocx");
  31.  
  32. string sPath = “该ocx文件的实际路径”+ @"/dsoframer.ocx";
  33. ProcessStartInfo psi = new ProcessStartInfo("regsvr32","/s " +sPath);
  34. Process.Start(psi);
  35. }
  36. catch(Exception ex)
  37. {
  38. MessageBox.Show(ex.Message);
  39. }
  40. return true;
  41. }

2.动态向usercontrol添加dsoframer实例

  1. private AxDSOFramer.AxFramerControl m_axFramerControl = new AxDSOFramer.AxFramerControl();
  2. /// <summary>
  3. /// 添加控件
  4. /// </summary>
  5. private void AddOfficeControl()
  6. {
  7. try
  8. {
  9. this.m_Panel_Control.Controls.Add(m_axFramerControl);
  10. m_axFramerControl.Dock = DockStyle.Fill;
  11. }
  12. catch(Exception ex)
  13. {
  14. throw ex;
  15. }
  16. }

3.初始化dsoframer控件 ,我这里用已经有的文件进行dso初始化,

  1. /// <summary>
  2. /// 初始化office控件
  3. /// </summary>
  4. /// <param name="_sFilePath">本地文档路径</param>
  5. private void InitOfficeControl(string _sFilePath)
  6. {
  7. try
  8. {
  9. if(m_axFramerControl == null)
  10. {
  11. throw new ApplicationException("请先初始化office控件对象!");
  12. }
  13.  
  14. //this.m_axFramerControl.SetMenuDisplay(48);//这个方法很特别,一个组合菜单控制方法,我还没有找到参数的规律,有兴趣的朋友可以研究一下
  15. string sExt = System.IO.Path.GetExtension(_sFilePath).Replace(".","");
  16. //this.m_axFramerControl.CreateNew(this.LoadOpenFileType(sExt));//创建新的文件
  17. this.m_axFramerControl.Open(_sFilePath,false,this.LoadOpenFileType(sExt),"","");//打开文件
  18. //隐藏标题
  19. this.m_axFramerControl.Titlebar = false;
  20. }
  21. catch(Exception ex)
  22. {
  23. throw ex;
  24. }
  25. }
  26.  
  27. 下面这个方法是dso打开文件时需要的一个参数,代表office文件类型
  28. /// <summary>
  29. /// 根据后缀名得到打开方式
  30. /// </summary>
  31. /// <param name="_sExten"></param>
  32. /// <returns></returns>
  33. private string LoadOpenFileType(string _sExten)
  34. {
  35. try
  36. {
  37. string sOpenType = "";
  38. switch (_sExten.ToLower())
  39. {
  40. case "xls":
  41. sOpenType = "Excel.Sheet";
  42. break;
  43. case "doc":
  44. sOpenType = "Word.Document";
  45. break;
  46. case "ppt":
  47. sOpenType = "PowerPoint.Show";
  48. break;
  49. case "vsd":
  50. sOpenType = "Visio.Drawing";
  51. break;
  52. default:
  53. sOpenType = "Word.Document";
  54. break;
  55. }
  56. return sOpenType;
  57.  
  58. }
  59. catch (Exception ex)
  60. {
  61. throw ex;
  62. }
  63. }

4.我觉的最重要的一步,就是公布dso当前的活动对象,因为自己做这个usercontrol功能不强,但是不能把人家dso功能给杀掉,给使用者留一个更大的空间。。。。

  1. /// <summary>
  2. /// 获取当前操作的文档
  3. /// </summary>
  4. public object ActiveDocument
  5. {
  6. get
  7. {
  8. return this.m_axFramerControl.ActiveDocument;
  9. }
  10. }
  11.  
  12. /// <summary>
  13. /// 获取当前控件对象
  14. /// </summary>
  15. public AxDSOFramer.AxFramerControl OfficeObject
  16. {
  17. get
  18. {
  19. return this.m_axFramerControl;
  20. }
  21. }
  22. .公布了一些简单的excelword操作方法,
  23. #region public word method,这几个方法只对word文档有效
  24.  
  25. /// <summary>
  26. /// 设置保留修改痕迹(可以通过word工具栏的审批修改,此方法仅仅是提供初始化)
  27. /// 这个方法挺好,可以模拟键盘按键,很巧啊.(以前很长时间都不知道可以这样...)
  28. /// </summary>
  29. /// <param name="_bIs"></param>
  30. public void WordSetSaveTrace()
  31.  
  32. /// <summary>
  33. /// 替换标签下
  34. /// </summary>
  35. /// <param name="_sMark"></param>
  36. /// <param name="_sReplaceText"></param>
  37. /// <param name="_IsD">替换后是否突出显示</param>
  38. /// <returns></returns>
  39. public bool WordReplace(string _sMark,string _sReplaceText,bool _IsD)
  40.  
  41. /// <summary>
  42. /// 文本替换
  43. /// </summary>
  44. /// <param name="_sOrialText"></param>
  45. /// <param name="_sReplaceText"></param>
  46. /// <returns></returns>
  47. public bool WordReplace(string _sOrialText,string _sReplaceText)
  48.  
  49. #endregion
  50.  
  51. #region public excel method
  52.  
  53. /// <summary>
  54. /// 向固定位置填值
  55. /// </summary>
  56. /// <param name="_sValue">填写内容</param>
  57. /// <param name="_iBeginRow">开始行</param>
  58. /// <param name="_iBeginCol">开始列</param>
  59. public void ExcelFillValue(string _sValue,int _iBeginRow,int _iBeginCol)
  60.  
  61. /// <summary>
  62. /// 向固定位置填值
  63. /// </summary>
  64. /// <param name="_sValue">填写对象</param>
  65. /// <param name="_iBeginRow">开始行</param>
  66. /// <param name="_iBeginCol">开始列</param>
  67. public void ExcelFillValue(Object _sValue,int _iBeginRow,int _iBeginCol)
  68.  
  69. /// <summary>
  70. /// 向固定位置填值
  71. /// </summary>
  72. /// <param name="_ds">填写内容</param>
  73. /// <param name="_iBeginRow">开始行</param>
  74. /// <param name="_iBeginCol">开始列</param>
  75. public void ExcelFillValue(System.Data.DataSet _ds,int _iBeginRow,int _iBeginCol,bool _IsTitle)
  76.  
  77. /// <summary>
  78. /// 清空excel文档
  79. /// </summary>
  80. public void ExcelClear()
  81.  
  82. /// <summary>
  83. /// 清空固定位置的内容
  84. /// </summary>
  85. /// <param name="_iBeginRow">开始行</param>
  86. /// <param name="_iBeginCol">开始列</param>
  87. public void ExcelClear(int _iBeginRow,int _iBeginCol)
  88.  
  89. /// <summary>
  90. /// 清空指定区域的内容
  91. /// </summary>
  92. /// <param name="_iBeginRow">开始行</param>
  93. /// <param name="_iBeginCol">开始列</param>
  94. /// <param name="_iEndRow">结束行</param>
  95. /// <param name="_iEndCol">结束列</param>
  96. public void ExcelClear(int _iBeginRow,int _iBeginCol,int _iEndRow,int _iEndCol)
  97.  
  98. #endregion

以上这些都是对excel和word文档操作的小儿科,害怕贴出来各位大虾见笑,不敢贴了.....

6.公布一些简单的方法(保存和另存为方法是防止菜单和工具栏被隐藏的情况下不能保存),这类应该有很多方法,我目前只用了这些个所以....

  1. /// <summary>
  2. /// 保存
  3. /// </summary>
  4. public void Save()
  5. {
  6. try
  7. {
  8. //先保存
  9. this.m_axFramerControl.Save(true,true,"","");
  10. }
  11. catch(Exception ex)
  12. {
  13. throw ex;
  14. }
  15. }
  16.  
  17. /// <summary>
  18. /// 另存为
  19. /// </summary>
  20. public void SaveAs()
  21. {
  22. try
  23. {
  24. //另存为
  25. SaveFileDialog sfd = new SaveFileDialog();
  26. string sExt = System.IO.Path.GetExtension(this.m_sFilePath).Replace(".","");
  27. sfd.Filter = sExt;
  28. if(sfd.ShowDialog() == DialogResult.OK)
  29. {
  30. string sSavePath = sfd.FileName;
  31. if(System.IO.File.Exists(sSavePath))
  32. {
  33. System.IO.File.Delete(sSavePath);
  34. }
  35. this.m_axFramerControl.SaveAs(sSavePath,this.LoadOpenFileType(sExt));
  36. }
  37. }
  38. catch(Exception ex)
  39. {
  40. throw ex;
  41. }
  42. }
  43.  
  44. /// <summary>
  45. /// 关闭当前界面
  46. /// </summary>
  47. public void Close()
  48. {
  49. try
  50. {
  51. if(this.m_axFramerControl != null)
  52. {
  53. this.m_axFramerControl.Close();
  54. }
  55. }
  56. catch(Exception ex)
  57. {
  58. throw ex;
  59. }
  60. }

最后如果想把该dso控件的注册去掉也可以,因为我没有办法得到该控件是否在机器上注册过,所以每次初始化都要注册,不知道园子里的各位朋友有没有办法检测,还请赐教?

好了,一个简单的可以用于windows程序的office在线编辑控件完成了.

引用http://www.cnblogs.com/jisen/archive/2007/07/12/815772.html

dsoframer控件学习小结(打开WORD,EXCEL等文件)的更多相关文章

  1. DevExpress控件学习总结(转)

    DevExpress控件学习总结   1.Navigation & Layout 1.1 Bar Manager 如果想在窗体或用户控件(user control)上添加工具条(bars)或弹 ...

  2. DevExpress控件学习总结 z

    1.Navigation & Layout 1.1 Bar Manager 如果想在窗体或用户控件(user control)上添加工具条(bars)或弹出菜单(popup menus),我们 ...

  3. DevExpress控件学习总结

    1.Navigation & Layout 1.1 Bar Manager 如果想在窗体或用户控件(user control)上添加工具条(bars)或弹出菜单(popup menus),我们 ...

  4. iOS开发UI篇—UITableview控件使用小结

    iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger ...

  5. dsoframer控件在64系统上使用问题小汇总

    由于工作中需要,我接触了dsoframer控件,我办公电脑是64系统,在使用时,总是报没有注册类错误.我很是奇怪,dsoframer.ocx控件我都注册过的呀.然后在网上查阅了许多相关资料.悲哀的是, ...

  6. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  7. Android Material Design控件学习(三)——使用TextInputLayout实现酷市场登录效果

    前言 前两次,我们学习了 Android Material Design控件学习(一)--TabLayout的用法 Android Material Design控件学习(二)--Navigation ...

  8. 使用dsoframer控件出现"Unable to display the inactive document. Click here to reactivate the document."的问题 .

    使用如下属性设置: axFramerControl.ActivationPolicy = DSOFramer.dsoActivationPolicy.dsoKeepUIActiveOnAppDeact ...

  9. wxPython控件学习之wx.grid.Grid 表格控件

    wxPython控件学习之wx.grid.Grid (包括对GridCellEditor和GridCelRender的扩展,以支持更多的grid cell 样式, 以GridCellColorEdit ...

随机推荐

  1. Linux下which、whereis、locate、find命令的区别

    我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索.这些是从网上找到的资料(参考资料1),因为有时很长时间不会用到,当要用的时候经常弄混了,所以放到这里方便使用. w ...

  2. java获取classpath文件路径空格转变成了转义字符%20的问题

    java获取classpath文件路径空格转变成了转义字符%20的问题 这个问题很纠结,服务器的文件路径带有空格,空格被转化是%20了,悲剧就出现了 下面展示一段代码String path = get ...

  3. 《Linux内核设计与实现》读书笔记(十五)- 进程地址空间(kernel 2.6.32.60)

    进程地址空间也就是每个进程所使用的内存,内核对进程地址空间的管理,也就是对用户态程序的内存管理. 主要内容: 地址空间(mm_struct) 虚拟内存区域(VMA) 地址空间和页表 1. 地址空间(m ...

  4. 互联网上那些excel文件

    互联网上那些excel文件 文/玄魂 目录 互联网上那些excel文件 前言 1.1 查找包含指定值的excel文件 1.2 查找邮箱 1.3 查找身份证号 1.4  查找管理人员联系信息 1.5 获 ...

  5. Kindle 转换器

    一款比较好用的Kindle转换器,支持txt, opf, htm, html, epub 到 mobi 的转换,支持拖放操作,支持批量操作.只需要选中多个待转换的文件,拖放到程序窗口即可. 曾经用过一 ...

  6. nginx location模块--匹配规则

    Location语法语法:location [=|~|~*|^~] /uri/ { … } = --> 开头表示精确匹配 ^~ --> 开头表示uri以某个常规字符串开头,理解为匹配url ...

  7. 1.__tostring()这个方法在类里可以直接输出对象。2.克隆对象的运用

    <?php //__tostring()这个方法在类里的用途 能够直接输出对象 class Ren { public $name; function Run() { echo "跑&q ...

  8. SQL order by的用法

    首先,order by是用来写在where之后,给多个字段来排序的一个DQL查询语句. 其次,order by写法: 1.  select 字段列表/* from 表名 where 条件 order ...

  9. 集合使用copy与mutableCopy的区别

    集合(NSArray,NSSet,NSDictionary等)使用copy与mutableCopy的区别是类似的,下面以NSMutableArray.NSArray 为例子验证如下: NSMutabl ...

  10. [jQuery学习系列二 ]2-JQuery学习二-数组操作

    前言 上一篇内容 已经对于Jquery 有了一些认识, 包括Jquery的选择器和DOM对象, 那么这一篇继续来看下Jquery中很实用的Jquery对于数组的操作. Jquery中对数组的操作大致有 ...