Evilnapsis

Programming, Hacking and More

PHP Stuffs

Crear documento de Word y agregar una tabla con PHPWord

Vamos a crear un documento de Word y le agregaremos una tabla con datos usando la librería PHPWord, con PHP claro.

Hace un tiempo escribí una introduccion sobre PHP Word, les invito a leerla.

Para instalar la ultima versión de PHPWord es necesario usar composer, composer es un gestor de paquetes para PHP, para instalar composer en Windows debemos ir a la pagina https://getcomposer.org/download/ descargar Composer-setup.exe y ejecutar/instalar, una vez instalado ya podemos usar el comando composer en una consola.

Para instalar PHPWord vamos a abrir una terminal cmd.exe y nos moveremos a la carpeta donde crearemos el proyecto, en mi caso c:\xampp\htdocs\examplesx\phpword-table1\ y ejecutaremos el comando:

composer  require phpoffice/phpword

Este comando creara una serie de carpetas, instalara otras librerías que pueden servir auxiliares para phpword.

Se creara una carpeta “vendor” y dentro habra varias carpetas, nos interesan 2 cosas:

  • el archivo vendor/autoload.php, que autocargara las clases y  según las necesitemos
  • y la carpeta vendor/phpoffice/phpword, que contiene todos los archivos de PHPWord

En la raiz del proyecto c:\xampp\htdocs\examplesx\phpword-table1\ vamos a crear un archivo llamado index.php, donde vamos a escribir el codigo.

Código

El siguiente codigo sirve para crear un documento de word y crear la tabla con datos.

<?php
require_once 'vendor/autoload.php';

$word = new \PhpOffice\PhpWord\PhpWord();

$section1 = $word->AddSection();
$section1->addText("TABLA EN WORD",array("size"=>22,"bold"=>true,"align"=>"right")); // Agregamos un titulo al documento con tamaño 22 y en negritas

$styleTable = array('borderSize' => 6, 'borderColor' => '888888', 'cellMargin' => 40); // el borde de la tabla de 6px, color de borde = #888 , ...
$styleFirstRow = array('borderBottomColor' => '0000FF', 'bgColor' => '66BBFF');
$word->addTableStyle('table1', $styleTable,$styleFirstRow);

$table1 = $section1->addTable("table1"); // creamos la tabla
$table1->addRow(); // agregamos una fila a la tabla
$table1->addCell()->addText("Nombre"); // agregamos la columna 1
$table1->addCell()->addText("Direccion"); // agregamos la columna 2
$table1->addCell()->addText("Email"); // agregamos la columna 3
$table1->addCell()->addText("Telefono"); // agregamos la columna 4

$table1->addRow(); // agregamos otra fila pra los datos
$table1->addCell()->addText("Airan Osmar"); // fila 2, columna 1, debe coincidir con la columna de la fila anterior
$table1->addCell()->addText(""); // fila 2, columna 2, debe coincidir con la columna de la fila anterior
$table1->addCell()->addText(""); // fila 2, columna 3, debe coincidir con la columna de la fila anterior
$table1->addCell()->addText(""); // fila 2, columna 4, debe coincidir con la columna de la fila anterior

$table1->addRow();
$table1->addCell()->addText("Angel Torres");
$table1->addCell()->addText("");
$table1->addCell()->addText("");
$table1->addCell()->addText("");

$table1->addRow();
$table1->addCell()->addText("Agustin Ramos");
$table1->addCell()->addText("");
$table1->addCell()->addText("evilnapsis@gmail.com");
$table1->addCell()->addText("");

$filename = "myfile.docx"; // Nombre del archivo que se va a crear
$word->save($filename,"Word2007"); // Guardamos el archivo

header("Content-Disposition: attachment; filename=$filename"); // Vamos a dar la opcion para descargar el archivo
readfile($filename);  // leemos el archivo para que se "descargue"
unlink($filename); // eliminamos el archivo del servidor
?>

Le agregue comentarios al código para que se pueda entender cada linea, la estructura del documento y de la tabla es fácil.

Hay que tener mucho cuidado cuando creamos las filas y las columnas  ya que la forma en que se agregan puede causar confusión, primero se crea la fila o row y después se agregan las columnas para esa fila, después de agregar N columnas necesarias se crea otra fila y las columnas siguientes deben coincidir en el orden de las primeras columnas, y así sucesivamente en las siguientes filas/columnas.

Resultado

El resultado es el siguiente:

Descargar

A continuación les dejo el paquete de descarga.

Link: https://drive.google.com/file/d/1pSbbTvjIQp4Ftyg2ghRhhv-JZfku8MDG/view

Con el paquete de descarga no es necesario usar composer ya que les incluyo el código de ejemplo junto con la librería PHPWord ya instalada.

Para instalarlo solo deben copiar los archivos a su carpeta c:\xampp\htdocs y ejecutar en el navegador http://localhost/phpword-table1/

Les invito a mi nuevo sitio http://codulous.com/ donde encontraran mas ejemplos de programación sobre diferentes temas.

Agustin Ramos

Desarrollador de Software

Leave a Reply