如何从一个SpreadsheetDocument中获取一张表并将其添加到C#中

时间:2019-07-03 11:32:32

标签: c# .net excel openxml

在我的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都是有效的,因为当我只返回其中一个而不尝试将它们组合时,它们都将成功导出正确的数据。那么如何才能成功地将这两张纸组合在一起?

1 个答案:

答案 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");

    }