DevelopersI am using Yii1 and I want to generate a report using PHPExcel extension but my file is not ready to download, instead it appears in console. I also set headers but still file is not ready for download. I can't find exact answer. please resolve my problem
public function GenerateReport($dataProvider)
{
$phpExcelPath = Yii::getPathOfAlias('ext.phpexcel.Classes');
include($phpExcelPath . DIRECTORY_SEPARATOR . 'PHPExcel.php');
$objPHPExcel = new PHPExcel();
$fileName = 'report-'.uniqid().'.xlsx';
$objPHPExcel->getProperties()->setCreator("Palash Gupta");
$objPHPExcel->getProperties()->setTitle($fileName);
$objPHPExcel->getProperties()->setSubject("Placement Student List");
$objPHPExcel->getProperties()->setDescription("Placement Student List");
$objPHPExcel->setActiveSheetIndex(0);
$rowCount = 1;
$objPHPExcel->getActiveSheet()->SetCellValue('A' . $rowCount, 'Name');
$objPHPExcel->getActiveSheet()->SetCellValue('B' . $rowCount, 'Course');
$rowCount = 2;
foreach ($dataProvider->getData() as $data)
{
$objPHPExcel->getActiveSheet()->SetCellValue('A' . $rowCount, $data['sd_fname']);
$objPHPExcel->getActiveSheet()->SetCellValue('B' . $rowCount, $data['fk_mc_id']);
$rowCount++;
}
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$fileName.'"');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
}
Try this:
// Redirect output to a client’s web browser (Excel2007)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'. $fileName .'"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
Ref: https://github.com/PHPOffice/PHPExcel/blob/1.8/Examples/01simple-download-xls.php
Related
Im currently writing a data export using PHPExcel and keep getting an empty file.
I've made a test script that should give me an excel file with 3 test cells filled but it also gives me an empty excel file.
When i print_r the $objphpexcel it still shows that the cells are filled.
But when i print_r the writer, it only has the header data available and no cell content..
<?php
include_once 'models/PHPExcel.php';
include_once 'models/PHPExcel/IOFactory.php';
$objPHPExcel = new PHPExcel();
// Set document properties
$objPHPExcel->getProperties()->setCreator('Company')
->setLastModifiedBy('User')
->setTitle('Sample_title');
// Add header (first row) data
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'EXCEL EXPORT')
->setCellValue('B1', 'TEST')
->setCellValue('C1', 'CEL');
$next_excelrow=2;
//ITERATION TROUGH DATA HERE
// Rename worksheet
$objPHPExcel->getActiveSheet()->setTitle('A');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
//echo'<pre>'.print_r($objPHPExcel,true).'</pre>';exit; <-- this print_r still has the data
// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="sample_export.xls"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
//header('Content-Type: text/html; charset=UTF-8');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
As you can see I've already narrowed it down to a simple export and still an empty corrupt file is what i get served as a download..
Can anyone help?
Thanks!
try to change $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
to $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="file.xlsx"');
header('Cache-Control: max-age=0');
header('Cache-Control: max-age=1');
header ('Expires: '.gmdate('D, d M Y H:i:s').' GMT');
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header ('Cache-Control: cache, must-revalidate');
header ('Pragma: public');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('file.xlsx');
try to save it to file like example, not to php://output. Works for me.
Since PHPExcel is deprecated I'm moving to PHPSpreadsheet
I use PHPExcel to export my MySQL data ta xls file, but when I run it echo somethings instead download file to my local. I use firefox on centos 7.
My error like this:
��ࡱ�;�� ?����#ABCDEFGHIJKL������������������������������������������������������������������������������������������������������������������������������������������������������������
here is my code:
foreach($this->items as $r => $dataRow) {
$row = $baseRow + $r;
$objPHPExcel->getActiveSheet()->insertNewRowBefore($row,1);
$objPHPExcel->getActiveSheet()->setCellValue('A'.$row, $r+1)
->setCellValue('B'.$row, $dataRow['a'])
->setCellValue('C'.$row, $dataRow['b_display'])
->setCellValue('D'.$row, $dataRow['c_count'])
->setCellValue('E'.$row, $dataRow['d'])
->setCellValue('F'.$row, $dataRow['e'])
->setCellValue('G'.$row, '=C'.$row.'*D'.$row);
}
$filename=mt_rand(1,100000).'.xls'; //just some random filename
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header("Content-Disposition: attachment; filename=DoanhNghiep.xls");
header("Pragma: no-cache");
header("Expires: 0");
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //downloadable file is in Excel 2003 format (.xls)
$objWriter->save('php://output'); //send it to user, of course you can save it to disk also!
exit;
Anybody can help me ? tks for reading !
I assume that your code of foreach is correct you can try this modified header code
$filename=mt_rand(1,100000).'.xls'; //just some random filename
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header("Content-Disposition: attachment; filename='".$filename."'");
header("Pragma: public");
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //downloadable file is in Excel 2003 format (.xls)
$objWriter->save('php://output'); //send it to user, of course you can save it to disk also!
exit;
Or You can also try Below code that is working for me in my project
$objPHPExcel->setActiveSheetIndex(0);
// Redirect output to a client’s web browser (Excel2007)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="Booking Report.xlsx"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
have a problem to download excel file. When im saving on server its worked ok. But when i try to download things goes wrong
enter code hererequire_once('Classes/PHPExcel.php');
$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp;
$cacheSettings = array( ' memoryCacheSize ' => '1024MB');
ini_set("memory_limit","-1");
ini_set('max_execution_time', 13600);
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
// Set document properties
$objPHPExcel->getProperties()->setCreator("Techizer")
->setLastModifiedBy("Techizer")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setCategory("Test result file");
if($file=="employer")
{
// Rename worksheet
$file = 'employer';
$objPHPExcel->getActiveSheet()->setTitle($file);
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1','Employer Name')
->setCellValue('B1','Emp ID')
->setCellValue('C1','Designation')
->setCellValue('D1','Zone')
->setCellValue('E1','Password');
$query = $this->session->userdata('employ');
$query = preg_replace('/LIMIT.*/', '', $query);
$res = $this->common_model->execute_query($query);
$row = 2;
foreach($res as $result)
{
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A'.$row,$result->profile_name)
->setCellValue('B'.$row,$result->profile_empid)
->setCellValue('C'.$row,$result->profile_desig)
->setCellValue('D'.$row,$result->profile_zone)
->setCellValue('E'.$row,$result->profile_pass);
$row++;
}
header('Content-Disposition: attachment;filename=Employer list'.date("Y-m-d").'.xls');
}
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.ms-excel');
//header('Content-Disposition: attachment;filename=report.xls');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
it gives an excel file with this content:
PK–jGG’D²Xð[Content_Types].xml”MNÃ0…÷œ"ò%nY
For example I'm using such a code:
<?php
require_once("D:\server/www/cls/PHPExcel.php");
require_once("D:\server/www/cls/PHPExcel/IOFactory.php");
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('B2', 'HeaderB');
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('C2', 'HeaderC');
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('D2', 'HeaderD');
ob_end_clean();
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="report.xlsx"');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
ob_end_clean();
$objWriter->save('php://output');
?>
It downloads report.xlsx file and doesn't display it in a browser. How do I make it?
Thanks!
Remove this line...
header('Content-Disposition: attachment;filename="report.xlsx"');
The user must have something in their browser capable of viewing the Excel file too.
comment this line
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="report.xlsx"');
replace also 'Excel2007' to 'html'
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'html');
i have written code that is working in Mozilla firefox but not working in internet explorer
i cannot solve it. in internet explorer its complete page loding with out popup download .
i need to generete excel file with IE support also.please help me.
here is my code.
$objPHPExcel = new PHPExcel();
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(18);
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'Agent Code')
->setCellValue('B1', 'Month');
$i=2;
while($row1=mysql_fetch_array($rs))
{
$month = $row1['smonth']+1;
$month_name = date( 'F', mktime(0, 0, 0, $month) );
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A'.$i, $row1['scode'])
->setCellValue('B'.$i, $month_name)
->setCellValue('C'.$i, $row1['syear']);
$i++;
}
$objPHPExcel->getActiveSheet()->setTitle('Simple');
$objPHPExcel->setActiveSheetIndex(0);
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="01simple.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
This is complete solution
use
header('Pragma: ');
Your issue is relate with headers were missing.
Try to replace your header code with this following code:
setcookie("fileLoading","true");
// Redirect output to a client’s web browser (Excel2007)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$viNameFile.'.xlsx"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');