Answer the question
In order to leave comments, you need to log in
How to make changes to an Open XML file that is in memory and save the changes without using disk?
The task is to load the reference xlsx file into memory, make changes to it and save the changes in memory (not on disk).
FileInfo f = new FileInfo("File.xlsx");
// Создаем массив байт для хранения фала в памяти
// +50000 на случай если изменения будут больше чем исходный файл, это можно так делать или я гоню?
byte[] newFile = new byte[f.Length+50000];
// Переносим файл с диска на память
File.WriteAllBytes("File.xlsx", newFile);
// Создаем поток из байтового массива что бы можно было использовать его в SpreadsheetDocument.Open
streamNewFile = new MemoryStream(newFile, true);
// Пытаемся открыть xlsx находящийся в памяти
SpreadsheetDocument document = SpreadsheetDocument.Open(streamNewFile, true); // ошибка происходит тут
// что то делаем с таблицей
// закрываем таблицу
document.Close();
// возвращаем массив байтов с сохраненной таблицей
return streamNewFile.ToArray();
Answer the question
In order to leave comments, you need to log in
Most likely, due to the fact that you allocate more memory for the buffer, the file cannot be unpacked (after all, these are zip archives), the exception clearly indicates this, allocate for the buffer exactly the size of the file. when saving, then create a new buffer, or most likely a new buffer will be returned to you.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question