Есть код который создает из файла поток. Файл содержит шаблонный вариант отчета в формате Open Xml. Затем код делает из этого потока копию, что бы потом можно было эту копию повторно использовать. Это сделано для того что бы не обращаться повторно к диску. Но при обращении к копии stream происходит ошибка при создании объекта SpreadsheetDocument.
Вот сама ошибка: DocumentFormat.OpenXml.Packaging.OpenXmlPackageException: The specified package is invalid. The main part is missing.
if (copyStreamIsExist == false)
{
Log.SetDetal("Первичное открытие файла шаблона");
var originalStream = File.Open(path + templateName, FileMode.Open);
originalStream.CopyTo(workMemoryStream);
copyStream = new MemoryStream();
workMemoryStream.CopyTo(copyStream);
copyStreamIsExist = true;
var document = SpreadsheetDocument.Open(workMemoryStream, true);
} else {
Log.SetDetal("Файл шаблона существует в памяти. Делаем копию памяти");
workMemoryStream = new MemoryStream();
copyStream.CopyTo(workMemoryStream);
workMemoryStream.Seek(0, SeekOrigin.Begin);
var document = SpreadsheetDocument.Open(workMemoryStream, true);
}
Вы не перемотали copyStream
в начало. После копирования в него текущее его положение — в конце, так что когда вы копируете из него, начальное положение для копирования совпадает с концом потока.
Добавьте copyStream.Seek(0, SeekOrigin.Begin);
перед каждым копированием из него. (Если добавить только после копирования в copyStream
, то первое копирование из copyStream
сработает, а второе — нет.)
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Создаю графический редактор с помощью canvas b fabricjs на javaScript
исходя из значения time будет запускать таймер и по истечении оного - выводить алертКак это можно реализовать?