Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Manejar archivos Excel

Estas en el tema de Manejar archivos Excel en el foro de PHP en Foros del Web. Hola a todos Tengo tres archivos PHP php1.php require_once '../PHPExcel/Classes/PHPExcel.php'; setlocale(LC_ALL,"es_ES@euro","es_ES","esp"); // Conecto con MSSQL, ejecuto un SP y lleno un archivo Excel $objReader = ...
  #1 (permalink)  
Antiguo 31/05/2017, 10:25
 
Fecha de Ingreso: abril-2010
Mensajes: 68
Antigüedad: 14 años
Puntos: 0
Manejar archivos Excel

Hola a todos

Tengo tres archivos PHP

php1.php

require_once '../PHPExcel/Classes/PHPExcel.php';
setlocale(LC_ALL,"es_ES@euro","es_ES","esp");

// Conecto con MSSQL, ejecuto un SP y lleno un archivo Excel
$objReader = PHPExcel_IOFactory::createReader("Excel2007");
$objPHPExcel = $objReader->load("Excel/CDM.xlsx");

$objPHPExcel->setActiveSheetIndexByName("Hoja1");
$objActSheet = $objPHPExcel->getActiveSheet();
$objActSheet->setCellValueByColumnAndRow(....)

//Guardo el Excel con dos nombres diferentes
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save("Excel/CDM.xlsx");
$objWriter->save('Excel/CDM'.date(dmY).'.xlsx');


php2.php

// Muestro una hoja del Excel en el navegador
$hoydia = date('j');
$hoymes = strtoupper(strftime("%B"));
$mes = date('n');
$objReader1 = PHPExcel_IOFactory::createReader("Excel2007");
$objPHPExcel1 = $objReader->load("Excel/CDM.xlsx");
$objWriterHTML = new PHPExcel_Writer_HTML($objPHPExcel);
//$objWriterHTML->setUseBOM(false);
$objWriterHTML->setSheetIndex($mes-4);
echo $objWriterHTML->generateHTMLHeader();
echo $objWriterHTML->generateStyles(true);
echo $objWriterHTML->generateSheetData();


php3.php

<?php

// Envío email y descargo
require "/usr/local/bin/vendor/swiftmailer/swiftmailer/lib/swift_required.php";
// Configuración
$transport = Swift_SmtpTransport::newInstance()
->setHost('mihost')
->setPort('587')
->setEncryption('tls')
->setUsername('[email protected]')
->setPassword('Aei123');
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance();
$message->setBody("<br><br>"."Adjuntamos el archivo de hoy".strftime("%A %d de %B del %Y")."<br><br>"."Saludos",'text/html');
$message->attach(Swift_Attachment::fromPath('Excel/CDM'.date('dmY').'.xlsx'));
$message-> setSubject('Archivo');
$message->setFrom(array('[email protected]' => 'Informes'));
$message->setTo (array ('[email protected]' => 'Juan P',));
if ($mailer->send($message))
{ $enlace = "Excel/CDM".date(dmY).".xlsx";
header ("Content-Disposition: attachment; filename=".'CDM'.date(dmY).'.xlsx'." ");
header ("Content-Type: application/octet-stream");
header ("Content-Length: ".filesize($enlace));
readfile($enlace);
echo "Mensaje enviado correctamente";
} else { echo "Mensaje fallido"; }
?>


Si ejecuto cada uno independiente ejecutan de maravillas, php1.php me carga datos, los escribe en el Excel y los guarda, php2.php me muestra en el navegador la hoja que deseo y php3.php me envia el .xlsx por email y me lo descarga.

Lo que no logro es ejecutar todo de una vez, es decir llenar el excel, guardarlo, mostrarlo en el explorador, me envíe el email y me lo descargue. He tratado de mil maneras y combinaciones entre ellos, con inludes, require, redireccionando con header y nada. No soy para nada experto en php y no me va muy bien con la comprensión del HTML.

Por eso recurro humildemente a vosotros, ¿ me ayudais por favor ?

Saludos y gracias de antemano.
  #2 (permalink)  
Antiguo 31/05/2017, 11:30
 
Fecha de Ingreso: octubre-2009
Mensajes: 305
Antigüedad: 14 años, 6 meses
Puntos: 29
Respuesta: Manejar archivos Excel

solo hay 2 cosas que no puedes hacer simultaneamente: mostrar y descargar el archivo a la vez, ya que esas operaciones requieren modificar el flujo de salida al navegador.

puedes preparar un script PHP que: construya y guarde el excel, lo envie por correo y luego lo muestres por pantalla, luego, añade al resto del HTML un IFRAME para invocar a un segundo archivo "descargarExcel.php" con dicho iframe, así, el navegador recibirá via el IFRAME el flujo del excel a descargas mientras muestras tu excel en el lienzo HTML principal.

PD: de preferencia oculta el IFRAME con css
  #3 (permalink)  
Antiguo 06/06/2017, 03:59
 
Fecha de Ingreso: abril-2010
Mensajes: 68
Antigüedad: 14 años
Puntos: 0
Respuesta: Manejar archivos Excel

Muchas gracias sustentio, con tus sugerencias he resuelto el problema.

Saludos

Etiquetas: excel, html, manejar, sql
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 09:46.