Foros del Web » Creando para Internet » Diseño web »

Convertir a Excel desde Base de datos en PHP

Estas en el tema de Convertir a Excel desde Base de datos en PHP en el foro de Diseño web en Foros del Web. Hola soy nuevo por aquí, y me gustaria que me ayudaran con esto. Cuando escribo la descripcion en la funcion de escribir en excel, me ...
  #1 (permalink)  
Antiguo 23/07/2008, 07:40
 
Fecha de Ingreso: julio-2008
Mensajes: 2
Antigüedad: 15 años, 8 meses
Puntos: 0
Convertir a Excel desde Base de datos en PHP

Hola soy nuevo por aquí, y me gustaria que me ayudaran con esto. Cuando escribo la descripcion en la funcion de escribir en excel, me convierte a excel correctamente, pero me de lectura al abrir el archivo, el problema esta en la linea que tiene esto escrito

xlsWriteLabel($contador,6,strip_tags($row['descripcion']));

alguien me puede ayudar? gracias.

<?
// Query Database
require_once("../lib/db.php");

// Send Header
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=catalogo.csv ");
header("Content-Transfer-Encoding: binary ");

// XLS Data Cell

xlsBOF();
xlsWriteLabel(0,0,"categoria");
xlsWriteLabel(0,1,"referencia_interna");
xlsWriteLabel(0,2,"nombre");
xlsWriteLabel(0,3,"precio");
xlsWriteLabel(0,4,"url_producto");
xlsWriteLabel(0,5,"url_imagen");
xlsWriteLabel(0,6,"descripcion");
xlsWriteLabel(0,7,"gastos de envio");
xlsWriteLabel(0,8,"disponibilidad");
xlsWriteLabel(0,9,"marca");
xlsWriteLabel(0,10,"ean");
xlsWriteLabel(0,11,"garantia");
xlsWriteLabel(0,12,"precio_tachado");
xlsWriteLabel(0,13,"referencia_modelo");
xlsWriteLabel(0,14,"divisa");
xlsWriteLabel(0,15,"referencia_fabricante");

$contador = 1;
$result = mysql_query("SELECT * FROM `productos` WHERE `activo` = '1';");
while($row = mysql_fetch_array($result))
{
$id = $row['id'];
$id_categoria = $row['id_categoria'];
$query = "SELECT * FROM `estilos` WHERE `id_producto` = '$id' ORDER BY `precio` ASC LIMIT 1;";
$sql2 = mysql_query($query);
if($row2 = mysql_fetch_array($sql2))
{
$precio = number_format($row2['precio'], 2,'.','.');
$precio_oferta = number_format($row2['precio_oferta'], 2,'.','.');
}
$sql2 = mysql_query("SELECT * FROM `categorias` WHERE `id` = '$id_categoria' LIMIT 1;");
if($row2 = mysql_fetch_array($sql2))
{
$categoria = html_entity_decode($row2['categoria'], ENT_QUOTES);
}

xlsWriteLabel($contador,0,$categoria);
xlsWriteNumber($contador,1,str_pad($row['id'], 8, "0", STR_PAD_LEFT));
xlsWriteLabel($contador,2,$row['titulo']);
xlsWriteNumber($contador,3,$precio);
xlsWriteLabel($contador,4,"index.php?id=".$row['id_categoria']);
xlsWriteLabel($contador,5,"productos/".$row['imagen']);
xlsWriteLabel($contador,6,strip_tags($row['descripcion']));
xlsWriteLabel($contador,7,"0");
xlsWriteLabel($contador,8,"en stock");
xlsWriteLabel($contador,9,"mi_marca");
xlsWriteNumber($contador,10,"0");
xlsWriteLabel($contador,11,"7 días sin abrir el producto");
xlsWriteNumber($contador,12,$precio_oferta);
xlsWriteNumber($contador,13,str_pad($row['id'], 8, "0", STR_PAD_LEFT));
xlsWriteLabel($contador,14,"EUR");
xlsWriteNumber($contador,15,str_pad($row['id'], 8, "0", STR_PAD_LEFT));
$contador++;
}

xlsEOF();
exit();

function xlsBOF() {
echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
return;
}

function xlsEOF() {
echo pack("ss", 0x0A, 0x00);
return;
}

function xlsWriteNumber($Row, $Col, $Value) {
echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);
echo pack("d", $Value);
return;
}

function xlsWriteLabel($Row, $Col, $Value ) {
$L = strlen($Value);
echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
echo $Value;
return;
}

function pc_html2ascii($s) {
// convert links
$s = preg_replace('/<a\s+.*?href="?([^\" >]*)"?[^>]*>(.*?)<\/a>/i', '$2 ($1)', s);

// convert <br>, <hr>, <p>, <div> to line breaks
$s = preg_replace('@<(b|h)r[^>]*>@i',"\n",$s);
$s = preg_replace('@<p[^>]*>@i',"\n\n",$s);
$s = preg_replace('@<div[^>]*>(.*)</div>@i',"\n".'$1'."\n",$s);

// convert bold and italic
$s = preg_replace('@<b[^>]*>(.*?)</b>@i','*$1*',$s);
$s = preg_replace('@<i[^>]*>(.*?)</i>@i','/$1/',$s);

// decode named entities
$s = strtr($s,array_flip(get_html_translation_table(HTM L_ENTITIES)));

// decode numbered entities
$s = preg_replace('//e','chr(\\1)',$s);

// remove any remaining tags
$s = strip_tags($s);

return $s;
}

?>
  #2 (permalink)  
Antiguo 23/07/2008, 10:30
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
Respuesta: Convertir a Excel desde Base de datos en PHP

pone el error que te da asi al aire no podemos ayudarte
  #3 (permalink)  
Antiguo 23/07/2008, 10:33
 
Fecha de Ingreso: julio-2008
Mensajes: 2
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Convertir a Excel desde Base de datos en PHP

Hola destor77, bueno, es que al abrir el archivo de excel creado simplemente me da tres veces el tipico error de no se puede leer el archivo.

Pero ya esta solucionado, el problema era que en la cadena de descripción habia variables no imprimibles, nose porqué, pero era eso.

Gracias de todas formas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:44.