¿Cómo puedo leer los archivos de MS Office en un servidor sin instalar MS Office y sin usar la biblioteca de interoperabilidad?

StackOverflow https://stackoverflow.com/questions/153079

Pregunta

La biblioteca de interoperabilidad es lenta y necesita la instalación de MS Office. Muchas veces no desea instalar MS Office en servidores.

Me gustaría usar PDI de Apache , pero estoy en .NET.

Solo necesito extraer la porción de texto de los archivos, no crear ni "almacenar información" en archivos de Office.

Necesito decirte que tengo una biblioteca de documentos muy grande, y no puedo convertirla en archivos XML más nuevos.

No quiero escribir un analizador para los archivos binarios. Una biblioteca como Apache POI hace esto por nosotros. Desafortunadamente, es solo para la plataforma Java. Tal vez debería considerar escribir esta aplicación en Java.

Todavía no encuentro una alternativa de código abierto para POI en .NET, creo que escribiré mi propia aplicación en Java.

¿Fue útil?

Solución

Para todas las versiones de MS Office:

Para la nueva oficina (2007):

Para la antigua oficina (antes de 2007):

Otros consejos

Consulte los Aspose components . Están diseñados para imitar la funcionalidad Interop sin necesidad de una instalación completa de Office en un servidor.

Como los nuevos formatos de docx son archivos basados ??en XML de forma inherente, puede crearlos y manipularlos mediante programación con técnicas estándar de DOM de XML, una vez que conozca la estructura.

Los archivos son básicamente archivos zip con una extensión de archivo alternativa. Utilice el espacio de nombres System.IO.Packaging para obtener acceso a los elementos internos del archivo, luego ábralos a un XmlDocument para realizar la manipulación.

Hay ejemplos disponibles para hacer esto, y el proyecto Office Open XML en SourceForge puede ser útil para inspirarse.

En cuanto a los formatos binarios anteriores, estos eran propiedad de MS, y la única forma de obtener contenido desde dentro es a través del modelo de objetos de Office (requiere una instalación de Office) o un convertidor de archivos de terceros. / analizador.

Lamentablemente, no hay nada propio y nativo en la plataforma .NET para trabajar con estos archivos.

¿Qué necesitas hacer con esos archivos? Si solo desea transmitirlos al usuario, entonces las secuencias de archivos básicas están bien. Si desea crear nuevos archivos (quizás basados ??en una plantilla) para enviar al usuario que el usuario pueda abrir en Office, hay una variedad o work-arounds .

Si en realidad está guardando datos en documentos de Office para que los use su sitio web, lo está haciendo mal. Los documentos de Office, incluso las hojas de cálculo de Excel y las bases de datos de acceso, no son realmente una opción adecuada para usar con un sitio web interactivo.

Si el documento está en formato Word 2007, puede utilizar la biblioteca system.io.packaging para interactuar con él de forma programática.

RWendi

En el mundo Java, también hay JExcelApi . Está muy claramente escrito, por lo que pude ver, mucho más limpio que POI. Así que tal vez incluso un puerto de ese código a .NET no esté fuera de discusión, dependiendo, por supuesto, de tener suficiente tiempo disponible.

OpenOffice.

Puede programar en contra y hacer que haga mucho por usted, sin gastar el dinero en una licencia para el servidor, o tener la vulnerabilidad asociada con él en su servidor.

Los libros de Microsoft Excel se pueden leer usando un controlador ODBC (o ¿es un controlador OLE DB? no puedo recordar) que hace que el libro se vea como una tabla de base de datos. Pero no sé si ese controlador está disponible sin el conjunto de aplicaciones de Office.

Puedes usar OpenOffice. Tiene una herramienta de conversión de línea de comandos:

Cómo hacer la conversión

En resumen, define una macro en OpenOffice y la llama con una línea de comandos argumento a OpenOffice. En ese argumento, el nombre del archivo local (el archivo de Office) es codificado.

No es una gran solución, pero debería ser viable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top