2012-03-13 23 views
5

Lo que necesito lograr es tener una plantilla de documento de palabra (docx), que contendrá Título, Nombre de autor, Fecha, etc.Cómo leer información de metadatos de documentos docx?

Esta plantilla luego será utilizada por los usuarios para completarla. Necesito crear un programa C#, que contendrá el archivo docx y leerá toda la información de interés (título, nombre, fecha, ...).

Así que mis preguntas son:

  1. ¿Cómo puedo poner los metadatos en la plantilla diciendo: este es el Título, Fecha esto es, se trata de nombre, etc? (no programáticamente)

  2. ¿Cómo leo la información por programación?

+0

¿Alguna solución final con código fuente completo de muestra trabajando al respecto? – Kiquenet

Respuesta

8

Una forma de abordar esto sería utilizar controles de contenido. En Office, puede crear su plantilla y luego, para cada una de sus entradas de interés respectivas, puede colocar uno de estos controles. Están en la pestaña Desarrollador en Office.

Después de insertar sus controles, necesitará que cada uno de ellos tenga un nombre único. Office les permitirá a todos tener el mismo nombre, pero deberá identificarlos de manera única en su documento de plantilla.

Ahora necesita obtener los datos que se ingresan en estos controles. Una vez más, es probable que haya algunas soluciones mejores, pero Eric White tiene todo tipo de cosas buenas de OpenXML, así que aquí está una de sus: Iterating over Content Controls

Creo que hay problemas para encontrar controles de contenido anidados dentro de una tabla. Entonces, si haces eso, entonces creo que tienes que recorrer específicamente los elementos de la tabla para encontrar controles de contenido dentro.

Además, es probable que desee guardar un .docx de su archivo .doct, que no creo que haya ningún método "one-liner" incorporado en OpenXML; sin embargo, puede crear un nuevo documento de Word y luego escribir la secuencia de archivos de la plantilla en el archivo docx recién creado. De nuevo, por supuesto, puede haber mejores soluciones por ahí.

¿Has estado aquí? Hay un montón de cosas buenas: Introduction to OpenXML

Además, Eric ha estado lanzando más y más vídeos en la OpenXML YouTube channel

+0

Muchas gracias por señalarme eso, Jesse, me ayudó a resolver mi problema. Cheers – Dave

5

Todos los documentos OpenXML han construido en los metadatos de la base que va a hacer lo que necesita a través System.IO.Packaging. Una vez que abre el archivo de palabras usando el xml abierto sdk en C#, puede obtener estos valores a través de la clase PackageProperties. Hay 11 propiedades que puedes usar.

"Alienta" a su usuario a ingresar los metadatos utilizando el Panel de información del documento (DIP) de Word.

enter image description here Puede forzar esto de forma predeterminada cuando abren su plantilla, mediante un ajuste en la barra de herramientas del desarrollador para la plantilla. Vea el following article sobre cómo configurar esto en su plantilla.

Escribí una aplicación rápida de Windows Form que muestra esta información mediante la llamada abierta xml sdk a PackageProperties del archivo de Word que se muestra arriba.

enter image description here

Here is the full solution con el archivo de Word de ejemplo incluidos.

Espero que esto ayude.

+0

hola, gracias por esto, pero acabo de consultar con el tipo para el que es la herramienta y, aparentemente, agregar información adicional no es una opción, ya que los usuarios no querrán agregar la misma información dos veces:/Tendré simplemente para averiguar cómo obtener el contenido de los controles de contenido – Dave

7

1) ¿Cómo pongo los metadatos en la plantilla diciendo: este es el título, esta es la fecha, este es el nombre, etc.? (No programáticamente)

se puede hacer eso en la pestaña Información de MS Word 2010 como se muestra a continuación:

How to set manually the MS Word document properties like Author, Title, etc...

2) ¿cómo puedo leer esa información mediante programación?

Una vez que ha creado el documento (o plantilla) siempre se puede buscar en su interior con Open XML SDK 2.0 herramienta de productividad (wich se instala con OpenXML SDK) para ver dónde (qué clases de usar) para obtener/establecer alguna información desde/hasta el documento.

Open XML SDK 2.0 Productivity Tool

También creo que este post podría ayudar a resolver su tarea: Add and update custom document properties in a docx


ACTUALIZACIÓN:

Hola David,

favor, eche un vistazo en este artículo de MSDN - Retrieving Application Properties from Word 2010 Documents by Using the Open XML SDK 2.0

Espero que esto sea exactamente lo que estás buscando.

+0

hola, gracias por esto, pero acabo de consultar con el tipo para el que es la herramienta y, aparentemente, agregar información adicional no es una opción, ya que los usuarios no querrán agregar la misma información dos veces:/Tendré que averiguar cómo obtener el contenido de los controles de contenido – Dave

+0

Hola Dave, acabo de actualizar mi publicación anterior (ver después de la palabra ACTUALIZAR). Por favor, siéntase libre de marcar mi publicación como una respuesta para sus preguntas (si es por supuesto). –

+0

OpenXML en Nuget es Open XML SDK 2.0.0 http://www.nuget.org/packages/OpenXmlSdk/ pero no Open XML SDK 2.5.0 – Kiquenet

Cuestiones relacionadas