科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件用C++和XML建立Office智能文档之四

用C++和XML建立Office智能文档之四

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Office使用一个XML文件描述你的智能文档解决方案,它包含了更新和配置该解决方案的目录。

作者:陶刚编译 来源:天极网 2007年10月19日

关键字: C++ XML Office 智能文档

  • 评论
  • 分享微博
  • 分享邮件
Office使用一个XML文件(叫作XML扩展包列表文件)描述你的智能文档解决方案,它包含了更新和配置该解决方案的目录。典型情况下这个文件叫作manifest.xml。我在示例代码中添加了一个框架manifest.xml(图10所示),并用红色高亮度显示了你应该修改的东西。

  · 解决方案的ID。你应该使用GuidGen为智能文档解决方案生成一个唯一的GUID。这是强制性的,所有的解决方案都需要有一个唯一的ID,并且虽然没有严格的限制为GUID,但是这是确保唯一性的最好的方法。

  · updateFrequency,它是Office应该多久(按分钟记)检查服务器的清单更新一次。更新都是由XML扩展包清单中指定的每个文件的版本标志控制的。如果版本不同,并且更新事件超期了,Office将把对应的新版本的文件从服务器下载到本地计算机上。

  · 智能文档操作DLL的文件路径。这可以是URL或网络路径(如果DLL布署在网络上)或与清单文件位置关联的路径或文件名称。

  · 智能文档操作DLL的CLSID。因为它实现了IsmartDocument COM接口,它就拥有一个Office用于载入它的COM CLSID。你可以在生成的用于实现ISmartDocument接口的ATL类的头文件中找到它。它是coclass(例子中的CScheduleSmartDoc)的uuid属性。

  图10. XML清单文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<manifest xmlns="http://schemas.microsoft.com/office/xmlexpansionpacks/2003">
<version>1.1</version>
<updateFrequency>20160</updateFrequency>
<uri>ScheduleSmartDocument</uri>
<solution>
<solutionID>{15960625-1612-46AB-877C-BBCB59503FCE}</solutionID>
<type>smartDocument</type>
<alias lcid="*">Simple Schedule Smart Document</alias>
<targetApplication>Excel.Application.11</targetApplication>
<file>
<type>solutionActionHandler</type>
<version>1.0</version>
<filePath>ScheduleSmartDocument.dll</filePath>
<CLSID>{0A9D54DE-12F8-4711-AF10-7D4ACA1D1924}</CLSID>
<regsvr32/>
</file>
<file>
<type>Other</type>
<version>1.0</version>
<filePath>ScheduleGraphic.GIF</filePath>
</file>
</solution>
<solution>
<solutionID>{443E624C-AE85-4b20-8522-1CFD5B4E7CBC}</solutionID>
<alias>Schedule Smart Document XSL Transform</alias>
<type>Transform</type>
<context>http://schemas.microsoft.com/office/word/2003/wordml
</context>
<file>
<type>primaryTransform</type>
<version>1.0</version>
<filePath>ScheduleReport.xsl</filePath>
</file>
</solution>
</manifest>

  如果你还需要随着解决方案安装一些附加的文件(例如GIF或包含附加文本的HTML文件),你可以把它们列举在<solution>元素的下面,使用<file>元素分隔开。我只有出现在事务面板中的一张附加的GIF。

  另一件阻碍了我几个小时的事情是清单中的<uri>元素的名称必须与你用于映射文档元素的XML大纲的名称相同。在例子中是ScheduleSmartDocument。

  一旦你的智能文档与XML大纲一起标识了,你就能附加一个XML扩展包,把操作处理程序DLL与该文档关联。在Excel中,通过Data | XML | XML Expansion Packs打开对话框。你使用这个对话框先添加少量的扩展包(执行解决方案的manifest.xml文件),接着给文档附加一个扩展包。这个过程与用XML标记文档相似,只有智能文档开发者需要这样做——用户不需要这个对话框。换句话说,你使用Add-Ins 对话框(Tools | Templates and Add-Ins)的“XML扩展包”选项卡给文档附加了一个扩展包。

  当用户打开拥有关联扩展包的文档的时候,Office将自动安装或更新他们的本地计算机上的扩展包文件。典型情况下扩展包安装在C:\Documents and Settings\All Users\Application Data\Microsoft\Schemas目录中,但是在未来的Office版本中可能改变这种情况。如果用户没有系统管理员权限,扩展包就安装在相应的每个用户的应用程序数据目录中(例如C:\Documents and Settings\Mike\Local Settings\Application Data\Microsoft\Schemas)。该XML扩展包中的用<runFromServer>true</runFromServer>标记的文件不会被下载并安装在用户的计算机上,而是每次使用时从服务器位置上直接打开。

  如果你已经在本地计算机上开发了一个解决方案,你会发现在把它复制到布署服务器之后,Office仍然在你的开发计算机上使用的路径中查找清单文件。我也碰到了这个问题,最后发现Office把解决方案的路径加密存储在称为Solution URL的自定义文档属性中了。你把这个文件布署到服务器之后,需要把这个属性改变为服务器路径或使用“XML扩展包”对话框从布署服务器上附加该扩展包(这样将重新设置该属性的值)。接着你可以把拥有解决方案文件的服务器路径Excel工作薄保存回服务器。

  为了作为用户测试这种情形,你应该关闭工作薄,选择Data | XML | XML Expansion Packs(Word中在Tools | Templates and Add-Ins下面),并从本地计算机上删除ScheduleSmartDocument扩展包文件。这使得你的开发计算机看起来像一台正常的用户计算机,即不知道扩展包的任何信息。下一步,从服务器上打开电子表格。这时候会出现一个对话框,询问你是否希望下载XML扩展包,你应该点击“是”。Office将下载扩展包清单中列举的文件并把它们安装在本地计算机上。

  XML扩展包的特性比我们的简单的解决方案需要的特性多一些。实际上它们可以用于从服务器到客户端分发任何类型的文件,甚至于可以被链接成“清单集合”,这会引起Word或Excel引用几个链接的清单,就好像它们是一个大的清单一样。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章