¡Esta es una revisión vieja del documento!
Tabla de Contenidos
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:
- Nombre de la imagen, incluyendo dirección, si no está en el directorio de trabajo.
- width = docx.shared.Inches(número de pulgadas) # Anchura de la imagen en pulgadas.
- 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.
