Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OpenXML for Excel-文档必须仅包含一个根元素。第1行第0列_C#_Excel_Openxml - Fatal编程技术网

C# OpenXML for Excel-文档必须仅包含一个根元素。第1行第0列

C# OpenXML for Excel-文档必须仅包含一个根元素。第1行第0列,c#,excel,openxml,C#,Excel,Openxml,*强文本*我正在尝试创建并写入excel。对于模板,我只需将OPENXML生产力工具中的代码复制到现有excel文件中,然后修改代码以在从该代码创建新文件时添加我的数据行。然而,我似乎有一些问题,让它正常工作。我不断地得到一份工作 c无法打开文件:缺少part/xl/worksheets/sheet2:根元素 替换的零件:/xl/worksheets/sheet2.xml带有xml错误的零件。文档必须仅包含一个根元素。第1行第0列。 我仍然无法正确调试的错误。另外,在原始模板中,我的工作簿中有3

*强文本*我正在尝试创建并写入excel。对于模板,我只需将OPENXML生产力工具中的代码复制到现有excel文件中,然后修改代码以在从该代码创建新文件时添加我的数据行。然而,我似乎有一些问题,让它正常工作。我不断地得到一份工作

c无法打开文件:缺少part/xl/worksheets/sheet2:根元素 替换的零件:/xl/worksheets/sheet2.xml带有xml错误的零件。文档必须仅包含一个根元素。第1行第0列。

我仍然无法正确调试的错误。另外,在原始模板中,我的工作簿中有3张工作表。我确保删除了其中两个,这样我就可以只创建其中一个的代码,因为我假设OpenXML2.0生产力工具只会为文档代码组合时存在的工作表生成代码。但是发生的情况是,生成的文件中有所有4张原始图纸,但似乎无法将每个图纸上的标题放在一起

想得到一些关于在哪里找到这个问题并解决它的提示。提前谢谢

   public void CreatePackage(string filePath)
        {
            using (SpreadsheetDocument package = SpreadsheetDocument.Create(filePath, SpreadsheetDocumentType.Workbook))
            {
                CreateParts(package);
            }
        }

        private void CreateParts(SpreadsheetDocument document)
        {
            ExtendedFilePropertiesPart extendedFilePropertiesPart1 = document.AddNewPart<ExtendedFilePropertiesPart>("rId3");
            GenerateExtendedFilePropertiesPart1Content(extendedFilePropertiesPart1);

            WorkbookPart workbookPart1 = document.AddWorkbookPart();
            GenerateWorkbookPart1Content(workbookPart1);

            WorkbookStylesPart workbookStylesPart1 = workbookPart1.AddNewPart<WorkbookStylesPart>("rId3");
            GenerateWorkbookStylesPart1Content(workbookStylesPart1);

            ThemePart themePart1 = workbookPart1.AddNewPart<ThemePart>("rId2");
            GenerateThemePart1Content(themePart1);

            WorksheetPart worksheetPart1 = workbookPart1.AddNewPart<WorksheetPart>("rId1");
            GenerateWorksheetPart1Content(worksheetPart1);

            WorksheetCommentsPart worksheetCommentsPart1 = worksheetPart1.AddNewPart<WorksheetCommentsPart>("rId2");
            GenerateWorksheetCommentsPart1Content(worksheetCommentsPart1);

            VmlDrawingPart vmlDrawingPart1 = worksheetPart1.AddNewPart<VmlDrawingPart>("rId1");
            GenerateVmlDrawingPart1Content(vmlDrawingPart1);

            SharedStringTablePart sharedStringTablePart1 = workbookPart1.AddNewPart<SharedStringTablePart>("rId4");
            GenerateSharedStringTablePart1Content(sharedStringTablePart1);

            SetPackageProperties(document);
        }
