Skip to content

Comunidade Portuguesa de PHP

Narrow screen resolution Wide screen resolution Increase font size Decrease font size Default font size default color black color cyan color green color red color
Home arrow Fórum
<< Início < Anterior | 1 2 | Seguinte > Final >>
brunovaz
Júnior
 
Exportação de dados em MySQL -> xml, xls, csv - 2007/03/03 23:00
Fica aqui um script que precisei de desenvolver para exportar dados de MySQL para vários formatos, e que pode vir a dar jeito a alguém:

Code:

 <?php /*     AUTOR: Bruno Vaz     MAIL: bruno.vaz@netvisao.pt          NOTAS:     Utilização livre em regime de código aberto.  */ class Export {     //     // EXPORTAR DADOS PARA UMA FOLHA DE EXCEL     //     function xls $server $database $user $password $query $filename) {              $connection mysql_pconnect$server $user $password ) or trigger_error(mysql_error(), E_USER_ERROR);                  mysql_select_db $database );         $recordset mysql_query $query $connection ) or die ( mysql_error ( ) );         $columns mysql_num_fields $recordset ); // numeros de colunas a criar         $rows mysql_num_rows $recordset ); // numero de linhas a criar                  $row_recordset mysql_fetch_array $recordset MYSQL_NUM );                  // MIME-TYPE do ficheiro + nome do ficheiro a criar         header('Content-type: application/x-msdownload');         header('Content-Disposition: attachment; filename='.$filename.'.xls');         header('Pragma: no-cache');         header('Expires: 0');                  $xls_file "\n";                      // TITULOS DAS COLUNAS ATRAVES DOS NOMES DOS CAMPOS QUE ESTAO NO 'QUERY'             for ( $i=$i $columns $i++ ) {                 $xls_file .= strtoupper mysql_field_name $recordset $i ) ) . "\t";             }                      $xls_file .= "\n";                          for ( $i=$i $rows $i++ ) { // CRIACAO DAS LINHAS                 $xls_file .= "\n";                     for ( $n=$n $columns $n++ ) { // CRIACAO DAS COLUNAS                         $xls_file .= $row_recordset[$n]."\t";                      }                 $row_recordset mysql_fetch_array $recordset MYSQL_NUM );                             }                      print "$xls_file"// EXPORTAR O FICHEIRO DE DADOS EXCEL (PARA ABERTURA OU DOWNLOAD)              }          //     // EXPORTAR DADOS PARA UM FICHEIRO 'CSV'     //     function csv $server $database $user $password $query $filename $delimeter) {              $connection mysql_pconnect$server $user $password ) or trigger_error(mysql_error(), E_USER_ERROR);                  mysql_select_db $database );         $recordset mysql_query $query $connection ) or die ( mysql_error ( ) );         $fields mysql_num_fields $recordset );         $rows mysql_num_rows $recordset );                  $row_recordset mysql_fetch_array $recordset MYSQL_NUM );                  // MIME-TYPE do ficheiro + nome do ficheiro a criar         header('Content-type: application/csv');         header('Content-Disposition: attachment; filename='.$filename.'.csv');         header('Pragma: no-cache');         header('Expires: 0');                  $csv_file "";                      // TITULOS DOS CAMPOS ATRAVES DOS NOMES DOS CAMPOS QUE ESTAO NO 'QUERY'             for ( $i=$i $fields $i++ ) {                 $csv_file .= strtoupper mysql_field_name $recordset $i ) ) . $delimeter;             }             // EXPORTACAO DOS DADOS             for ( $i=$i $rows $i++ ) {                 $csv_file .= "\n";                     for ( $n=$n $fields $n++ ) {                         $csv_file .= $row_recordset[$n] . $delimeter;                     }                 $row_recordset mysql_fetch_array $recordset MYSQL_NUM );                             }                      print "$csv_file"// EXPORTAR O FICHEIRO DE DADOS EM CSV (PARA ABERTURA OU DOWNLOAD)              }     //     // EXPORTAR DADOS PARA UM FICHEIRO 'XML' DE ABERTURA EM EXCEL     //     function xml_excel $server $database $user $password $query $filename ) {              $connection mysql_pconnect$server $user $password ) or trigger_error(mysql_error(), E_USER_ERROR);                  mysql_select_db $database );         $recordset mysql_query $query $connection ) or die ( mysql_error ( ) );         $cells mysql_num_fields $recordset );         $rows mysql_num_rows $recordset );                  $row_recordset mysql_fetch_array $recordset MYSQL_NUM );                  // MIME-TYPE do ficheiro + nome do ficheiro a criar         header("Content-type: text/xml");         header('Content-Disposition: attachment; filename='.$filename.'.xml');         header('Pragma: no-cache');         header('Expires: 0');         $xml_file "    <?xml version='1.0' encoding='UTF-8'?>\n                             <ss:Workbook xmlns<img src="http://www.php-pt.com/components/com_joomlaboard/emoticons/dizzy.png" alt="" style="vertical-align:  middle;border:0px;" />s='urn<img src="http://www.php-pt.com/components/com_joomlaboard/emoticons/ dizzy.png" alt="" style="vertical-align: middle;border:0px;" />chemas-microsoft-com:office<img src=" http://www.php-pt.com/components/com_joomlaboard/emoticons/dizzy.png" alt="" style="vertical-align:  middle;border:0px;" />preadsheet'>\n                                 <ss<img src="http://www.php-pt.com/components/com_joomlaboard/emoticons/dizzy.png" alt="" style="vertical-align: middle;border:0px;" />tyles>\n                                     <ss<img src="http://www.php-pt.com/components/com_joomlaboard/emoticons/dizzy.png" alt="" style="vertical-align: middle;border:0px;" />tyle ss:ID='1'>\n                                         <ss:Font ss:Bold='1'/>\n                                     </ss<img src="http://www.php-pt.com/components/com_joomlaboard/emoticons/dizzy.png" alt="" style="vertical-align: middle;border:0px;" />tyle>\n                                 </ss<img src="http://www.php-pt.com/components/com_joomlaboard/emoticons/dizzy.png" alt="" style="vertical-align: middle;border:0px;" />tyles>\n                                 <ss:Worksheet ss:Name='Sheet1'>\n                                     <ss:Table>\n                                         <ss:Row ss<img src="http://www.php-pt.com/components/com_joomlaboard/emoticons/dizzy.png" alt="" style="vertical-align: middle;border:0px;" />tyleID='1'>\n";                                                      // TITULOS DAS COLUNAS EM MAIUSCULAS, ATRAVES DOS NOMES DOS CAMPOS QUE ESTAO NO 'QUERY'             for ( $i=0 ; $i < $cells ; $i++ ) {                 $xml_file .= "    <ss:Cell>\n                                     <ss<img src="http://www.php-pt.com/components/com_joomlaboard/emoticons/laughing.png" alt="" style="vertical-align: middle;border:0px;" />ata ss:Type='String'>".strtoupper ( mysql_field_name ( $recordset , $i ) ) . "</ss<img src="http://www.php-pt.com/components/com_joomlaboard/emoticons/laughing.png" alt="" style="vertical-align: middle;border:0px;" />ata>\n                                 </ss:Cell>\n";             }         $xml_file .= "</ss:Row>\n";                                                              // EXPORTACAO DE TODOS OS DADOS DO QUERY             for ( $i=0 ; $i < $rows ; $i++ ) {                 $xml_file .= "<ss:Row>\n";                     for ( $n=0 ; $n < $cells ; $n++ ) {                         $xml_file .= "    <ss:Cell>\n                                             <ss<img src="http://www.php-pt.com/components/com_joomlaboard/emoticons/laughing.png" alt="" style="vertical-align: middle;border:0px;" />ata ss:Type='String'>".$row_recordset[$n]."</ss<img src="http://www.php-pt.com/components/com_joomlaboard/emoticons/laughing.png" alt="" style="vertical-align: middle;border:0px;" />ata>\n                                         </ss:Cell>\n";                     }                 $xml_file .= "</ss:Row>\n";                 $row_recordset = mysql_fetch_array ( $recordset , MYSQL_NUM );                             }                      $xml_file .= "            </ss:Table>\n                             </ss:Worksheet>\n                         </ss:Workbook>\n";                                      print "$xml_file"; // EXPORTAR O FICHEIRO DE DADOS EM CSV (PARA ABERTURA OU DOWNLOAD)              }     //     // EXPORTAR DADOS PARA UM FICHEIRO 'XML' PURO     //     function xml_pure ( $server , $database , $user , $password , $query , $filename ) {              $connection = mysql_pconnect( $server , $user , $password ) or trigger_error(mysql_error(),  E_USER_ERROR);                  mysql_select_db ( $database );         $recordset = mysql_query ( $query , $connection ) or die ( mysql_error ( ) );         $cells = mysql_num_fields ( $recordset );         $rows = mysql_num_rows ( $recordset );                  $row_recordset = mysql_fetch_array ( $recordset , MYSQL_NUM );                  // MIME-TYPE do ficheiro + nome do ficheiro a criar         header("Content-typetext/xml");         header('Content-Disposition: attachment; filename='.$filename.'.xml');         header('Pragma: no-cache');         header('Expires: 0');         $xml_file = "    <?xml version='1.0' encoding='UTF-8'?>\n                             <Workbook>\n                                 <Worksheet name='sheet'>\n                                     <Row>\n";                                                      // TITULOS DAS COLUNAS EM MAIUSCULAS, ATRAVES DOS NOMES DOS CAMPOS QUE ESTAO NO 'QUERY'             for ( $i=0 ; $i < $cells ; $i++ ) {                 $xml_file .= "    <Cell>".strtoupper ( mysql_field_name ( $recordset , $i ) ) . "</ Cell>\n";             }         $xml_file .= "</Row>\n";                                                              // EXPORTACAO DE TODOS OS DADOS DO QUERY             for ( $i=0 ; $i < $rows ; $i++ ) {                 $xml_file .= "<Row>\n";                     for ( $n=0 ; $n < $cells ; $n++ ) {                         $xml_file .= "    <Cell>".$row_recordset[$n]."</Cell>\n";                     }                 $xml_file .= "</Row>\n";                 $row_recordset = mysql_fetch_array ( $recordset , MYSQL_NUM );                             }                      $xml_file .= "        </Worksheet>\n                         </Workbook>\n";                                      print "$xml_file"; // EXPORTAR O FICHEIRO DE DADOS EM CSV (PARA ABERTURA OU DOWNLOAD)              } } // // INTERLIGACAO DE OPCOES // if ( isset ( $_GET[ 'map' ] ) ) {     switch ( $_GET[ 'map' ] ) {                  case "xls" :                      $export = new Export;                     $export->xls ( "localhost" , "base_dados" , "utilizador" , "password" , "SELECT  * FROM tabela" , "ficheiro_excel" );                     break;                              case "csv" :                     $export = new Export;                     $export->csv ( "localhost" , "base_dados" , "utilizador" , "password" , "SELECT  * FROM tabela" , "ficheiro_csv" , ";");                     break;                              case "xml_excel" :                     $export = new Export;                     $export->xml_excel ( "localhost" , "base_dados" , "utilizador" , "password" , " SELECT * FROM tabela" , "ficheiro_xml_excel" );                     break;                              case "xml_pure" :                     $export = new Export;                     $export->xml_pure ( "localhost" , "base_dados" , "utilizador" , "password" , " SELECT * FROM tabela" , "ficheiro_xml_pure" );                     break;                          }      } ?>



para utilizarem a classe, basta criar uma hiperligação do tipo
Code:

 <a href='export.php?map=xls' target='_blank'>download de ficheiro em excel</a>

.

Na utilização de ficheiro em csv, deve-se especificar qual o delimitador a utilizar, para o excel em PT deve-se utilizar ";", porque a "," não é assumida por defeito devido ao nosso formato de valores conter virgulas para separação dos cêntimos. Já o ";" funciona a 100%.

Espero que dê jeito a alguém...

Cumps
Bruno Vaz

Post edited by: brunovaz, at: 2007/03/07 07:19
The administrator has disabled public write access.

brunovaz
Júnior
 
Re:Exportação de dados em MySQL -> xml, xls, csv - 2007/03/03 23:03
Os emoticons estão a "faralhar" a exportação para "xml_excel", atenção aos links dos emoticons.
The administrator has disabled public write access.

msimoes
Admin
 
Re:Exportação de dados em MySQL -> xml, xls, csv - 2007/03/06 21:31
Os smiles, por erro do Forum, apenas são apresentados no preview no posto concretamente dito já não são apresentados.

É só para assustar
The administrator has disabled public write access.

brunovaz
Júnior
 
Re:Exportação de dados em MySQL -> xml, xls, csv - 2007/03/07 00:19
nops.... se verificares bem, os smiles não aparecem, mas estão a aparecer os links para os ditos smiles. Será bug do sistema de foruns Joomla !?
The administrator has disabled public write access.

joao.sobrinho
Iniciado
 
Re:Exportação de dados em MySQL -> xml, xls, csv - 2009/05/08 14:33
alguém já utilizou este código e tentou abrir o ficheiro com o Office num Mac ?

estou a ter problemas com o encoding... já tentei alterar o cabeçalho, usar a função utf8_encode, sempre sem sucesso.

No Windows, e no OpenOffice(no mac) ele abre bem...
The administrator has disabled public write access.

Rockas
Iniciado
 
Re:Exportação de dados em MySQL -> xml, xls, csv - 2009/06/18 11:23
Boa tarde a todos.
peço desculpa pela minha ignorância mas tenho tentado usar este código e consegui... o meu problem prende-se com o facto de eu querer aplicar algo como:

Code:

 $export->xls "localhost" "database" "user" "password" "SELECT * FROM tabela WHERE filtro = %s ORDER BY Ref ASC" "ficheiro_excel" );



e recebo uma mensagem de erro:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s ORDER BY Ref ASC' at line 1

Alguém me sabe dizer como resolver isto?

Muito obrigado
The administrator has disabled public write access.

<< Início < Anterior | 1 2 | Seguinte > Final >>

Entrada






Esqueceu a senha?
Sem conta? Criar Conta!

Newsletter

Subscreva a nossa newsletter.