Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola pessoal.
Bolei uma classe para exportar um query para excel.
Só que esta ocorrendo um erro que não estou conseguindo entender. Se eu imprimo a tabela no browser ela sai perfeita com todos os dados, agora quanto exporto para excel, os campos saem fora de ordem e também faltando alguns.
Deem uma olhada please:
class ExportToExcel {
function setHeader($excel_file_name){//this function used to set the header variable
header("Content-type: application/ms-excel");
header("Content-Disposition: attachment; filename=$excel_file_name");
header("Pragma: no-cache");
header("Expires: 0");
}
function queryToExcel( $excel_file_name, Array $fields, $SELECT, $TABLE, $WHERE, $JOIN, $LIMIT, $OFFSET, $ORDERBY ){
//config connection
include_once('config/ConfigPDO.Class.php');
$ConfigPDO = new ConfigPDO();
//declare table
$header="<table border='1px'>";
$body = "<tr style='background-color:#6d82b0;color:#FFFFFF;text-align:center;'>";
//declare fields
$contcol = 0;
foreach ($fields as $key => $value) {
$body.="<td>".$value."</td>";
$contcol++;
}
$body.="</tr>";
//query
$result = $ConfigPDO->read( $SELECT, $TABLE, $WHERE, $JOIN, $LIMIT, $OFFSET, $ORDERBY, "BOTH" );
//declare content table
$t=0;
foreach ($result as $key => $value) {
$body.="<tr>";
for ($i=0; $i < $contcol; $i++) {
$zebra = ($t % 2 == 0) ? "'#ffffff'" : "#cccccc'";
$t++;
$body.="<td bgcolor=".$zebra." align='center'>".$value[$i]."</td>";
}
$body.="</tr>";
}
$this->setHeader($excel_file_name); //para fazer o teste vendo a tabela no browser eu comento esta linha.
echo $header.$body."</table>";
}
} // END
Será que estou errando, quanto ao header? :(
Essa biblioteca, exporta para excel é bem pratica.
Torden nunca fiz da forma que você esta falando, como é?
Shini eu fiz o download dela aqui e vou testar. obrigado.
Mesmo assim queria fazer esta bexiga funfar estava sendo bem útil para min entende. ^_^
Olá, cara, é bem simples.
Vou te mandar um código que tenho aqui.
<?php
//pequena verificação de LDAP
session_start();
if(!($_SESSION['user'])) {
die("<center>Acesso negado!</center>");
}
//aqui começa a parte de exportação
if ($_POST["N_reportType"] != "") {
$ext = $_POST["N_reportType"];
switch ($ext) {
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
default: $ctype="application/force-download";
}
$fullPath = "nome_que_quiser.".$ext;
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($fullPath)."\";" );
header("Content-Transfer-Encoding: binary");
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1" />
<title>framework</title>
</head>
<body>?>
<html lang='pt-br' xml:lang='pt-br' xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> framework </title>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1" />
</head>
<body>
<p align=center>
<table>
<form method="post" id="filters">
<tr align=center>
<td colspan="3">
<input type="hidden" id="reportType" name="N_reportType" value="" />
<input type="button" class="submit" id="exportHtml" value="Pesquisar">
<input type="button" class="submit" id="exportExcel" value="Exportar para Excel">
</td>
</tr>
</form>
</table>
</p>
<?
}
?>
<?php
$db = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
(HOST = HOST)(PORT=1521))
(CONNECT_DATA=(SERVER=DEDICATED)
(SERVICE_NAME=SID)))";
$conn = oci_connect("user", "pass", $db);
if (!$conn)
{
$e = oci_error();
print htmlentities($e['message']);
exit();
}
?>
<?php
$sql = "query";
$result = ociparse($conn,$sql) or die("Erro na query");
ociexecute($result);
?>
<!-- alguns recursos de organização e exibição -->
<p align = center>
<table class = "report">
<thead>
<tr>
<th>
Indexes
</th>
</tr>
</thead>
<tbody>
<?php
//na indexação, deve ser colocado o nome da coluna ou o alias
$i = 0;
while ($row = oci_fetch_array($result, OCI_ASSOC+OCI_RETURN_NULLS)) {
?>
<tr>
<td>
<?php echo $row["indices"]; ?>
</td>
</tr>
<?php
$i++;
}
echo "</tbody></table>";
ocifreestatement($result);
ocilogoff($result);
?>
</p>
</body>
</html>
Este aqui ta para parametrização Oracle, mas é só uma conversão de linhas para o MySQL ou qualquer outro banco.
AAAA Torden entendi, se for ver o modo que esta sendo utilizado o header é parecido com o que eu fiz só que o meu esta dando um BO estranho.
Por exeplo:
Quando eu printo a tabela no browser, sai tudo butininho:
Titulos : nome | numero | endereco
Dados : nome1 | numero1 | endereco1
Dados : nome2 | numero2 | endereco2
Dados : nome3 | numero3 | endereco3
Dados : nome4 | numero4 | endereco4
Agora quanto eu coloco o header, para sair para excel, acontece isto:
Titulos : nome | endereco | numero
Dados : numero1 | nome1 | endereco1
Dados : numero2 | nome2 | endereco2
Dados : numero3 | nome3 | endereco3
Dados : numero4 | nome4 | endereco4
Ele embaralha as colunas as trazendo de uma forma totalmente diferendo do que eu mandei.
Cara estou achando isto muito estranho, ja usei muitas vezes o header, mas nunca vi esto acontecer, pensei até que estava ficando louco :huh:
Se algum tiver algum opnião do que esta acontecendo?
Olá!
Tente usar order by, talvez ajude, aqui eu não tenho esse erro cara...
Torden, usei o CodePlex - PHPexcel, o seu é bem pratico, mas este me solucionou outros problemas.
Agradecido :joia:
Olá!
Cara, você já tentou só exportá-la para o excel através de header sem formatação?!
O excel, não é muito prestativo para ler certas tags...