2008-09-30 7 views
5

La biblioteca de interoperabilidad es lenta y necesita MS Office instalado. Muchas veces no desea instalar MS Office en los servidores.¿Cómo puedo leer archivos de MS Office en un servidor sin instalar MS Office y sin usar la biblioteca de Interop?

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

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

Necesito decirte que tengo una biblioteca de documentos muy grande, y no puedo convertirla a 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.

+0

¿Alguna suerte con esta? Simplemente estoy tratando de abrir documentos de Office y analizar enlaces incrustados y registrarlos. No necesito acceso de lectura, pero Interop y una suite de Office en el servidor no son una opción. –

Respuesta

3

Para todas las versiones de MS Office:

para la nueva oficina (2007):

Para la antigua oficina (antes de 2007):

+0

TX Los controles de texto solo leen los archivos de las palabras. ¿Sabes si existe otro? –

+0

@volothamp yep :) –

+0

@IlyaKochetov - Estoy buscando simplemente flagelar documentos de Office para enlaces integrados para hacer un poco de vigilancia para nuestros propietarios de contenido. El mismo problema, la interoperabilidad en el servidor es un problema grave (licencia, seguridad, etc.) ... ¿puede pensar en otra cosa simplemente por analizarlos? No necesito escribir ninguna funcionalidad. –

1

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

Si realmente 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.

+0

Nada de eso. Necesito extraer el texto parte de los archivos. Gracias, adios. –

1

Si el documento está en formato word 2007, puede usar la biblioteca system.io.packaging para interactuar con él programáticamente.

RWendi

+0

Gracias, pero necesito todos los archivos de MS Office. –

0

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 a ella en su servidor.

2

Como los nuevos formatos docx son intrínsecamente archivos basados ​​en XML, puede crearlos y manipularlos mediante programación mediante técnicas XML DOM estándar, una vez que conozca la estructura.

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

Hay ejemplos disponibles para hacer esto, y el proyecto Office Open XML en SourceForge puede valer la pena buscar inspiración.

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

Desafortunadamente no hay nada de primera clase y nativo de la plataforma .NET para trabajar con estos archivos.

+0

Error propenso, pero una solución decente. –

0

Los libros de Microsoft Excel se pueden leer utilizando un controlador ODBC (¿o es un controlador OLE DB? No se recuerda) que hace que el libro parezca una tabla de base de datos. Pero no sé si ese controlador está disponible sin la Suite de Office.

2

Echa un vistazo a Aspose components. Están diseñados para imitar la funcionalidad Interop sin requerir una instalación completa de Office en un servidor.

0

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

Conversion Howto

En resumen, se define una macro en OpenOffice y que llame a esa macro con un argumento de línea de comandos a OpenOffice. En ese argumento, el nombre del archivo local (el archivo de Office) está codificado en .

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

1

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

Cuestiones relacionadas