VSTO学习之路:使用CustomXMLPart存储数据

假设两种情形:

1、当有一些数据要使用,但不想让用户直接看到,常规的方式是放在一个表里,然后隐藏

2、当数据来自服务器、远端服务器,但文档要带到一个离线环境使用

此时可以考虑在工作簿中创建一个CustomXMLPart,要创建它非常简单,可以使用CustomXMLParts接口的Add方法创建CustomXMLPart,CustomXMLPart接口和CustomXMLParts接口定义在 using Microsoft.Office.Core; 命名空间下,其中CustomXMLPart的定义如下:

 1 public interface _CustomXMLParts : _IMsoDispObj, IEnumerable
 2 {
 3          dynamic Application { get; }
 4          int Count { get; }
 5          int Creator { get; }
 6          dynamic Parent { get; }
 7          CustomXMLPart this[object Index] { get; }
 8          CustomXMLPart Add(string XML = "", object SchemaCollection = Type.Missing);
 9          IEnumerator GetEnumerator();
10          CustomXMLPart SelectByID(string Id);
11          CustomXMLParts SelectByNamespace(string NamespaceURI);
12 }

Add方法的一个重要参数是接收一个XML文本。

演示在文档级项目中创建CustomXMLPart

1、创建一个文档项目,Sheet1中有一个存放员工三险一金数据的表,准备将表格中的内容转换成XML存储在工作簿中。

2、在项目中需要的地方调用下面的方法

 1 private void AddCustomXMLPart()
 2         {
 3             //将工作表区域数据转换为一个XML文本
 4             XElement xml = new XElement("Social",
 5                              from Excel.Range row in Globals.Sheet1.UsedRange.Rows
 6                              where row.Row != 1
 7                              select new XElement("Person",
 8                                     new XElement("姓名", GetValue(row.Cells[1])),
 9                                     new XElement("养老保险", GetValue(row.Cells[2])),
10                                     new XElement("医疗保险", GetValue(row.Cells[3])),
11                                     new XElement("失业保险", GetValue(row.Cells[4])),
12                                     new XElement("公积金", GetValue(row.Cells[5]))
13                                     ));
14             //CustomXMLParts的Add方法在工作簿实便中的具体实现
15             CustomXMLPart part = Globals.ThisWorkbook.CustomXMLParts.Add();
16             //重载方法,接收一个XML文本
17             //CustomXMLPart part = Globals.ThisWorkbook.CustomXMLParts.Add(xml.ToString());
18             //将XML文本传入CustomXMLPart的LoadXML方法
19             part.LoadXML(xml.ToString());
20         }
21         //取得Cells[i]的值并转为字符串
22 private string GetValue(Excel.Range rng)
23         {
24             object o = rng.Value;
25             return o.ToString();
26         }

3、效果:

用压缩工具打开工作簿,会多出一个customXML文件夹:

打开其中一个xml文件,可以看到内容已经以xml文本形式保存在了工作簿中:

实际中,要保存到工作簿的CustomXMLPart中的数据,可能来源自数据库,或者直接来自其他地方的XML文本。

时间: 2024-10-18 15:30:28

VSTO学习之路:使用CustomXMLPart存储数据的相关文章

VSTO学习之路:使用Open XML SDK for Office解析Excel数据

Excel2007以后,工作簿是以XML文本保存数据的,用压缩工具打开工作簿文件,结构大致如下: 文件夹下基本全部是xml文本文件.微软提供了Open XML SDK 2.5 for Office,其中定义了和这些xml文件相关的类,帮助我们使用xml的形式解析工作簿里的数据和内容.跳转到微软官方资料          跳转到Open XML SDK 2.5 for Microsoft Office下载连接 在安装了 Open XML SDK 2.5 之后,在项目或应用程序中,添加对以下组件的引

Qt学习之路(54): 自定义拖放数据对象

