如何在open xml excel 中存储自定义xml数据?

而且不能放在隐藏的cell单元格内,也不能放在隐藏的sheet内,要类似web网站的Application变量,但还不能是VBA和宏之类的,要对用户不可见,但是对开发者可见。

曾经试过两个方法:

1.在styles.xml或sheet1.xml中的Extension (extLst/ext)节点下添加自定义节点,用来存储自己的数据。

具体xml节点如下:

<extLst>

<ext uri="{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main">

<x14:slicerStyles defaultSlicerStyle="SlicerStyleLight1"/>

</ext>

</extLst>

Worksheet的xml里可以有extLst,stylesheet的xml里也可以有extLst,但Worksheet里的不知道怎么用,常见的是在stylesheet里.

虽然Extension (extLst/ext)节点貌似是供扩展数据使用的,但是当使用excel打开此文件并保存时,此自定义节点因为不是excel内置的内容就被清掉了,不能达到目的。

这个地方始终没搞太明白它究竟能做什么?不能做什么?如果哪位兄弟知道,还盼给讲解一下,下面是msdn上相关的链接:

ExtensionList Class

Defines the ExtensionList Class.When the object is serialized out as xml, its qualified name is x:extLst.

http://msdn.microsoft.com/en-us/library/office/documentformat.openxml.spreadsheet.extensionlist(v=office.14).aspx

Extension Class

Extension. When the object is serialized out as xml, its qualified name is x:ext.

http://msdn.microsoft.com/en-us/library/office/documentformat.openxml.spreadsheet.extension.aspx

2.使用customed defined xml。

从Open Xml架构图入手,发现Custom Defined XML或许可用,如下图:

