VSTO 服务器缓存文档

摘要

<script type="text/javascript">loadTOCNode(1, 'summary');</script>
听说也许 youÆve 过的 VisualStudioToolsforOffice 用于 Office 系统 2005 (VSTO)。 事实上, IÆd Venture 推测, 某些人可能有与其 toyed 或甚至启动严重开发基于工具套件。 对于那些人 havenÆt, VisualStudioToolsforOffice Office System 2005 允许开发人员利用 MicrosoftOffice 威力企业级应用程序中用户。
 
当前, VSTO 工具套件支持 MicrosoftExcel、 Word、 InfoPath 和 Outlook。 这些应用程序可能生成使用 C# 或 VisualBasic.NET (Visual Basic)。 大多数的目标窗口表单开发和粗客户开发, 时重要条侧重于服务器端开发。
 

回到顶端

测试到 VSTO MicrosoftOffice 自动化

<script type="text/javascript">loadTOCNode(1, 'summary');</script>
不需要在服务器上启动 MicrosoftOffice 的实例可操纵 VSTO - 基于应用程序。 本文说明的 Office 实例通过开发的应用程序处理服务器上文档不需要用于文档自动化。 我们再创建其他应用程序, 可访问和修改数据。 最后, 我们编写三段 - 监视进程只监视服务器对于 MicrosoftOffice 的一个实例。 如果实例检测, 我们监视进程将通知我们。
 
下面是对于监视过程代码。
 
usingSystem;
使用 System.Runtime.InteropServices;
 
