Herramientas de usuario

Herramientas del sitio


python:word

¡Esta es una revisión vieja del documento!


Word

Para trabajar con Wor desde Python usareo el módulo de terceros Python-Docx en su versión 0.8.10: pip install –user -U python-docx==0.8.10.
Se puede encontrar su doumentación en su página oficial.

Los documentos Word guardan una gran estructura en comparación con los documentos de texto plano.
Los documentos Word (de tipo Document) se dividen en párrafos (porciones de texto limitadas por saltos de línea, datos de tipo Paragraph), que a su vez se dividen en porciones de texto Run diferenciados por tener diferentes estilos.

Lectura de documentos Word

Se abre el documento con la función docx.Document('Nombre_documento.docx') y se asigna el resultado tipo Document a una variable.

Se puede conocer el número de párrafos del documento con la función len() y el atributo de documento paragraphs: len(doc.paragraphs).

Se accede a cada párrafo del documento como si se tratase de una lista, pero para obtener su contenido en texto plano, se usa el atributo text: doc.paragraphs[0].text.

Para conocer el número de runs dentro de un párrafo, podemos usar también la función len() sobre un párrafo y el atributo runs: len(doc.paragraphs[1].runs).

Y del mismo modo que con los párrafos, podemos aceder a los runs del párrafo como si de una lista anidada se tratase y recuperarlos en texto plano con el atributo text: doc.paragraphs[1].runs[0].text.

Ejemplo para obtener el texto plano completo de un documento.

import docx
 
def getText(filename):
    doc = docx.Document(filename)
    textoCompleto=[]
    for parrafo in doc.paragraphs:
        textoCompleto.append(parrafo.text)
     return '\n'.join(textoCompleto)

Estilos de párrafo y runs

En Word de Windows pueden verse los diferentes estilos con la hotkey ctrl+Alt+May+s.

Para los documentos Word se pueden asignar 3 tipos de estilos:

  • Paragraph styles Se aplican a párrafos.
  • Character styles Se aplican a objetos Run.
  • Linked styles Se aplican a párrafos y Runs.

Con el atributo style se le puede asignar estilos a Runs y a párrafos. Para ello hay que indicar el estulo en un string que debe coincidir con los estilos disponibles. Cuando se usa un linked style con un Run, además de especificar un string con el nombre del estilo, hay que añadir ' Char'.

# ...
objetoParrafo.style = 'Quote'
objetoRun.style = 'Quote Char' # Para asignar el mismo estilo que al párrafo
# ...

Si se indica como estilo None, toma el estilo por defecto.
En la versión de Python-Docx 0.8.10 en la que estamos trabajando no se pueden crear estilos, sólo pueden usarse los que trae Word por defecto y los que ya estén creados en ese documento previamente.

Atributos de Runs

Los atributos de run define el estilo de los strings correspondientes. Para activarlos o no, se especifican en un balor booleano True o False. También None para tomar el valor por defecto.

Los atributos son:

  • bold
  • italic
  • underline
  • strike
  • double_strike
  • all_caps
  • small_caps
  • shadow
  • outline Se define un cuadro alrededor del texto.
  • rtl Texto de derecha a izquierda.
  • imprint
  • emboss

Escribir en documentos Word

Se crea un nuevo documento con la función docx.Document() sin argumentos, y asignando el resultado a una variable para poder trabajar con él.

Para añadir un párrafo se utiliza el método doc.add_paragraph(texto).

No olvidar guardar el documento, para que éste sea creado: oc.save(nombreDocumento.docx).

Para cada párrafo se pueden añadir runs con el método add_run:

import docx
doc = docx.Document()
doc.add_paragraph('Hello world!')
parrafo2 = doc.add_paragraph('Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas est enim, suscipit at ornare vitae, molestie blandit ante.')
parrafo2.add_run('Morbi blandit ligula ac ipsum condimentum hendrerit.')
doc.save('loremIpsum.docx')

Los métodos add_paragraphs y add_run aceptan como segundo elemento uno de los estilos disponibles.

Añadiendo encabezados

Se utiliza la función add_headings() en el objeto Document. El primer arumento es texto, y el segundo el nivel del encabezado, siendo el mayor 0.
De cara al Documento, son tratados como párrafos, puesto que terminan en salto de línea.

Añadiendo líneas y saltos de página

Para añadir una línea, se utiliza el método de documento, párrafo o run add_breack().

Para añadir un salto de línea se añade el argumento docx.enum.text.WD_BREAK.PAGE al método add_breack().

Añadiendo imágenes

Se utiliza el método de documento doc.add_picture(), en el que se indican los siguientes argumentos:

  1. Nombre de la imagen, incluyendo dirección, si no está en el directorio de trabajo.
  2. width = docx.shared.Inches(número de pulgadas) # Anchura de la imagen en pulgadas.
  3. height= docx.shared.Cm(número de centímetros) # Anchura de la imagen en centímetros.

Tanto la altura height, como la anchura width, pueden expresarse en centímetros o pulgadas.

Creando PDFs a partir de documentos Word

Para ello necesitamos otro módulo: Pywin32. Es un módulo de terceros que hay que instalar

pip install --user -U pywin32==224

Una vez hemos guardado el documento Word, vamos a guardarlo en pdf. Lo primero es conocer el número que indica el formato de guardado PDF en el listado de tipos de archivo a guardar, en el ejemplo de estas notas es el 17.

A continuación, obtenemos un objeto que representa la aplicación Word:

wordObj = win32com.client.Dispatch('Word.Application')

, y otro a partir de éste, que representa el documento en un formato propio de la biblioteca instalada <ode python>docObj = wordObj.Documents.Open(wordFilename)</code>. Entonces ya podemos proceder al guardado en PDF

docObj.SaveAs(pdfFilename, FileFormat=wdFormatPDF)

Tras lo cual cerraremos los objetos abiertos anteriormente.

Puede verse todo el proceso en el siguiente ejemplo.

# ...
doc.save(wordFilename)
wdFormatPDF = 17 # Word's numeric code for PDFs.
wordObj = win32com.client.Dispatch('Word.Application')
docObj = wordObj.Documents.Open(wordFilename)
docObj.SaveAs(pdfFilename, FileFormat=wdFormatPDF)
docObj.Close()
wordObj.Quit()
python/word.1649610676.txt.gz · Última modificación: por alberto

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki