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