将XML数据存储在Excel文件中的最佳方法是什么?

我正在寻找一种将XML数据存储在Excel文件中的方法。 数据应该完全隐藏给用户,不应该在单元格或注释中,甚至隐藏。 另外,当用户打开然后用Excel保存文件时应该保留这些数据。 我没有find一种方法将单元格映射到外部XML数据。 XML数据应该位于xlsx文件中。

数据将使用C#工具input,而不是Excel本身。

.xlsx文件实际上只是一个压缩存档(zip文件),所以如果您真的想要添加一个隐藏的文件,那么您可以将一个.xml文件添加到存档。 这样,Excel甚至不知道它在那里。

将.xlsx文件重命名为.zip,将其解压缩,添加文件,然后select.zip文件的内容并将其重新归档。 重命名为.xlsx,您将在其中有隐藏的.xml文件。 (注意:不要压缩顶层文件夹,只有内容)

你可以使用像SharpZipLib这样的zip库在C#中完成这个工作: http : //www.sharpdevelop.net/OpenSource/SharpZipLib/

更新:如果用户从Excel中保存文件,则该“隐藏”文件将不会被保留。 我可以为这种情况提出的最好的想法是调用代码作为embedded在工作表中的VBAmacros的一部分。

此链接包含有关操作Office包的各个部分的有用信息: http : //msdn.microsoft.com/zh-cn/library/aa982683.aspx

core.xml和app.xml(位于docProps文件夹中)包含文档属性,可能是存储其他xml信息的好位置。

我有同样的问题,这是我的代码来处理它,使用微软的自定义XML部件 。 (您可以在代码中的评论中find所有必要的解释)。

 //Deletes all the previously added parts and adds a new part //containing the string argument which has to be in XML format. public void addCustomXMLPart(string test) { IEnumerator e = Xlworkbook.CustomXMLParts.GetEnumerator(); e.Reset(); CustomXMLPart p; //The !p.BuiltIn is because before our customXMLPart there are some // Excel BuiltIns of them and if we try to delete them we will get an exception. while (e.MoveNext()) { p = (CustomXMLPart)e.Current; if (p != null && !p.BuiltIn) p.Delete(); } Xlworkbook.CustomXMLParts.Add(test, Type.Missing); } 

关于上面使用的xlworkbook对象:

 using Excel = Microsoft.Office.Interop.Excel; Excel.Workbook XlWorkbook = (Excel.Workbook) (Excel.Application)Marshal.GetActiveObject("Excel.Application")).ActiveWorkbook; 

Excel是用于存储,操作和查看数据的应用程序,因此它不是用来存储任意不可读的数据的。 但是,正如你所暗示的那样,你可以在单独的工作表上使用隐藏的字段来放置一些信息。