在我的c#.net项目中,我有一个具有两个excel SpreadsheetDocuments的控制器动作,我想将第二个工作簿的第一张纸添加到第一个工作簿中(因此第一个工作簿将有两张纸)。
我的代码当前看起来像这样
SpreadsheetDocument doc1 = SpreadsheetDocument.Open(stream, true);
SpreadsheetDocument doc2 = SpreadsheetDocument.Open(stream2, true);
var breakSheet = doc2.WorkbookPart.Workbook.Sheets.FirstChild;
doc1.WorkbookPart.Workbook.Sheets.Append(breakSheet);
stream.Seek(0, SeekOrigin.Begin);
return File(stream, System.Net.Mime.MediaTypeNames.Application.Octet, String.Format(fileName));
但是在这段代码的第3行,我收到错误消息“由于它是树的一部分,因此无法插入OpenXmlElement“ newChild”。“
我知道两个SpreadsheetDocuments都是有效的,因为当我只返回其中一个而不尝试将它们组合时,它们都将成功导出正确的数据。那么如何才能成功地将这两张纸组合在一起?
答案 0 :(得分:0)
如果可以的话,我建议您使用ClosedXML和copy the worksheet
可能看起来像这样:
private static void CopyWorksheet(Stream sourceStream, Stream targetStream)
{
var wb1 = new XLWorkbook(sourceStream);
var wb2 = new XLWorkbook(targetStream);
var sh1 = wb1.Worksheets.First();
sh1.CopyTo(wb2, sh1.Name + " from wb1");
}