public void CreatePackage(字符串文件路径)
{
使用(SpreadsheetDocument包=SpreadsheetDocument.Create(文件路径,SpreadsheetDocumentType.工作簿))
{
零件(包装);
}
}
私有void CreateParts(电子表格文档)
{
ExtendedFilePropertiesPart extendedFilePropertiesPart1=document.AddNewPart(“rId3”);
GenerateExtendedFilePropertiesPart1内容(扩展文件属性Part1);
WorkbookPart workbookPart1=document.AddWorkbookPart();
GenerateWorkBookPart1内容(workbookPart1);
工作簿样式SPART工作簿样式SPART1=工作簿部件1.添加新部件(“rId3”);
GenerateWorkBookStyleSpart1内容(workbookStylesPart1);
ThemePart themePart1=工作簿部件1.添加新部件(“rId2”);
生成MePart1内容(部门1);
WorksheetPart worksheetPart1=workbookPart1.AddNewPart(“rId1”);
生成工作表部件1内容(工作表部件1);
工作表CommentSpart工作表CommentSpart1=工作表Part1.AddNewPart(“rId2”);
生成工作表建议Spart1内容(工作表建议Spart1);
VmlDrawingPart vmlDrawingPart1=工作表Part1.AddNewPart(“rId1”);
生成vmlDrawingPart1内容(vmlDrawingPart1);
SharedStringTablePart sharedStringTablePart1=工作簿Part1.AddNewPart(“rId4”);
生成sharedStringTablePart1内容(sharedStringTablePart1);
SetPackageProperties(文档);
}

问题在于构造XML的方式;正如错误所解释的,XMLs必须只有一个根元素。让我举几个例子:

有效的XML文档:

<users>
 <user>
  <name>Omar</name>
  <age>25</age>
 </user>
 <user>
  <name>Gabbo</name>
  <age>41</age>
 </user>
</users>
<user>
 <name>Omar</name>
 <age>25</age>
</user>
<user>
 <name>Gabbo</name>
 <age>41</age>
</user>

奥马尔
25
加博
41
无效的XML文档:

<users>
 <user>
  <name>Omar</name>
  <age>25</age>
 </user>
 <user>
  <name>Gabbo</name>
  <age>41</age>
 </user>
</users>
<user>
 <name>Omar</name>
 <age>25</age>
</user>
<user>
 <name>Gabbo</name>
 <age>41</age>
</user>

奥马尔
25
加博
41
在第一个示例中,文档中的每个元素都是用户的子元素,而在第二个示例中,有两个用户四处游荡。

如果我不得不猜测的话,这个错误是由于您删除了

        WorksheetPart worksheetPart2 = workbookPart2.AddNewPart<WorksheetPart>("rId2");
        GenerateWorksheetPart2Content(worksheetPart2);
部分。在一个地方,他们有多个工作表生成(不是工作表生成,这是您删除的部分)

工作表初始值设定项中的id实际上是对工作簿id的引用。由于去掉了GenerateWorkbookPart2Content函数,因此该引用是一个错误

啊,软引用的问题

在Microsoft的示例代码中,他们使用:

        sheet1.Id = workbookPart.GetIdOfPart(worksheetPart1);

这仍然是一个软参考,但至少没有硬编码……)

/xl/worksheets/sheet2.xml
是什么样子的?我不确定,因为创建的文件有错误。因此,您无法打开创建的文件。处的示例代码使您的
工作簿
似乎缺少与您的
工作表
对象关联的
工作表
对象with@Kobojunkie,如果将“无效”xml插入到xml元素中,让我们调用它,您应该能够正确解析它什么xml?正如我所解释的,我正在尝试使用ExcelOpenXML2.0工具来实现这一点。所以,我的问题是,如果是XML,我应该关注哪个文档组件来解决这个问题?@Kobojunkie:我从来没有使用过OpenXML,但是如果您将所有内容都封装在一个根标记中(正如EdmundYeung99所建议的),那么您应该很好在这种情况下,我只在代码中工作,而不是直接使用任何XML。这就是为什么我想知道要寻找什么特定组件来解决问题的原因。+1。Kobojunkie是对的。埃德蒙,你有一片森林而不是一棵树,这就是问题所在。将根节点包装成一个节点,从现在开始,您就有了一棵树。只要工作表部件和工作表ID匹配,它们是什么就重要吗?