Как мне записать книгу Excel на MemoryStream без предварительного сохранения ее в файловой системе?
Все параметры в параметрах сохранения Microsoft.Office.Interop.Excel.WorkBook имеют имя файла.
@ToddMain мы находимся в 2014 году, вы видели последнее решение ??
@ Махди Алхатиб, это был не мой вопрос.





Я проделал обширную работу с PIA и с хранением файлов Excel в репозитории документов и их потоковой передачей в браузер, и мне не удалось найти решение для использования PIA без предварительной записи содержимого в файловую систему.
Я думаю, вам придется проглотить пулю и заняться файловой системой в качестве посредника. Хорошей новостью является то, что вы можете просто дать файлу уникальное имя, например, guid, или использовать какой-либо другой метод временного имени файла (не уверен, существует ли он в .net) и просто удалить содержимое, когда закончите.
Если вам нужны только базовые функции Excel, вы можете создать книгу как поток Html. Есть еще один вопрос о том, что без рук это.
Это также решает некоторые проблемы (возможно, у вас еще не было) относительно масштабируемости вашего решения.
Другой вариант - использовать бесплатную библиотеку это для экспорта книги. Метод сохранения в классе книги может принимать имя файла или поток.
да, это то же самое, что я говорил, но в предварительно созданной библиотеке. если вас устраивает формат OpenXML, эта библиотека будет подходящим вариантом. (при условии, что вы довольны его качеством и производительностью).
Единственный способ сделать это, если вы были готовы создать настраиваемый объект, который позволил бы вам хранить все различные биты и фрагменты данных / формул / vba / ссылок / объектов ole, которые вы хотели сохранить, скопировать из своей книги в объект, а затем сохранить этот объект в потоке памяти. Фактически, использование вашего прокси-объекта в качестве посредника.
Нет способа (как говорили другие) записать файл Excel прямо в память.
В формате OpenXML Excel 2007 вы можете использовать событие BeforeSave книги, чтобы иметь настраиваемый метод, который сначала устанавливает для параметра Cancel события BeforeSave значение True, а затем вместо этого сериализует результирующий xml-пакет (который представляет файл) в объект. в памяти.
Это можно сделать с помощью Open XML SDK 2.0. У Эрика Уайта есть отличная статья о том, как работать с файлами OOXML в потоке на Работа с документами Open XML в памяти
просто хотел следить, чтобы узнать, отвечает ли ниже на ваш вопрос.