如何在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. Want to write a book? Use word count to stay on track

    http://paloalto.patch.com/groups/maria-murnanes-blog/p/bp--want-to-write-a-book-use-word-count-to-st ...

  2. Java BIO、NIO、AIO 学习

    正在学习<大型网站系统与JAVA中间件实践>,发现对BIO.NIO.AIO的概念很模糊,写一篇博客记录下来.先来说个银行取款的例子: 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO ...

  3. 測试AtomicInteger与普通int值在多线程下的递增操作

    日期: 2014年6月10日 作者: 铁锚 Java针对多线程下的数值安全计数器设计了一些类,这些类叫做原子类,当中一部分例如以下: java.util.concurrent.atomic.Atomi ...

  4. 写一个function,清除字符串前后的空格。(兼容所有浏览器)

    代码: function trim(str) { if (str && typeof str === "string") { return str.replace( ...

  5. ReactNative踩坑日志——函数绑定this

    ES6语法定义的函数没有自动绑定this,所以在函数中使用了 this.xxx 就会报错,因为没有把类实例等this传进函数中. 有两种方法绑定this: 法1:在构造函数中为其他函数绑定this c ...

  6. JavaWeb应用项目部署到云ubuntu

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6383068.html 在前面的博文中,我们已经在云主机ubuntu上搭建好jdk.tomcat以及mysql了 ...

  7. RabbitMQ学习笔记2-理解消息通信

    消息包含两部分:1.有效载荷(payload) - 你想要传输的数据.2.标签(lable) - 描述有效载荷的相关信息,包含具体的交换器.消息的接受兴趣方等. rabbitmq的基础流程如下: Ra ...

  8. 找出以“b”开头的名字

    找出以“b”开头的名字:select * from pet where name like 'b%' “_”:匹配任何单个字符“%”:匹配任意数目字符(包括零字符)

  9. libvlc_new 调用产生段错误

    在调试程序的时候,碰到一个奇怪的段错误问题.只要链接的时候使用-Wl,-rpath=./vlc/lib就会产生段错误,如果链接的时候使用的是-Wl,-rpath=../../tool/vlc/lib则 ...

  10. Linux的telent服务

    目前,在Win/Linux下telnet都很少用了,只是因为数据在传输的过程,未加密!不过在Linux下还是多用于端口探测,今天就来回顾曾经的telnet 1.介绍 Linux被广泛运用到各种服务器及 ...