OBA实战心得.docVIP

  • 6
  • 0
  • 约3.22千字
  • 约 4页
  • 2018-04-17 发布于河南
  • 举报
OBA实战心得

 HYPERLINK /zhaojunqi/archive/2008/09/10/1288557.html OBA实战心得(VSTO + Word 2007 + WSS) ? 实战OBA VSTO+WSS 最近帮朋友忙,用Visual Studio Tools for Office 3.0 + Word2007 + Windows Sharepoint Service实现了一个B/S的Office应用,觉得有必要跟大家分享一下心得。呵呵。 先讲一下需求: 需求是这样的,客户想要构建一个基于Word的信息管理系统。 具体要求如下: 1.?????????????????????1.????????能把Word文档里的指定内容保存到数据库中 2.?????????????????????2.???????能随时调取这些保存在数据库中的内容到Word中而编辑成为一份新的文档。 3.???????????????????? 3.????? ??希望Word文档带有版本管理的功能。 分析: ?????需求其实很简单,但做起来就有很多的问题了。笔者遇到的问题如下: 1.??????????????????????Word文档是非结构化的,而数据库是结构化的,如何映射? 2.??????????????????????Word文档内容的种类是多种多样的,包括图片,Word公式,各种图标,线段等等,如何保存?同时又如何保证上述各种类型的数据保存到数据库中是可“反序列化”的,就是说再从数据库中读出来,放到Word中,还和原来的内容一样(公式还是公式,还可以对公式进行编辑)? 3.??????????????????????版本管理可以使用MOSS或WSS,但如何与VSTO结合 ?????上述这些问题都比较棘手,笔者曾经想过几种方案: 1.??????????????????????使用OpenXML + Content Control。因为OpenXML是结构化的,并且Content Control可以绑定到自定义的数据。但这种方案又很快被否定了,因为OpenXML的操作不具交互性,不能在打开Word文档的同时进行数据操作。 2.????????????????????? 使用VSTO + Content Control。VSTO可以方便的对Word进行无缝扩展,方便地操作Word文档。也可以用Content Control进行数据绑定。 ?????大体方案定了之后,就开始对每一个技术难点进行攻关,找到解决方案: ?????1.?????? 如何把非结构化的文档内容保存到结构化的数据库中。 ?????a.?????? 其实这个问题就是如何对Word文档内容进行结构化的划分,使指定的内容可以映射到数据库的一条记录。最好的方式当然是使用Content Control。因为它可以包括任何的Word内容,而且也可以嵌套,当然是天然的结构化“利器”。并且只要管理好Content Control的命名,即可保存多种内容到数据库中。 ?????2.?????? 如何把各种类型的内容“序列化”到数据库中但又能“反序列化”到Word中。 这个问题就比较棘手了,要研究Word的内容格式。大家都知道Word采用的是RTF的复文档格式。但如何把RTF格式的内容“序列化”呢?在没有深入研究之前,笔者第一个想法是使用流保存到数据库的二进制字段中。 但事情没那么简单,在笔者研究如何把RTF格式内容转换成流的过程中,发现另一个问题。 如何得到RTF格式的内容 这个问题看起来很简单,有人想,用鼠标选中不就行了吗?其实不然,大家可以去试试,在Word中输入一段文字,再画一条线,或者一个矩形,然后选中试试。这两种内容是不能被同时选中的。 有人又说,用VSTO中的Word Object Model的Range或者Selection对象选中也可以,笔者虽然没尝试,但觉得也跟用鼠标的情况类似。 为此,笔者想到了一个办法,就是使用Content Control。在尝试中,笔者发现Content Control是可以包含任何Word内容的,不管是文字,图片,图形,公式等,都可以包含进来。不过对于刚才提到的线段和矩形,就不能“复制”到Content Control中,但可以拖动到Content Control中,这样Content Control也能自动包含它们。下面是一个图示: 上图中带箭头的线就是我手动拖到Content Control中去的。 RTF内容是包含到Content Control中了,但是如何得到呢,如何“原封不动”地转换成流,这个问题困扰了笔者一段时间。 经过研究,笔者发现了一条“捷径”,可以绕过很多这些麻烦的问题。就是使用“剪贴板”。剪贴板是Windows的基础

文档评论(0)

1亿VIP精品文档

相关文档