Below is my simple test php. When I run this nothing at all happens.
require_once('/var/www/html/Classes/PHPExcel.php');
$excel = new PHPExcel();
$excel->setActiveSheetIndex(0)
->setCellValue('A1','Hello')
->setCellValue('B1','World');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="/var/www/html/Examples/test.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
$objWriter->save('php://output');
exit;
Any ideas of why this does not work. No redirect at all and not file either.
With skimming PHPEXCEL documentation sample something like the following could work :
<?php
date_default_timezone_set('America/Los_Angeles');
require_once('/var/www/html/Classes/PHPExcel.php');
$sheet = array(
array(
'a1 Hello',
'b1 World',
'c1 here',
'd1 test',
)
);
$doc = new PHPExcel();
$doc->setActiveSheetIndex(0);
$doc->getActiveSheet()->fromArray($sheet, null, 'A1');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="your_name.xls"');
header('Cache-Control: max-age=0');
// Do your stuff here
$writer = PHPExcel_IOFactory::createWriter($doc, 'Excel5');
$writer->save('php://output');
?>
Important Note Dont kill the process by exit();
Related
Hi below is my simple code for generating excel file:
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');
ob_end_clean();
header( "Content-type: application/vnd.ms-excel" );
header('Content-Disposition: attachment; filename="test.xlsx"');
header("Pragma: no-cache");
header("Expires: 0");
ob_end_clean();
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
but when I open file it shows file corrupted error.
Any idea?
Looks to me like the wrong character set is being used.
Try to change
header( "Content-type: application/vnd.ms-excel" );
To
header( 'Content-Type: application/vnd.ms-excel; charset=utf-8' );
P.s. Note the capital T in Content-Type
You seem to do things right, however, I'll share my code, try it, it might be useful for you.
<?php
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$fileName.'"');
header('Cache-Control: max-age=0');
$writer = IOFactory::createWriter($spreadsheet, 'Xls');
$writer->save('php://output');
exit;
?>
this is my simple code to create an xlsx file and open it with openoffice
require(APPPATH.'/PHPExcel-1.8/Classes/PHPExcel.php');
require(APPPATH.'/PHPExcel-1.8/Classes/PHPExcel/Writer/Excel2007.php');
$this->load->library('excel');
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0)
->SetCellValue('A1', 'Calendario Attivit');
$filename = "prova".".xlsx";
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header('Content-Disposition: attachment;filename="'.$filename.'"');
header("Cache-Control: max-age=0");
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
the file is downloaded but when open it i get this:
someone can help me ?
Try to add ob_end_clean() before the output :
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
ob_end_clean();
$objWriter->save('php://output');
I cant save file generated by PHPExcel to server. When do it
$this->load->library('Classes/PHPExcel');
$this->phpexcel->getActiveSheet()->setCellValue('A5','Value');
more excel code...
$writer = new PHPExcel_Writer_Excel5($this->phpexcel);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="newFile.xls"');
header('Cache-Control: max-age=0');
$writer->setPreCalculateFormulas(false);
$writer->save('php://output');
I can download the file, but I tried many different ways to save the file in the server folder, for example
$filename = 'file.xls';
$writer = new PHPExcel_Writer_Excel5($this->phpexcel);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="newFile.xls"');
header('Cache-Control: max-age=0');
$writer->setPreCalculateFormulas(false);
$writer->save($filename);
or use PHPExcel_IOFactory to save the file, but I cant get it to work, same idea pliss.
regards.
try this :
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$fname.'"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('./files/'.$fname);
Last night I solved the error.
$writer = new PHPExcel_Writer_Excel5($this->phpexcel);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="newFile.xls"');
header('Cache-Control: max-age=0');
$writer->setPreCalculateFormulas(false);
$writer->save(getcwd().'/mailAttachment/newFile.xls');
I add this line.
$writer->save(getcwd().'/mailAttachment/newFile.xls');
the function getcwd() get the current working directory.
Thanks anyway.
I am trying to write data to a template and download it.
If i use the sample files as a template, it works but once I use my own it says its corrupt.
Any thoughts?
My code is:
<?php
require_once 'PHPExcel.php';
// Create new PHPExcel object
$fileName = '31docproperties.xlsx'; //location of template for PID type
$fileType = 'Excel2007';
$objReader = PHPExcel_IOFactory::createReader($fileType);
$objPHPExcel = $objReader->load($fileName);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('B4', 'Test Data');
// Redirect output to a client’s web browser (Excel2007)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="01simple.xlsx"');
header('Cache-Control: max-age=0');
ob_end_clean();
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
?>
I have a webpage that has a radio group as the options for the file format you wish to save. Options are:
.xls
.xlsx
.csv
All work but the .csv as it also adds the page HTML to the bottom of the file.
Here is what I'm trying (code snippets to show functionality):
// Creating the format
$data = $this->getQueryResults();
$objPHPExcel = new PHPExcel();
$objPHPExcel->getActiveSheet()->setTitle("Report");
$objPHPExcel->getProperties()->setCreator("me");
$objPHPExcel->getProperties()->setLastModifiedBy("me");
$objPHPExcel->getProperties()->setSubject("Report Stuff");
$objPHPExcel->getProperties()->setDescription("Report Stuff");
// Next I iterate through the data array
$objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$cell);
$objPHPExcel->getActiveSheet()->getColumnDimension($col)->setAutoSize(true);
// check the radio option selected for the file format
if($this->radioXLS->Checked) {
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$excel_name.'.xls"');
header('Cache-Control: max-age=0');
}
if($this->radioXLSX->Checked) {
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$excel_name.'.xlsx"');
header('Cache-Control: max-age=0');
}
if($this->radioCSV->Checked) {
ob_end_clean(); // add/removing this does nothing
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');
$objWriter->setDelimiter(',');
$objWriter->setEnclosure('');
$objWriter->setLineEnding("\r\n");
$objWriter->setSheetIndex(0);
ob_end_clean(); // add/removing this does nothing
header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename="'.$excel_name.'.csv"');
header('Cache-Control: max-age=0');
}
$objWriter->save('php://output');
Any thoughts as to why it appends the page HTML to the .csv file?
On a side note this is a Prado project if that matters
UPDATE:
A little more...
I have a webpage that generate a report in a tablature format (Think table/grid). On the same page I have the option to save the date in the tablature format to an Excel .xls (somehow .xlsx is not working now, ugh...). The user has the option to save the file in .xls .xlsx .csv, when clicked the file downloads from that page.
Would this cause the webpage already rendered to be added to the output via: php://output?
UPDATE - Solution:
Yep after looking at the excel files it's also adding the webpage HTML. I have also looked at the output buffer PHP functions but still nothing is working
while(ob_get_level() > 0) {
ob_end_clean();
}
if($this->radioCSV->Checked) {
header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename="'.$excel_name.'.csv"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');
$objWriter->setDelimiter(',');
$objWriter->setEnclosure('');
$objWriter->setLineEnding("\r\n");
$objWriter->setSheetIndex(0);
} elseif($this->radioXLSX->Checked) {
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="'.$excel_name.'.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
} else {
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$excel_name.'.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
}
$objWriter->save('php://output');
exit();
Writing to php://output is exactly the same as doing a plain echo statement. The output of $objWriter->save() will be added to everything else that's echoed or lies outside PHP blocks (<?php ... ?>).
An example:
This is right:
<?php
$objPHPExcel = new PHPExcel();
$objPHPExcel->getActiveSheet()->setTitle("Report");
// ...
$objWriter->save('php://output');
?>
This is wrong:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="es">
<head><title>Export to Excel</title>
</head>
<body>
<?php
echo '<h1>Export to Excel</h1>';
$objPHPExcel = new PHPExcel();
$objPHPExcel->getActiveSheet()->setTitle("Report");
// ...
$objWriter->save('php://output');
?>
</body>
</html>
Have you verified that the Excel files don't contain the HTML? They might just be ignored by Excel. Does adding exit(); after the last line change anything?