假设两种情形:
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