空间 WatchDog
{
    classProgram
    {
        主 staticvoid (字符串 [ 参数)
        {
            对象 automator = null;
            虽然 () automator = = null
            {
                尝试
                {
                    automator = Marshal.GetActiveObject("Word.Application");
                    Console.WriteLine("An instance of Office is running.");
                    Console.Read();
                    Marshal.ReleaseComObject(automator);
                }
                catch (System.Runtime.InteropServices.COMException)
                {
                    Word //Microsoft 未运行
                    Console.WriteLine("Watching...");
                }
            }
        }
    }
}
列表 1 - 0 监视程序进程代码 列表 1 - 0 监视程序进程代码
 
监视应用程序概念上简单。 A 驱动器进程循环时。 过程每次迭代, 代码搜索的 MicrosoftWord 实例。 如果没有实例存在, 应用程序打印相应消息并继续监视。 要测试监视器, 编译并引发应用程序。 运行应用程序, 时 MicrosoftWord 打开并且应通知实例正在运行。 它一定必须避免在服务器上创建的 MicrosoftWord 实例记住, 用于 MicrosoftOffice 自动化应用程序来调整好。
 
下面是代码来创建和存放基于 VSTO 数据。 创建新 VSTO 基于项目并输入以下代码。
 
usingSystem;
使用 System.Data;
使用 System.Drawing;
使用 System.Windows.Forms;
使用 Microsoft.VisualStudio.tools.applications.Runtime;
使用 Word = Microsoft.Office.Interop.Word;
使用 Office = Microsoft.Office.core;
 
空间 WordDocument1
{
    公用局部类 ThisDocument
    {
        缓存 [ ]
        公用 DataSet 数据 ;
        专用 void ThisDocument_Startup (object sender, ByValeAsSystem.EventArgs e)
        {
            数据 = 新 DataSet();
            data.ReadXml("sampledata.xml");
        }
 
        专用 void ThisDocument_Shutdown (object sender, ByValeAsSystem.EventArgs e)
        {
        }
    }
}
列表 1 - 1 应用数据 清单 1 - 1 应用程序数据
 
此应用程序设置必要管道允许 VSTO - 基于应用程序内存储数据。 首行的代码声明公用数据集具有缓存属性。 缓存属性通知 VSTO 以便它是外部应用访问数据集中包含数据应该存储以特殊方式中。
 
将某些任意数据, sampledata.xml, 接着, 代码加载到数据集。 在现实世界, 此应用程序将通常从数据存储读取并对数据应用某种类型的业务逻辑。 这使我们跳业务逻辑段实际 isnÆt。
 
我们最后一部分代码只尝试访问数据。 下面是代码。
 
公用 void ManipulateData()
{
            DataSet newDataSet;
            //point 到调试器目录中 doc 文件
            字符串 fileName = ôC:/WordDocument1/bin/debug/WordDocument1.docö;
            如果 (ServerDocument.IsCacheEnabled(fileName))
            {
                ServerDocument servDoc = null;
                尝试
                {
                    servDoc = newServerDocument(fileName);
                    newDataSet = 新 System.Data.DataSet();
 
                    //grab 命名空间和类包含缓存数据
                    CachedDataHostItem hostI = servDoc.CachedData.HostItems["WordDocument1.ThisDocument ] ";
 
                    CachedDataItem dataI ]; = hostI.CachedData[0
                    / / 加载数据
                    如果 () & 空 = dataI.xml 空 = dataI.Schema ! !
                    {
                        System.IO.StringReader xmlReader = 新 System.IO.StringReader(dataI.xml);
                        System.IO.StringReader schemaReader = 新 System.IO.StringReader(dataI.Schema);
                    
                        newDataSet.ReadXmlSchema(schemaReader);
                        newDataSet.ReadXml(xmlReader);
                        
If(newDataSet != null && newDataSet.tables != null && newDataSet.tables.Count > 0)
{
            / / 通过添加某些任意信息修改数据
            foreach (DataRow 中行 newDataSet.tables[0].rows)
            {
                 行 [ 0 ] = ômy 转 hereö ; 新值
            }
  }
 
                        dataI.SerializeDataInstance(newDataSet);
                        servDoc.Save();
                    }
                }
                最后
                {
                    如果 () servDoc = null !
                        servDoc.Close();
                }
            }
}
列表 1 - 2 应用程序来处理数据 清单 1 - 2 应用程序来处理数据
 
难遵循该代码 isnÆt。 首先, 代码测试, 看 VSTO 基于应用包含数据缓存。 数据缓存是新容器, 就能够访问和操作数据 VSTO - 基于应用程序内。 如果文档支持 VSTO 数据缓存, ServerDocument 的实例创建类。 这是一个特殊类别, 就能够操作实际数据应用程序内。
 
请注意代码如何使用特殊命名语法 ôWordDocument1.ThisDocumentö 来访问数据 这是因为不再 worddocument1.doc 文件中存储 VSTO - 基于 Microsoft 单词文档中显示数据。 它现在存储在特殊容器访问到此处提到语法使用 serverdocument 类。
一旦获得对数据访问, 代码可只读入数据集数据并处理它。 最后, serverdocument classÆ 保存方法用于写回应用程序存储在数据集中更改数据。
 
向上因此 letÆs 引发它。 运行应用监视器首先要开始监视对于 MicrosoftOffice 的一个实例。 1 - 1 列表中然后运行代码以便可加载数据。 最后, 激发向上代码以便可操作数据列表 1 - 2 中。
 
运行测试装置后您会发现没有从监视进程通知过程执行成功。 测试装置演示 MicrosoftOffice, 不需要操作 VSTO - 基于服务器上应用程序中包含数据。
 
新 VSTO 设计是此改进实际上理由。 现在 VSTO 从演示文稿分隔内容。 此 divorced 结构允许调用代码以 VSTO - 基于应用程序不需要启动实例对 MicrosoftOffice 或 MicrosoftExcel 内包含服务数据。 因为 Office 的实例是避免过程自动化, 然后附带 Office 自动化伸缩性问题消失完全。
 
呈现代码演示 divorced 结构实际工作并且是可伸缩 û 虽然 havenÆt 测试伸缩性索赔我们。 但是, 有几个缺点到此银色项目符号。 必须为 Office 系统 2005 使用 VisualStudioToolsforOffice 因为它需要支持数据缓存创建数据。 原因是相当 shortcoming 一定意味着如果打算利用缓存数据, 您必须迁移应用程序到解决方案 VSTO 首先。 还, Datacaching 仅支持 MicrosoftWord 和 MicrosoftExcel 中。 没有 datacaching Infopath Microsoft 或 Microsoft Outlook 中不支持。
 
另一个缺点是 VSTO 工具套件是不可用。 与基于 COM 是基本上免费, 常规 Office 开发相比零现金成本可上去多余投资。 仍然, 如果有要求对高度可伸缩的一种 Office 自动化软件, VSTO 似乎像好替代。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值