Sincronizar Docs (word, excel)

Boas…

Deparei-me recentemente com a elaboração de um projecto em SC onde a emissão de relatórios tinha de ser em Word.
Inicialmente, fiquei apreensivo pela trabalheira que iria dar, e principalmente sendo uma exportação que ainda não tinha efectuado,
apesar do SC ter a exportação para RTF.
Mas a implicação aqui neste processo teria de ser elaborado um relatório personalizado, onde o SC através de várias tabelas teria de escrever num documento
WORD.
Após alguma pesquisa decobri um produto que me resolveu desde logo o meu problema, e consegui criar documentos com excelente
perfomance em WORD.
O produto é free e chama-se PHPWord e pode ser baixado em http://phpword.codeplex.com/ onde tem um pequeno manual de ajuda em
http://phpword.codeplex.com/releases/view/49543#DownloadId=138036
Possui logo a partida um exemplo de como podemos aplicar o codigo.
No SC a instalação aconselho a colocar dentro do directorio
…/apps/nomedoprojecto/PHPWord
na definição do PATH no dicheiro PHPWord.php
/** PHPWORD_BASE_PATH */
if(!defined(‘PHPWORD_BASE_PATH’)) {
define(‘PHPWORD_BASE_PATH’, ‘…/PHPWord/’);
require PHPWORD_BASE_PATH . ‘PHPWord/Autoloader.php’;
PHPWord_Autoloader::Register();
}

Neste Exemplo cloquei o botão PHP para elaborar um relatorio de varias tabelas:

$wnumero={numero};

// Include the PHPWord.php, all other classes were loaded by an autoloader
chdir(’…/PHPWord’);
require_once ‘PHPWord.php’;

// Create a new PHPWord Object
$PHPWord = new PHPWord();
$PHPWord->setDefaultFontName(‘Arial Narrow’);
$PHPWord->setDefaultFontSize(10);
// Every element you want to append to the word document is placed in a section. So you need a section:

$section = $PHPWord->createSection();
$fontStyle = array (‘bold’ => true);
$paraStyle = array (‘align’ => ‘center’);
$header = $section->createHeader();
$imageStyle = array(‘width’=>50, ‘height’=>50, ‘align’=>‘center’);
$header->addImage(‘logocmrb2.jpg’, $imageStyle);
$header->addPreserveText(‘Câmara Municipal da Ribeira Brava’,$fontStyle,$paraStyle);

// report footer
$paraStyle = array(‘align’ => ‘center’);
$testVariable = 'Imp.04|DAS.CMRB ';
$footer = $section->createFooter();

$footer->addPreserveText( $testVariable.’{ DATE @“d, MMMM yyyy” }’, null, $paraStyle );

