C# 在Excel文件中存储XML数据的最佳方式是什么

C# 在Excel文件中存储XML数据的最佳方式是什么,c#,xml,excel,openxml,C#,Xml,Excel,Openxml,我正在寻找一种将XML数据存储在Excel文件中的方法。 数据应该对用户完全隐藏,它不应该在单元格或注释中,甚至是隐藏的。 此外,当用户打开并使用Excel保存文件时,应保留数据。 我不是在寻找一种将单元格映射到外部XML数据的方法。XML数据应该在xlsx文件中 数据将使用C工具输入,而不是Excel本身。Excel是一个用于存储、操作和查看数据的应用程序,因此,它不是用来存储任意不可读数据的。但是,正如您所提到的,您可以在单独的工作表上使用隐藏字段来放置一些信息。该.xlsx文件实际上只是一

我正在寻找一种将XML数据存储在Excel文件中的方法。 数据应该对用户完全隐藏,它不应该在单元格或注释中,甚至是隐藏的。 此外,当用户打开并使用Excel保存文件时,应保留数据。 我不是在寻找一种将单元格映射到外部XML数据的方法。XML数据应该在xlsx文件中


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

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

该.xlsx文件实际上只是一个压缩存档zip文件,因此如果您确实想添加隐藏文件,那么您可以只向存档添加一个.xml文件。这样Excel甚至不知道它在那里

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

您可以在C中使用类似SharpZipLib的zip库来实现这一点:

更新:如果用户从Excel中保存文件,则不会保留此隐藏文件。对于该场景,我能想到的最好办法是将代码作为嵌入在工作表中的VBA宏的一部分调用

此链接包含有关操作Office软件包各部分的有用信息:


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

我也遇到过同样的问题,下面是我的代码,使用。您可以在我在代码中的注释中找到所有必要的解释

//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;

我应该使用嵌入式OLE对象吗?或者自定义部分?在文件中存储此xml的目的是什么?这会在另存为后保留xml数据吗。。。来自用户?它将无法保存或另存为。谢谢你注意到这一点。我对问题的这一部分读得不够透彻。正确,它将无法在Excel.SaveAs中保存。但是,Word允许自定义零件。Excel中是否有相应的工具?也许是一种特殊的关系类型?请参阅进一步查看.xlsx文件的内容,其中似乎有一些清单文件。_rels和Content_Types.xml文件显示为存储归档中包含的文件列表及其内容类型。可以在这些文件中添加行,以指示保存文件时应保留custom.xml文件。找到答案:关系类型必须为customXml。然后Excel保存xml数据。