Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!


Exportar para word com PHP

Brasília, 9 de julho de 2009 por Rodrigo Régis Palmeira

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!

Exportar para excel com PHP

Brasília, 9 de julho de 2009 por Rodrigo Régis Palmeira

Olá
Hoje vou postar um método muito interessante (e que pouca gente sabe) para exportar seu conteúdo HTML para uma planilha em excel (.xls).

Trata-se apenas de forçar o download do arquivo através da função header() que é nativa do PHP.

Coloquei a function como método estático 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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
class Util
{
	/**
	 * @author Rodrigo Régis Palmeira
	 * @link http://www.rodrigoregis.com.br
	 * @param string $html
	 * @return file.xls
	 */
	public static function toXLS($html)
	{
		header("Content-type: application/vnd.ms-excel");
		header("Content-type: application/force-download");
		header("Content-Disposition: attachment; filename=file.xls");
		header("Pragma: no-cache");
		echo $html;
		exit();
	}
}
?>

Agora veja como é fácil a aplicação:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?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::toXLS($html);
?>

Por hoje é só!

Espero ter ajudado!

Trabalhando com datas úteis em php

Brasília, 6 de julho de 2009 por Rodrigo Régis Palmeira

Olá!

Hoje eu vou publicar funções muito úteis no dia-a-dia: Somar datas considerando dias úteis.

Obs.:  Serão considerados dias não úteis apenas os sábados, domingos e feriados nacionais.

Os feriados nacionais são em sua maioria fixos (ex.: 01/05, 07/09, 02/11) e existem alguns feriados “móveis” (ex.: carnaval, páscoa, corpus christi) que são baseados no feriado da páscoa.

Existe uma função nativa do php para retornar a data da páscoa do ano informado (easter_date) que ajuda muito na hora de descobrir os feriados nacionais, mas se você não tiver essa função disponível no seu servidor, então existe uma outra opção. Trata-se de um algorítmo criado em 532 D.C. para descobrir a data da páscoa do ano informado que está postado abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
/**
 * @param string|int $Year
 * Displays <a href="http://br.php.net/easter_date">php.net</a>
 * @link http://br.php.net/easter_date
 */
function retornarPascoa($Year)
{
	/*
	G is the Golden Number-1
	H is 23-Epact (modulo 30)
	I is the number of days from 21 March to the Paschal full moon
	J is the weekday for the Paschal full moon (0=Sunday,
	1=Monday, etc.)
	L is the number of days from 21 March to the Sunday on or before
	the Paschal full moon (a number between -6 and 28)
	*/
 
	$G = $Year % 19;
	$C = (int)($Year / 100);
	$H = (int)($C - (int)($C / 4) - (int)((8*$C+13) / 25) + 19*$G + 15) % 30;
	$I = (int)$H - (int)($H / 28)*(1 - (int)($H / 28)*(int)(29 / ($H + 1))*((int)(21 - $G) / 11));
	$J = ($Year + (int)($Year/4) + $I + 2 - $C + (int)($C/4)) % 7;
	$L = $I - $J;
	$m = 3 + (int)(($L + 40) / 44);
	$d = $L + 28 - 31 * ((int)($m / 4));
	$y = $Year;
	$E = mktime(0,0,0, $m, $d, $y);
 
	return $E;
}
?>

Sabendo que dia é a páscoa, tudo fica mais fácil. Basta descobrir os outros feriados conforme abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
/**
* @author Rodrigo Régis Palmeira <regisbsb@gmail.com>
* @param string $ano - ano em que se quer calcular os feriados
* @return array com feriados nacionais do ano informado do ano (fixo e moveis)
*/
function retornarFeriados($ano)
{
	$dia = 86400;
	$datas = array();
	$datas['pascoa'] = easter_date($ano);
	$datas['sexta_santa'] = $datas['pascoa'] - (2 * $dia);
	$datas['carnaval'] = $datas['pascoa'] - (47 * $dia);
	$datas['corpus_cristi'] = $datas['pascoa'] + (60 * $dia);
 
	$feriados = array (
		'Ano Novo'						=> '01/01/'.date('Y'),
		'Carnaval'						=> date('d/m/Y',$datas['carnaval']),
		'Sexta-Feira Santa'				=> date('d/m/Y',$datas['sexta_santa']),
		'Páscoa'						=> date('d/m/Y',$datas['pascoa']),
		'Tiradentes'					=> '21/04/'.date('Y'),
		'Dia do Trabalhador'			=> '01/05/'.date('Y'),
		'Corpus Cristi'					=> date('d/m/Y',$datas['corpus_cristi']),
		'Dia da Independência'			=> '07/09/'.date('Y'),
		'Nossa Senhora de Aparecida'	=> '12/10/'.date('Y'),
		'Dia de Finados'				=> '02/11/'.date('Y'),
		'Proclamação da República'		=> '15/11/'.date('Y'),
		'Natal'							=>	'25/12/'.date('Y')
	);
	return $feriados;
}
?>

Depois disso, você só precisa informar quantos dias você quer somar, a partir de qual data e se deseja considerar dias úteis ou não:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
/**
 * @author Rodrigo Régis Palmeira <regisbsb@gmail.com>
 * @param int $soma - dias a serem somados
 * @param bolean $uteis - considera dias uteis - default false
 * @param date $data - data inicial válida - default date('d/m/Y')
 * @return string - data em formado d/m/Y
 */
function somarData($soma, $uteis = false, $data = null)
{
	$ar = explode("/",$data);
	if (!empty($ar[0]) && !empty($ar[1]) && !empty($ar[2]))
	{
		if (checkdate($ar[1],$ar[0],$ar[2]))
		{
			$dia = $ar[0];
			$mes = $ar[1];
			$ano = $ar[2];
		}
		else
		{
			return "Informe uma data válida!";
		}
	}
	else
	{
		$dia = date('d');
		$mes = date('m');
		$ano = date('Y');
	}
 
	if ($uteis)
	{
		$contDia = 0;
		$qtdDiasUteis = 0;
 
		while ($qtdDiasUteis < $soma)
		{
			$contDia++;
 
			if (($dias_da_semana = gmdate('w', strtotime('+'.$contDia.' day', mktime(0, 0, 0, $mes, $dia, $ano))) ) != '0' &&
				 $dias_da_semana != '6'  &&
				 (!in_array(date('d/m/Y', mktime(0, 0, 0, $mes, $dia + $contDia, $ano)),retornarFeriados($ano))))
			{
				$qtdDiasUteis++;
			}
		}
		$novaData = date("d/m/Y", mktime(0, 0, 0, $mes, $dia + $contDia, $ano));
	}
	else
	{
		$novaData = date("d/m/Y", mktime(0, 0, 0, $mes, $dia + $soma, $ano));
	}
 
	return $novaData;
}
?>

É isso!

Espero ter ajudado!

Novidade no ar

Brasília, 4 de julho de 2009 por Rodrigo Régis Palmeira

Olá!

Para quem não me conhece, eu sou o Rodrigo Régis Palmeira e a partir de hoje estarei partilhando experiências, dificuldades e conquistas (principalmente sobre PHP).

Toda visita será bem vinda e caso meus posts te deixem com dúvidas ou contenham divergências, não deixe de comentar ou até mesmo me enviar um email e eu esclarecerei e/ou corrigirei o que for necessário assim que possível.