Pregunta

Tengo un proyecto en el que me gustaría generar una exportación de informe en formato MS Word.El informe incluirá imágenes/gráficos, tablas y texto.¿Cuál es la mejor manera de hacer esto?¿Herramientas de terceros?¿Cuáles son tus experiencias?

¿Fue útil?

Solución

La respuesta dependerá ligeramente de si la aplicación se ejecuta en un servidor o si se ejecuta en la máquina cliente.Si está ejecutando en un servidor, entonces querrá utilizar uno de los formatos de generación de Office basados ​​en XML, ya que existen problemas cuando usando Office Automation en un servidor.

Sin embargo, si está trabajando en la máquina cliente, puede elegir entre utilizando la automatización de oficina o utilizando el formato Office Open XML (consulte los enlaces a continuación), que es compatible con Microsoft Office 2000 y versiones posteriores, ya sea de forma nativa o mediante paquetes de servicios.Sin embargo, una desventaja de esto es que es posible que no pueda incrustar algunos tipos de gráficos o imágenes que desee mostrar.

La mejor manera de hacer las cosas dependerá claramente de cuánto tiempo tenga para invertir en el desarrollo.Si sigue el camino de la automatización de oficinas, existen bastantes buenos tutoriales que se pueden encontrar a través de Google y que son bastante sencillos de aprender.Sin embargo, el formato XML de Open Office es bastante nuevo, por lo que es posible que la curva de aprendizaje sea un poco más alta.

Información de Office Open XML

Otros consejos

Biblioteca gratuita DocX para crear documentos DocX, desarrollado activamente y muy fácil e intuitivo de usar.Dado que CodePlex está muriendo, el proyecto se ha trasladado a github.

He pasado la última semana más o menos poniéndome al día XML abierto de oficina.Contamos con una aplicación de base de datos que almacena datos de encuestas que queremos reportar en Microsoft Word.De hecho, puedes crear archivos de Word 2007 (docx) desde cero en C#.La versión 2 del Open XML SDK incluye una interesante aplicación llamada Document Reflector que en realidad proporcionará el código C# para recrear completamente un documento de Word.Puede utilizar partes o todo el código y sustituir los bits que desee cambiar sobre la marcha.El archivo de ayuda incluido con el SDK también tiene algunos buenos ejemplos de código.

No es necesario Office Interop ni ningún otro software de Office en el servidor: los nuevos formatos son 100% XML.

¿Ha considerado utilizar .RTF como alternativa?

Admite la incrustación de imágenes y tablas, así como texto, se abre de forma predeterminada usando Microsoft Word y, aunque su conjunto de funciones es más limitado (descarte cualquier formato avanzado) para algo que se ve, se siente y se abre como un documento de Word, no está muy lejos.

Probablemente sus usuarios finales no lo notarán.

