Я хочу объединить несколько файлов Excel с EPPlus в C#.C# EPPlus merge Файлы Excel
я сделал следующее:
using (MemoryStream protocolStream = new MemoryStream())
{
ExcelPackage pck = new ExcelPackage();
HashSet<string> wsNames = new HashSet<string>();
foreach (var file in files)
{
ExcelPackage copyPck = new ExcelPackage(new FileInfo(file));
foreach (var ws in copyPck.Workbook.Worksheets)
{
string name = ws.Name;
int i = 1;
while (!wsNames.Add(ws.Name))
name = ws.Name + i++;
ws.Name = name;
var copiedws = pck.Workbook.Worksheets.Add(name);
copiedws.WorksheetXml.LoadXml(ws.WorksheetXml.DocumentElement.OuterXml);
}
}
pck.SaveAs(protocolStream);
protocolStream.Position = 0;
using (FileStream fs = new FileStream(resultFile, FileMode.Create))
protocolStream.CopyTo(fs);
}
Но я получаю следующее сообщение об ошибке в pck.SaveAs(protocolStream)
:
System.ArgumentOutOfRangeException
в System.ThrowHelper.ThrowArgumentOutOfRangeException (ExceptionArgument аргумент, Ресурс ExceptionResource) в System.Collections.Generic.List
1.get_Item(Int32 index) in OfficeOpenXml.ExcelStyleCollection
1.get_Item (Int32 PositionID)
Я также пробовал с методом Worksheet.Copy, но я теряю стиль с ним.
Какие линии это происходит? – Rob
Я редактировал вопрос. Ошибка возникает в 'pck.SaveAs (protocolStream)'. – Tony
Выглядит как возможная пропавшая функция/ошибка в библиотеке. Кажется, он разбился, потому что стили копируются, когда вы делаете это вручную, и их встроенный метод копирования также теряет стили. – Rob