Исключение ArgumentOutOfRange в EPPlus при копировании листа в новую книгу

Я хочу скопировать лист из шаблона книги в новую книгу. Я использовал этот код в других проектах, и он отлично работает, но теперь у меня проблема с книгой Excel, но я не знаю, что не так. Вот код:

byte[] file = File.ReadAllBytes(source);
using (var ms = new MemoryStream(file))
{
    var package = new ExcelPackage(ms);

    var worksheet = package.Workbook.Worksheets[1];

    var copyPackage = new ExcelPackage(new FileInfo(destination));

    // the following line causes a ArgumentOutOfRangeException
    copyPackage.Workbook.Worksheets.Add(worksheet.Name, worksheet);
    copyPackage.Save();
}

Это трассировка стека исключения (извинения, по-немецки):

Der Index lag außerhalb des Bereichs. Er darf nicht negativ und kleiner als die Sammlung sein.
Parametername: index
   bei System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   bei OfficeOpenXml.Style.ExcelStyle.get_XfId()
   bei OfficeOpenXml.ExcelStyles.CreateNamedStyle(String name, ExcelStyle Template)
   bei OfficeOpenXml.ExcelStyles.CloneStyle(ExcelStyles style, Int32 styleID, Boolean isNamedStyle, Boolean allwaysAdd)
   bei OfficeOpenXml.ExcelWorksheets.CloneCells(ExcelWorksheet Copy, ExcelWorksheet added)
   bei OfficeOpenXml.ExcelWorksheets.Add(String Name, ExcelWorksheet Copy)
   bei CopyExcel.Program.Main(String[] args) in D:\spikes\CopyExcel\CopyExcel\Program.cs:Zeile 26.

Я не смог воспроизвести вашу проблему. Некоторые несвязанные моменты: вы должны использовать статус using при работе с ExcelPackage, потому что это IDisposable. Кроме того, почему вы загружаете файл в массив, помещаете MemoryStream для передачи в ExcelPackage вместо передачи FileInfo с путем?

Magnetron 04.09.2018 17:42

Вы уверены, что в вашем файле два листа и вы копируете второй? Может быть, измените его на package.Workbook.Worksheets [0]; Более безопасный способ - использовать имя рабочего листа package.Workbook.Worksheets [<WorkSheetName>]

Sanjay 05.09.2018 08:41

@Magnetron Спасибо. Приносим извинения, исходный код (из проекта ASP.NET использует операторы using вместе с пакетом excel). Другая вещь с MemoryStream - хороший момент для улучшения, но не решает проблему. Похоже, что стили в скопированном листе не копируются правильно вместе с самим листом по какой-либо причине.

MiGro 05.09.2018 11:13

@Sanjay Правильно. Использование имен рабочих листов - лучшая идея, и это также то, что реализовано. В качестве примера здесь было проще использовать index. И да, рабочий лист существует.

MiGro 05.09.2018 11:15

Листы @Sanjay в Epplus имеют базу 1, поэтому OP выбирает первый.

Magnetron 05.09.2018 11:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
459
0

Другие вопросы по теме