Как взять лист из одного SpreadsheetDocument и добавить его в другой в c # - PullRequest
0 голосов
/ 03 июля 2019

В моем проекте c # .net у меня есть действие контроллера, которое имеет два превосходных 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 голосов
/ 03 июля 2019

Если вы можете, я бы предложил вам использовать ClosedXML, и скопировать лист

Там это может выглядеть так:

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

    }
...