我需要将一些工作簿的工作表合并到一个新的工作簿中。我试过的是这个,但是我得到“无法插入OpenXmlElement“ newChild”,因为它是树的一部分。“。
{{1}}
答案 0 :(得分:0)
该错误消息表示您正在尝试添加已经具有父级OpenXmlElement
(在此情况下为Sheet
对象)的OpenXmlCompositeElement
(在这种情况下为Sheets
) )作为另一个OpenXmlCompositeElement
(在这种情况下为Worksheet
)的新孩子。
在以下订单项中,您正在获取对Sheet
对象的引用,该对象已经具有父Sheets
对象。
var sheet = (Sheet)sourceDocument.WorkbookPart.Workbook.Sheets.FirstChild;
使用new Worksheet(sheet)
,您试图将同一sheet
添加到另一个父对象,即您正在创建的Worksheet
实例。那是行不通的。
暂时假设将Sheet
添加到Worksheet
是有意义的,您的第二行将必须如下重写:
workbookPart.Workbook.AppendChild(new Worksheet(sheet.CloneNode(true)));
在上面的代码行中,sheet
被sheet.CloneNode(true)
替换,这将复制原始Sheet
对象的深层副本,该对象没有父对象。因此,可以将克隆作为新子添加到另一个父中。
尽管上述解决方案可以回答您的直接问题(因为它避免了错误消息),但是您的代码没有意义,因为它无法创建有效的Open XML标记。 Worksheet
个实例不应添加到Workbook
个实例,并且Sheet
个实例不应添加到Worksheet
个实例。这不是复制多个工作表的方式,这是一个非常复杂的任务,需要您创建多个工作表部分,将这些工作表部分链接到工作簿部分,并考虑共享的字符串,样式和其他内容。