// After creating a section, you can append elements:
$fontStyle = array (‘bold’ => true);
$paraStyle = array (‘align’ => ‘center’);
$section->addText( ‘RELATÓRIO SOCIAL’, $fontStyle, $paraStyle );
$PHPWord->setDefaultFontSize(8);
$styleTable = array(‘borderColor’=>‘006699’,‘borderSize’=>6, ‘cellMarginTop’=>100);
$styleFirstRow = array(‘bgColor’=>’ #F0F0F0’);
$PHPWord->addTableStyle(‘myTable’, $styleTable, $styleFirstRow);

$table = $section->addTable(‘myTable’);
$table->addRow(50);
$table->addCell(20000)->addText(‘I - Identificação do Munícipe’, $fontStyle, $paraStyle);

$styleTable = array(‘borderColor’=>‘006699’,‘borderSize’=>6, ‘cellMarginTop’=>100);
$styleFirstRow = array(‘bgColor’=>’#FFFFFF ');
$PHPWord->addTableStyle(‘myTable2’, $styleTable, $styleFirstRow);

$table = $section->addTable(‘myTable2’);
$table->addRow(50);
$table->addCell(2000)->addText(‘Nome:’);
$table->addCell(20000)->addText({nome});
$table->addRow(50);
$table->addCell(2000)->addText(‘Morada:’);
$table->addCell(20000)->addText({morada}.", “.{freguesia}.”, “.{codpostal}.”-".{cpostal});
$table->addRow(50);
$table->addCell(2000)->addText(‘Contactos:’);
$table->addCell(20000)->addText(“Telefones: “.{telefones}.”, EMail:”.{email});

$section->addText(" ",$paraStyle);

$styleTable = array(‘borderColor’=>‘006699’,‘borderSize’=>6, ‘cellMarginTop’=>100);
$styleFirstRow = array(‘bgColor’=>’ #F0F0F0’);
$PHPWord->addTableStyle(‘myTable’, $styleTable, $styleFirstRow);

$table = $section->addTable(‘myTable’);
$table->addRow(50);
$table->addCell(20000)->addText(‘II - Composição do Agregado Familiar’, $fontStyle, $paraStyle);

$PHPWord->setDefaultFontSize(8);
$styleTable = array(‘borderColor’=>‘006699’,‘borderSize’=>6, ‘cellMarginTop’=>100);
$styleFirstRow = array(‘bgColor’=>’#FFFFFF ');
$PHPWord->addTableStyle(‘myTable2’, $styleTable, $styleFirstRow);

$table = $section->addTable(‘myTable2’);
$table->addRow(50);
$table->addCell(8000)->addText(‘Nome’, $fontStyle, $paraStyle);
$table->addCell(3000)->addText(‘Data Nasc.’, $fontStyle, $paraStyle);
$table->addCell(2000)->addText(‘Parentesco’, $fontStyle, $paraStyle);
$table->addCell(2000)->addText(‘Est.Civil’, $fontStyle, $paraStyle);
$table->addCell(2000)->addText(‘NºB.I.’, $fontStyle, $paraStyle);
$table->addCell(2000)->addText(‘NIF’, $fontStyle, $paraStyle);
$table->addCell(2000)->addText(‘Habilitações’, $fontStyle, $paraStyle);
$table->addCell(2000)->addText(‘Ocupação’, $fontStyle, $paraStyle);

$query = mysql_query(“SELECT nome,datanasc,parentesco,estadocivil,bi,nif,habilitacoes,ocupacao FROM agregadofamiliar where registo=$wnumero”);
while($array = mysql_fetch_array($query))
{
$table->addRow(50);
$table->addCell(8000)->addText( $array[‘nome’]);
$table->addCell(3000)->addText( $array[‘datanasc’]);
$table->addCell(2000)->addText( $array[‘parentesco’]);
$table->addCell(2000)->addText( $array[‘estadocivil’]);
$table->addCell(2000)->addText( $array[‘bi’]);
$table->addCell(2000)->addText( $array[‘nif’]);
$table->addCell(2000)->addText( $array[‘habilitacoes’]);
$table->addCell(2000)->addText( $array[‘ocupacao’]);

}
$section->addText(" ",$paraStyle);
$styleTable = array(‘borderColor’=>‘006699’,‘borderSize’=>6, ‘cellMarginTop’=>100);
$styleFirstRow = array(‘bgColor’=>’ #F0F0F0’);
$PHPWord->addTableStyle(‘myTable’, $styleTable, $styleFirstRow);
$table = $section->addTable(‘myTable’);
$table->addRow(50);
$table->addCell(20000)->addText(‘III-Situação Socioeconómica e Familiar’, $fontStyle, $paraStyle);

$styleTable = array(‘borderColor’=>‘006699’,‘borderSize’=>6, ‘cellMarginTop’=>100);
$styleFirstRow = array(‘bgColor’=>’#FFFFFF ');
$PHPWord->addTableStyle(‘myTable2’, $styleTable, $styleFirstRow);

$table = $section->addTable(‘myTable2’);
$table->addRow(50);
$table->addCell(2000)->addText(‘Data’, $fontStyle, $paraStyle);
$table->addCell(8000)->addText(‘Nome’, $fontStyle, $paraStyle);
$table->addCell(2000)->addText(‘Rendimento’, $fontStyle, $paraStyle);
$table->addCell(2000)->addText(‘Despesa’, $fontStyle, $paraStyle);
$table->addCell(2000)->addText(‘Valor Mensal’, $fontStyle, $paraStyle);

$query = mysql_query(“SELECT data,nome,rendimento,despesa,valormensal FROM rendimentosdespesas where registo=$wnumero”);
while($array = mysql_fetch_array($query))
{
$table->addRow(50);
$table->addCell(2000)->addText( $array[‘data’]);
$table->addCell(8000)->addText( $array[‘nome’]);
$table->addCell(2000)->addText( $array[‘rendimento’]);
$table->addCell(2000)->addText( $array[‘despesa’]);
$table->addCell(2000)->addText( $array[‘valormensal’]);

}
$section->addText(" ");
$styleTable = array(‘borderColor’=>‘006699’,‘borderSize’=>6, ‘cellMarginTop’=>100);
$styleFirstRow = array(‘bgColor’=>’#FFFFFF ');
$PHPWord->addTableStyle(‘myTable2’, $styleTable, $styleFirstRow);

$table = $section->addTable(‘myTable2’);
$table->addRow(50);
$table->addCell(8000)->addText(‘Total dos Rendimentos do Agregado:’, $fontStyle, $paraStyle);
$table->addCell(2000)->addText(’.00€’, $fontStyle, $paraStyle);

$section->addText(" ");
$styleTable = array(‘borderColor’=>‘006699’,‘borderSize’=>6, ‘cellMarginTop’=>100);
$styleFirstRow = array(‘bgColor’=>’#FFFFFF ');
$PHPWord->addTableStyle(‘myTable2’, $styleTable, $styleFirstRow);

$table = $section->addTable(‘myTable2’);
$table->addRow(500);
$table->addCell(20000)->addText(’ descrever dinâmica familiar no que respeita à atitude face ao trabalho, escola e prestação de cuidados a dependentes, organização familiar, apoios de outras entidades, etc.’);

$PHPWord->setDefaultFontSize(8);
$section->addText(" ");
$styleTable = array(‘borderColor’=>‘006699’,‘borderSize’=>6, ‘cellMarginTop’=>100);
$styleFirstRow = array(‘bgColor’=>’ #F0F0F0’);
$PHPWord->addTableStyle(‘myTable’, $styleTable, $styleFirstRow);

$table = $section->addTable(‘myTable’);
$table->addRow(50);
$table->addCell(20000)->addText(‘IV - Situação Habitacional’, $fontStyle, $paraStyle);

$styleTable = array(‘borderColor’=>‘006699’,‘borderSize’=>6, ‘cellMarginTop’=>100);
$styleFirstRow = array(‘bgColor’=>’#FFFFFF ');
$PHPWord->addTableStyle(‘myTable2’, $styleTable, $styleFirstRow);

$table = $section->addTable(‘myTable2’);
$query = mysql_query(“SELECT tipohabitacao,reg_ocupacao,desc_tipologia,agua,luz,gas,esgotos,conservacao,acessibilidade,mobi_electro,observacoes FROM situacaohabitacional where registo=$wnumero”);

while($array = mysql_fetch_array($query))
{
$table->addRow(50);
$table->addCell(22000)->addText( $array[‘tipohabitacao’].", “.$array[‘reg_ocupacao’].” Agua: “.$array[‘agua’].” Luz: “.$array[‘luz’].” Gás: “.$array[‘gas’].” Esgotos: “.$array[‘esgotos’].”, “.$array[‘conservacao’].”, “.$array[‘acessibilidade’].”, “.$array[‘mobi_electro’].”, ".$array[‘observacoes’]);

}
$section->addText(" ");
$table = $section->addTable(‘myTable’);
$table->addRow(50);
$table->addCell(20000)->addText(‘V-Conclusão’, $fontStyle, $paraStyle);

$styleTable = array(‘borderColor’=>‘006699’,‘borderSize’=>6, ‘cellMarginTop’=>100);
$styleFirstRow = array(‘bgColor’=>’#FFFFFF ');
$PHPWord->addTableStyle(‘myTable2’, $styleTable, $styleFirstRow);

$table = $section->addTable(‘myTable2’);
$table->addRow(500);
$table->addCell(20000)->addText(’ ', $fontStyle, $paraStyle);

$section->addText(" “);
$section->addText(” ");
// report footer
$paraStyle = array(‘align’ => ‘center’);
$testVariable = 'Ribeira Brava, ';
$xdata=date(‘d-m-Y’);
$section->addText( $testVariable.$xdata, null, $paraStyle );

// After creating a section, you can append elements:
$fontStyle = array (‘bold’ => false);
$paraStyle = array (‘align’ => ‘center’);
$section->addText( ‘A Assistente Social,’, $fontStyle, $paraStyle );
$section->addText(" ");

$section->addText( ‘_______________________’, $fontStyle, $paraStyle );
$section->addText( ‘(Ana Nunes)’, $fontStyle, $paraStyle );

// At least write the document to webspace:
$objWriter = PHPWord_IOFactory::createWriter($PHPWord, ‘Word2007’);
$objWriter->save(’…/documentos_word/Relatorio.doc’);

// ABrir o DOCUMENTO
header(“Location: http://www.???/???/documentos_word/Relatorio.doc”);

RELATÓRIO SOCIAL

I - Identificação do Munícipe

Nome:

Maria Albertina De Andrade

Morada:

Rua 1º De Maio Nº 10, RIBEIRA BRAVA, 9350-213-RIBEIRA BRAVA

Contactos:

Telefones: 291952, EMail:albertina@sapo.pt

II - Composição do Agregado Familiar

Nome

Data Nasc.

Parentesco

Est.Civil

NºB.I.

NIF

Habilitações

Ocupação

rui

1980-12-15

FILHO

SOLTEIRO

III-Situação Socioeconómica e Familiar

Data

Nome

Rendimento

Despesa

Valor Mensal

2012-05-04

rui

PENSÃO

120.00

Total dos Rendimentos do Agregado:

.00¤

descrever dinâmica familiar no que respeita à atitude face ao trabalho, escola e prestação de cuidados a dependentes, organização familiar, apoios de outras entidades, etc.

IV - Situação Habitacional

SIMPLES, GERAL Agua: S Luz: S Gás: S Esgotos: S, , , ,

V-Conclusão

Ribeira Brava, 07-05-2012

A Assistente Social,


(Ana Nunes)