he encontrado Asponer palabras para ser el mejor, ya que no todo el mundo puede abrir archivos de formato Office Open XML/*.docx y la interoperabilidad de Word y la automatización de Word pueden tener errores.Aspose Words admite la mayoría de los tipos de archivos de documentos desde Word 97 en adelante.

Es un componente de pago pero tiene un gran soporte.La otra alternativa, como ya se sugirió, es RTF.

Para generar documentos de Word con Office Automation dentro de .NET, específicamente en C# o VB.NET:

  1. Añade el Microsoft.Office.Interop.Word Referencia de montaje para su proyecto.el camino es \Visual Studio Tools para Office\PIA\Office11\Microsoft.Office.Interop.Word.dll.

  2. Siga el ejemplo del código de Microsoft que puede encontrar aquí: http://support.microsoft.com/kb/316384/en-us.

Schmidty, si quieres generar documentos de Word en un servidor web necesitarás una licencia para cada uno cliente (no sólo el servidor web).Ver esta sección en la primera enlace Rob publicó:

"Además de los problemas técnicos, también hay que tener en cuenta las cuestiones de licencia.Las pautas de licencia actuales impiden que las aplicaciones de Office se utilicen en un servidor para atender las solicitudes de los clientes, a menos que esos clientes tengan copias con licencia de Office.El uso de la automatización del lado del servidor para proporcionar funcionalidad de Office a estaciones de trabajo sin licencia no está cubierto por el Acuerdo de licencia de usuario final (CLUF)".

Si cumple con los requisitos de licencia, creo que necesitará utilizar COM Interop; para ser específico, el Ensamblajes de interoperabilidad primaria de Office XP.

Consulte VSTO (Visual Studio Tools para Office).Es bastante sencillo crear una plantilla de Word, inyectarle una isla de datos xml y luego enviarla al cliente.Cuando el usuario abre el documento en Word, Word lee el xml, lo transforma en WordML y lo representa.Querrá mirar la clase ServerDocument de la biblioteca VSTO.Según mi experiencia, no se requiere ninguna licencia adicional.

He tenido mucho éxito al utilizar Syncfusion Backoffice DocIO, que admite formatos doc y docx.

En versiones anteriores no admitía todo en Word, pero según su lista lo probamos con tablas y texto como un enfoque de combinación de correspondencia y funcionó bien.

Sin embargo, no estoy seguro acerca de la importación de imágenes.En su página de propaganda http://www.syncfusion.com/products/DocIO/Backoffice/features/default.aspx dice

BlockQuote Essential Docio tiene soporte para insertar imágenes escalar y vectores en el documento, en casi todos los formatos.Mapa de bits, gif, png y tiff son algunos de los tipos de imágenes comunes admitidos.

Entonces vale la pena considerarlo.

Como otros han mencionado, puedes crear un documento RTF, existen algunas buenas bibliotecas RTF para .net como http://www.codeproject.com/KB/string/nrtftree.aspx

Me enfrenté a este problema y creé una pequeña biblioteca para ello.Se utilizó en varios proyectos y luego decidí publicarlo.Es gratis y muy, muy sencillo pero estoy seguro de que te ayudará con la tarea.Invoque la biblioteca XML abierta de Office, http://invoke.co.nz/products/docx.aspx.

he escrito un Serie de publicaciones de blog sobre generación de documentos Open XML WordprocessingML.Mi enfoque es crear un documento de plantilla que contenga controles de contenido y en cada control de contenido escribir una expresión XPath que defina cómo recuperar el contenido de un documento XML que contiene los datos que impulsan el proceso de generación del documento.El código es gratuito y tiene licencia bajo el Licencia recíproca de Microsoft (Ms-RL).En esa misma serie de publicaciones de blog, también exploro un enfoque en el que se escribe código C# en controles de contenido.Luego, el proceso de generación de documentos procesa el documento de plantilla y genera un programa C# que genera los documentos deseados.Una ventaja de este enfoque es que puede utilizar cualquier fuente de datos como fuente de datos para el proceso de generación de documentos.Ese código también tiene la licencia recíproca de Microsoft.

Actualmente hago exactamente esto.

Si el documento no es muy grande, no contiene imágenes y demás, lo almaceno como un RTF con #MergeFields# y simplemente los reemplazo con contenido, enviando el resultado al usuario como un RTF.

Para documentos más grandes, incluidas imágenes e imágenes insertadas dinámicamente, guardo el documento inicial de Word como un archivo de página web única *.mht que contiene nuevamente #MergeFields#.Luego hago lo mismo que arriba.Con esto, puedo representar fácilmente una tabla de datos con algunas etiquetas de tabla HTML básicas y reemplazar uno de los #MergeFields# con una tabla completa.

Las imágenes se pueden almacenar en su servidor y la URL también se puede incrustar en el documento.

Curiosamente, los nuevos formatos de archivo de Office 2007 son en realidad archivos zip; si cambia el nombre de la extensión a .zip, puede abrirlos y ver su contenido.Esto significa que debería poder cambiar contenido como imágenes dentro y fuera usando una biblioteca zip simple de C#.

@Dale Ragan:Esto funcionará para el formato XML de Office 2003, pero no es portátil (como lo serían, por ejemplo, los archivos .doc o .docx).

Para leerlos/escribirlos, necesitará usar el control ActiveX de la biblioteca de objetos de Word:

http://www.codeproject.com/KB/aspnet/wordapplication.aspx

@Danny Pitufo:En realidad, este artículo describe lo que se convertirá en el formato Office Open XML con el que Rob respondió.Prestaré más atención a los enlaces que publique de ahora en adelante para asegurarme de que no queden obsoletos.De hecho, hice una búsqueda en WordML, que así se llamaba en ese momento.

Creo que el formato Office Open XML es el mejor camino a seguir.

LibreOffice también admite la interacción sin cabeza a través de API.Lamentablemente, todavía no hay mucha información sobre esta función.:(

También puedes utilizar el generador de documentos de Word.Se puede utilizar para implementación del lado del cliente o del lado del servidor.De la descripción del proyecto:

WordDocumentGenerator es una utilidad para generar documentos de Word a partir de plantillas utilizando Visual Studio 2010 y abrir XML 2.0 SDK.WordDocumentGenerator ayuda a generar documentos de Word tanto no refrescos como actualizables en función de plantillas predefinidas utilizando cambios de código mínimo.Los controles de contenido se utilizan como marcadores de posición para la generación de documentos.Es compatible con Word 2007 y Word 2010.

Agarrarlo: http://worddocgenerator.codeplex.com/

Descargar SDK: http://www.microsoft.com/en-us/download/details.aspx?id=5124

Otra alternativa es Docgen de barlovento (descargo de responsabilidad: soy el fundador).Con Windward diseñas la plantilla en Word, incluidas imágenes, tablas, gráficos, indicadores y cualquier otra cosa que desees.Puede configurar etiquetas donde se insertan datos de una fuente de datos XML o SQL (incluidas funciones como bucles forEach, importación, etc.).Y luego genere el informe en DOCX, PDF, HTML, etc.

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