从msdn的文章 (Custom XML Parts Overview http://msdn.microsoft.com/en-us/library/vstudio/bb608618(v=vs.100).aspx) 中摘到:

"You can embed XML data in documents for some Microsoft Office applications. When you embed XML data in a document, the data is named a custom XML part.

You can create and modify custom XML parts in a document by using an application-level or document-level solution in Visual Studio. You do not need to start the Microsoft Office application to create and modify custom XML parts."

可见,我们是可以把任意内容的xml文件,塞到open xml excel中去,作为一个应用程序级别变量使用,类似web站点的Application变量。

第一步:创建下面这个xml文件或内存,里面只有一个ShowAlert变量:

<?xml version='1.0' encoding='UTF-8' ?>

<Root>

<Extension1 ShowAlert='false' />

</Root>

第二步:将它load进入open xml excel中。

第三步:在自己的代码中查找已经解析并加载进来的xml内容,找到ShowAlert变量,这就达到目的了。

如果之后另存为excel文件,则open xml的目录结构如下,多了customXml目录,该目录里的item1.xml存放的就是刚才的xml内容。

这里没有贴上第二步,第三步的代码,以后再补吧!

推荐资料:

Standard ECMA-376 Office Open XML File Formatsedition (December 2006), 2nd edition (December 2008), 3rd edition (June 2011) and 4th edition (December 2012)

http://www.ecma-international.org/publications/standards/Ecma-376.htm

OFFICE OPEN XML OVERVIEW

http://www.ecma-international.org/news/TC45_current_work/OpenXML%20White%20Paper.pdf

Introducing the Office (2007) Open XML File Formats

http://msdn.microsoft.com/en-us/library/aa338205.aspx

Office Open XML, ECMA-376, and ISO/IEC 29500

http://msdn.microsoft.com/en-us/library/office/gg607163(v=office.14).aspx

What is the best way to store XML data in an Excel file
http://stackoverflow.com/questions/4443026/what-is-the-best-way-to-store-xml-data-in-an-excel-file

如何在open xml excel 中存储自定义xml数据?的更多相关文章

  1. 在配置文件(.settings、.config)中存储自定义对象

    原文:在配置文件(.settings..config)中存储自定义对象 引言 我前面曾写过一篇<使用配置文件(.settings..config)存储应用程序配置>,我在其中指出“sett ...

  2. excel中存储的icount,赋值完之后

    最近需要实现一个功能,为了确保每次函数运行的时候count是唯一的,所以想读取excel中存储的icount,赋值完之后对其进行+1操作,并存入excel文件,确保下次读取的count是新的,没有出现 ...

  3. C#程序中:如何修改xml文件中的节点(数据)

    要想在web等程序中实现动态的数据内容给新(如网页中的Flash),不会更新xml文件中的节点(数据)是远远不够的,今天在这里说一个简单的xml文件的更新,方法比较基础,很适合初学者看的,保证一看就懂 ...

  4. Excel中的一列数据变成文本的一行数据

    Excel中的一列数据变成文本的一行数据 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/

  5. java通过poi读取excel中的日期类型数据或自定义类型日期

    Java 读取Excel表格日期类型数据的时候,读出来的是这样的  12-十月-2019,而Excel中输入的是 2019/10/12 或 2019-10-12 poi处理excel时,当excel没 ...

  6. Winform中对自定义xml配置文件进行Xml节点的添加与删除

    场景 Winform中自定义xml配置文件后对节点进行读取与写入: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10053213 ...

  7. 如何利用excel中的数据源制作数据地图

    关于这个问题,制作数据地图的方法已不新奇,总体来说有这么几类方案: 一类方案:直接在excel里制作 优势:个人小数据量应用较为方便简单 缺点:需要熟悉VBA,且更强大的功能对VBA水平要求较高 1. ...

  8. C#程序中:如何向xml文件中插入节点(数据)

    向xml文件中动态的添加节点(数据)是一件很爽的事,可以给你的程序带来很多的方便,比如在web中,如果你的Flash用到了xml文件,这个方法可以让你在后台就轻轻松松的更新你的Flash内容哦!一起研 ...

  9. struts.xml文件中配置tiles.xml

    Apache Tiles是一个JavaEE应用的页面布局框架.Tiles框架提供了一种模板机制,可以为某一类页面定义一个通用的模板,该模板定义了页面的整体布局.布局由可以复用的多个块组成,每个页面可以 ...

随机推荐

  1. uni-app - 上传图片组件

    2018-12-29 更新1.0  2019-01-08 更新1.1 2019-01-29 更新1.3   重大更新 插件地址: http://ext.dcloud.net.cn/plugin?id= ...

  2. Hotmail Smtp邮箱发送的端口

    1.最近有项目需求做监控报警. 2.使用Smtp发邮件时,网上找了一大堆,Smtp服务是:smtp.live.com   端口是:25或587,试了好多次都不行.原来端口是465. 3.发送时,我启用 ...

  3. JEECG中的validform验证ajaxurl的使用方法

    validform验证是一种非常方便的,实用的验证方式 对于需要验证后台数据的,validform是一个非常明智的选择 validform的ajaxurl属性能够完美的实现:当输入完成某一输入框,就会 ...

  4. 在hadoop上运行java文件

    hadoop 2.x版本 编译:javac -d . -classpath /usr/lib/hadoop/hadoop-common-2.2.0.2.0.6.0-102.jar TestGetPat ...

  5. sell 项目 订单详情表 设计 及 创建

    1.数据库设计 2.订单详情表 创建 /** * 订单详情表 */ create table `order_detail` ( `detail_id` varchar(32) not null, `o ...

  6. java.lang.AbstractStringBuilder.enlargeBuffer

    04-18 10:22:08.585 3653-3653/com.tongyan.lanzhou.rv I/dalvikvm: "main" prio=5 tid=1 RUNNAB ...

  7. C#/Asp.Net 获取各种Url的方法

    比如有:http://localhost:60527/WebSite1test/Default2.aspx?QueryString1=1&QueryString2=2 Response.Wri ...

  8. Java关闭Socket来终止线程

    Java代码: package Threads; import java.io.BufferedReader; import java.io.IOException; import java.io.I ...

  9. String类原理分析及部分方法

    //String类原理分析及部分方法 //http://www.cnblogs.com/vamei/archive/2013/04/08/3000914.html //http://www.cnblo ...

  10. 设置mysql group_concat长度

    #在MySQL配置文件(my.ini)中默认无该配置项,使用默认值时,值为1024,可在客户端执行下列语句修改: #SET GLOBAL group_concat_max_len = 1024; #该 ...