C# [内容类型].xml<;超越>;元素缺失

C# [内容类型].xml<;超越>;元素缺失,c#,.net,C#,.net,我正在尝试创建一个2007+Excel文档(.xlsx),只使用.net 4.0内置类。 因此,我不能使用任何第三方库 实际上,大部分都已经完成了,我现在面临的唯一问题是,我正在创建的包在创建[Content\u Types].xml文件时似乎失败了,我的意思是它缺少所有元素,并且只创建了元素 我很确定问题出在我创建包之间的关系的时候,但我不知道如何使它工作,关于包和ZipPackage类的文档和示例出人意料地少 也许我错过了另一步…有人有任何线索吗?请 这是一个产生完全相同问题的类似代码 pu

我正在尝试创建一个2007+Excel文档(.xlsx),只使用.net 4.0内置类。 因此,我不能使用任何第三方库

实际上,大部分都已经完成了,我现在面临的唯一问题是,我正在创建的包在创建[Content\u Types].xml文件时似乎失败了,我的意思是它缺少所有元素,并且只创建了元素

我很确定问题出在我创建包之间的关系的时候,但我不知道如何使它工作,关于ZipPackage类的文档和示例出人意料地少

也许我错过了另一步…有人有任何线索吗?请

这是一个产生完全相同问题的类似代码

public void CreatePackage()
        {
            string Dir = @"F:\Proyectos\Excel_StackOverflow\WindowsFormsApplication1\WindowsFormsApplication1\Resources";

        Uri File1_abs = new Uri(String.Format(@"{0}\1.xml", Dir), UriKind.Absolute);
                Uri File1_rel = new Uri(@"/OddContent/File1.xml", UriKind.Relative);

                using (ZipPackage exPkg = (ZipPackage)Package.Open(String.Format(@"{0}\Temp.zip", Dir), FileMode.Create))
                {
                    ZipPackagePart File1Part = (ZipPackagePart)exPkg.CreatePart(File1_rel, System.Net.Mime.MediaTypeNames.Text.Xml);
                    using (FileStream fs1 = new FileStream(File1_abs.LocalPath, FileMode.Open, FileAccess.Read))
                    {
                        Form1.CopyStream(fs1, File1Part.GetStream());
                    }
                    exPkg.CreateRelationship(File1_rel, TargetMode.Internal, "SomeType");
                    exPkg.Flush();
                    exPkg.Close();
                    }
            }

        private static void CopyStream(Stream source, Stream target)
        {
            const int bufSize = 0x1000;
            byte[] buf = new byte[bufSize];
            int bytesRead = 0;
            while ((bytesRead = source.Read(buf, 0, bufSize)) > 0)
                target.Write(buf, 0, bytesRead);
        }
它为给定代码生成的[Content\u Types].xml文件是:

<?xml version="1.0" encoding="UTF-8"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
<Default ContentType="text/xml" Extension="xml"/>
</Types>

但实际上,我希望[Content\u Types]是这样的内容。xml文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
<Default ContentType="text/xml" Extension="xml"/>
<Override PartName="...................."/>
</Types>

一旦存在使用默认扩展名存储但内容类型不同的部件,“Override”元素将被放入类型列表中

以下是将为File1Part创建“Override”元素的更新版本:

        Uri File1_rel = new Uri(@"/OddContent/File1.xml", UriKind.Relative);
        Uri File2_rel = new Uri(@"/OddContent/File2.xml", UriKind.Relative);

        using (ZipPackage exPkg = (ZipPackage)Package.Open(String.Format(@"{0}\Temp.zip", Dir), FileMode.Create))
        {
            ZipPackagePart p2 = (ZipPackagePart)exPkg.CreatePart(File2_rel, System.Net.Mime.MediaTypeNames.Text.Xml);
            ZipPackagePart File1Part = (ZipPackagePart)exPkg.CreatePart(File1_rel, "application/vnd.openxmlformats-officedocument.wordprocessingml.documents.main+xml");
注意:我复制了vnd的mime类型。。。从图像上看,它可能有打字错误,请随意修改

创建的[Content\u Types].xml如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
<Default Extension="xml" ContentType="text/xml" />
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" />
<Override PartName="/OddContent/File1.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.documents.main+xml" />
</Types>

谢谢罗曼,你的回答非常好,救了我一天,太好了!