Rodrigo Régis

Exportar para word com PHP

by Rodrigo Régis Palmeira on jul.09, 2009, under PHP

Olá
No meu último post eu expliquei como exportar dados formatados em html para o excel.
Hoje vou explicar como exportar para word.
Na verdade, só vamos mudar a extensão do arquivo a ser exportado e o parâmetro application do header.

Vamos forçar o download do arquivo através da função header() que é nativa do PHP.

Coloquei a function como método estático (igual ao método toXLS) dentro de uma classe (Util.php) para que a coleção de funções de uso geral fiquem mais organizadas e acessíveis.

Segue o método (Util.php):

<?php
class Util
{
	/**
	 * @author Rodrigo Régis Palmeira
	 * @link http://www.rodrigoregis.com.br
	 * @param string $html
	 * @return file.doc
	 */
  public static function toDOC($html, $nome = 'file.doc', $destino = null)
  {
  	if (!$destino)
  	{
  		header("Content-type: application/vnd.ms-word");
  		header("Content-type: application/force-download");
  		header("Content-Disposition: attachment; filename=\"{$nome}\"");
  		header("Pragma: no-cache");
  		echo $html;
  		exit();
  	}
  	else
  	{
  		file_put_contents($destino.'/'.$nome, $html);
  		exit();
  	}
  }
}
?>

Vamos implementá-lo (relatorio.php):

<?php
require('Util.php');
$html = <<<HTML
<table width='90%' border='1'>
	<tr>
		<th>Título </th>
		<th>Título 2</th>
		<th>Título 3</th>
	</tr>
	<tr>
		<td>Dados 1</td>
		<td>Dados 2</td>
		<td>Dados 3</td>
	</tr>
	<tr>
		<td>Dados 4</td>
		<td>Dados 5</td>
		<td>Dados 6</td>
	</tr>
	<tr>
		<td>Dados 7</td>
		<td>Dados 8</td>
		<td>Dados 9</td>
	</tr>
</table>
HTML;

//Chamando o método
Util::toDOC($html);
?>

Por hoje é só!

Espero ter ajudado!

:, , , , ,

15 Comments for this entry

  • Rodrigo Régis Palmeira

    Olá!
    Você pode salvar o arquivo em disco sim!
    Segue uma atualização da classe:

      public static function toDOC($html, $nome = 'file.doc', $destino = null)
      {
      	if (!$destino)
      	{
      		header("Content-type: application/vnd.ms-word");
      		header("Content-type: application/force-download");
      		header("Content-Disposition: attachment; filename=\"{$nome}\"");
      		header("Pragma: no-cache");
      		echo $html;
      	}
      	else
      	{
      		file_put_contents($destino.'/'.$nome, $html);
      	}
      }
    
  • Rodrigo Régis Palmeira

    Provavelmente existe sim!
    Só é preciso pesquisar um pouco mais sobre header!
    Uma outra opção seria você salvar o arquivo em disco e abrí-lo após isso!

  • Hideki

    Parabens pelo post e o codigo funcionou certinho.
    Eu tava precisando desse sistema msm soque ao invés dele salvar no meu pc tava querendo q ele fosse salvo no servidor de hospedagem ou ser enviado como anexo pela função mail().

    Vc saberia como fazer um dos dois ?

    Abraço

  • wander

    Ola Rodrigo, excelente esta função, estou desenvolvendo uma proposta técnica que é montada no php, depois exportada para o word, acredito que vai dar certo, mas a duvida é a seguinte:
    Gostaria que quando clicar fosse direto para o word sem ter que aparecer aquele pop perguntando abrir ou download, se existe essa possibilidade , como faço ?
    Obrigado desde já.

  • Sanderson

    Rodrigo, bacana d+, funciona perfeitamente.
    Valeu!!!

  • Carlitos

    Muito bom mesmo, estava procurando isso! Abraço!

  • Rodrigo Régis Palmeira

    Olá!
    Nunca precisei de algo que não pudesse resolver com o HTML + CSS.
    Já usei FPDF e me atendeu bem (apesar de eu preferir DOMPDF).

    Vou dar uma pesquisada e se encontrar algo parecido com o que você precisa eu posto aqui ok?

  • anderceo

    Olá Régis. Antes de + nada, parabéns pelo post, ajudou muito. Agora tenho um novo problema: preciso exportar algo com mais recursos de formatação para Word. Precisei fazer algo parecido para PDF e o FPDF serviu. Saberia me dizer se existe algo parecido que exporte para Word? Grande abraço.

  • Rodreego

    Cara parabéns. Uma mão na roda esse seu script. Não estava precisando agora, mas vou precisar no futuro. Valeu

  • Rodrigo Régis Palmeira

    Por nada! É sempre bom ajudar (e nunca se sabe quando vamos precisar tbm).

    São dois aquivos diferentes.
    O primeiro (o arquivo com a classe) eu costumo chamar de Util.php (tem jente que prefere Util.class.php) e é uma classe onde geralmente eu guardo meus métodos que podem ser utilizadas em qualquer parte do sistema.

    O segundo arquivo você pode chamar da forma que quiser, porém, você não pode se esquecer de colocar um require(‘Util.php’) no topo do arquivo.

    Vou adicionar essa parte do código no post p/ ficar mais claro.

  • Fernando

    Primeiramente, obrigado pela resposta.
    Tenho dúvida na hora de gerar os arquivos. São dois arquivos diferentes? Ou junta?
    Salvo com qual nome?

  • Rodrigo Régis Palmeira

    Me diga o que aconteceu!
    Retornou algum erro?
    Qual versão do word vc tem?
    Qual sua versão do PHP e qual seu Sistema Operacional?

  • Fernando

    Não consegui utilizar.

    O que deve ser feito? Salvar os arquivos com que nome?

    Abraços e obrigado

  • Fábio Alves

    Ótima solução.
    simples e eficiente.

    abraço

  • Marcelo

    Ou, legal esse post heim régis, tava procurando algo parecido para aplicar no sistema de agenda.

    Vou testar aqui… vlw.

Leave a Reply

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Blogroll

A few highly recommended websites...

Archives

All entries, chronologically...