2008-10-01 11 views
13

¿Cómo escribo un libro de Excel en un MemoryStream sin guardarlo primero en el sistema de archivos?Cómo escribir un libro de Excel en un MemoryStream en .NET?

Todas las opciones de guardar en Microsoft.Office.Interop.Excel.WorkBook toman un nombre de archivo.

+0

, solo quería hacer un seguimiento para ver si el siguiente responde su pregunta. –

+0

@ToddMain estamos en 2014, ¿viste una última solución? –

+0

@Mahdi Alkhatib, no era mi pregunta. –

Respuesta

6

He realizado un trabajo extenso con la PIA y con el almacenamiento de archivos de Excel en un repositorio de documentos y su transmisión al navegador, y no he podido encontrar una solución para usar la PIA sin antes escribir los contenidos en la sistema de archivos primero.

Creo que tendrá que tragarse la bala y tratar con el sistema de archivos como intermediario. La buena noticia es que puede simplemente darle al archivo un nombre único como un guid o usar algún otro método de nombre de archivo temporal (no estoy seguro si existe uno en .net) y simplemente eliminar el contenido cuando haya terminado.

1

Si solo necesita funcionalidades básicas de Excel, es posible que desee crear el Libro de trabajo como una secuencia Html. There is another question on SO that handless this.

Esto también resuelve algunos problemas (es posible que aún no lo haya hecho) relacionados con la escalabilidad de su solución.

1

Otra opción sería utilizar la biblioteca gratuita this para exportar el libro de trabajo. El método de guardar en la clase de libro de trabajo puede tomar un nombre de archivo o una secuencia.

+0

Sí, esto es lo mismo que lo que estaba diciendo, pero en una biblioteca pre = built. siempre y cuando estés bien con el formato OpenXML, esta biblioteca parece ser el camino a seguir. (suponiendo que esté satisfecho con su calidad y rendimiento). –

1

La única forma en que podría hacer esto es si estaba preparado para crear un objeto personalizado que le permitiera almacenar todos los diversos bits y piezas de datos/fórmulas/vba/links/ole objects que deseara conservar, copiar de su libro de trabajo al objeto, y luego persista ese objeto en una secuencia de memoria. En afectar el uso de su objeto proxy como un intermediario.

No hay forma (como han dicho otros) de escribir un archivo de Excel directamente en la memoria.

Con el formato OpenXML de Excel 2007, puede usar el evento BeforeSave del libro para tener un método personalizado que primero establece el parámetro Cancelar del evento BeforeSave en True y luego serializa el paquete xml resultante (que representa el archivo) en un objeto en la memoria.

Cuestiones relacionadas