前面的例子都是使用的系统提供的拖放对象 QMimeData 进行拖放数据的存储,比如使用 QMimeData::setText() 创建文本,使用 QMimeData::urls() 创建 URL 对象.但是,如果你希望使用一些自定义的对象作为拖放数据,比如自定义类等等,单纯使用 QMimeData 可能就没有那么容易了.为了实现这种操作,我们可以从下面三种实现方式中选择一个: 将自定义数据作为 QByteArray 对象,使用 QMimeData::setData() 函数作为二进制数据存储到

Oracle学习之路-SQL篇-预备数据

开始转向Oracle了,记录一下自己的学习历程 先创建一些表吧: ---------------//////创建学生表 create table student(   sno varchar2(10) primary key,   sname varchar2(20),   sage number(2),   ssex varchar2(5) ); -------------/////////创建教师表 create table teacher( tno varchar2(10) primary

数据库学习笔记:第九章 存储数据:磁盘和文件

第九章 数据以磁盘块为单位存储在磁盘上.块分布于一张或多张盘片的同心环形磁道上.磁道可以在盘片的单面或双面上录制. 同一直径的所有磁道的集合称为柱面. 磁盘块的大小在磁盘初始化时可以被设置成扇区大小的倍数. 每一个记录的表面都有一个磁盘头阵列.读写一块时,磁头必须定位在块头位置. 不能并行读写的主要原因是很难保证所有磁头被精确定位在相应的磁道上. 磁盘控制器是磁盘驱动器与计算机的接口. 当数据被写到扇区时,需要计算校验和并存储在扇区上,当扇区上的数据被独处时,需要再次校验和. 寻道时间是用于移动

.Net程序员安卓学习之路3:Post数据给网络API

本例我们实现一次真正的网络交互,将数据POST到API,然后接收服务器的返回值进行处理,同时引入自定义类型和传说中阿里的FastJson. 实现思路如: 1. 在API端接收客户POST的数据还原成对象,给每个属性加个后缀后输出: 2. 在客户端输入用户名和密码,用来和服务器端返回的进行对比: 我们POST给服务器的是name=mady&pwd=123,服务器分别加了后缀为name=madya &pwd=1231所以我们客户端需要输入madya和1231才能验证成功. 具体操作展示如下:

VSTO学习之路:学习使用Epplus(1)

关于读取其它工作簿数据的几个方式的比较: 1.VBA的GetObject方法,会调用Excel程序打开工作簿(虽然不可见,但确实是打开的) 2.SQL,使用繁琐缺少灵活,不支持单元格样式的操作,也似乎不支持delete语句删除源数据. 3.使用Open XML SDK,基于Open XML,不依赖于Excel程序,但步骤繁琐. 4.Epplus,基于OpenXML,简单灵活,不依赖Excel程序打开工作簿,处理数据的速度快. 下载:Epplus,引用Epplus,然后  using Office

VSTO学习之路:ListObject控件的复杂数据绑定初步

先做两个准备:一个实体类 +  一个集合            目标:把集合绑定到宿主控件(主要演示编程方式做绑定). public class Person { public string Name { get; set; } public int Age { get; set; } public char Gender { get; set; } } 1 public List<Person> PersonList() 2 { 3 List<Person> persons =

Qt 学习之路 :可视化显示数据库数据

前面我们用了两个章节介绍了 Qt 提供的两种操作数据库的方法.显然,使用QSqlQuery的方式更灵活,功能更强大,而使用QSqlTableModel则更简单,更方便与 model/view 结合使用(数据库应用很大一部分就是以表格形式显示出来,这正是 model/view 的强项).本章我们简单介绍使用QSqlTableModel显示数据的方法.当然,我们也可以选择使用QSqlQuery获取数据,然后交给 view 显示,而这需要自己给 model 提供数据.鉴于我们前面已经详细介绍过如何使用

VSTO学习之路:学习使用Epplus——读写VBA代码

创建xlsm工作簿: 宏工作簿,必须有VBProject对象,至少要有一个工作表 1 string path = @"E:\studyvs\open xml\test.xlsm"; 2 var package = new ExcelPackage(); 3 package.Workbook.Worksheets.Add("Sheet1"); 4 //创建工程对象 5 package.Workbook.CreateVBAProject(); 6 //保存工作簿 7 p