[英]PHPExcel save a CSV is adding the webpage HTML as well
我有一个网页,其中有一个广播组作为您要保存的文件格式的选项。 选项包括:
所有工作,但.csv,因为它也将页面HTML添加到文件的底部。
这是我正在尝试的(代码片段显示功能):
// 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');
有关为什么将页面HTML附加到.csv文件的任何想法?
另外,如果重要的话,这是普拉多项目
更新:
再来一点...
我有一个网页,以表格格式(Think table / grid)生成报告。 在同一页面上,我可以选择将表格格式的日期保存到Excel .xls(不知何故.xlsx现在不能正常工作,呃...)。 用户可以选择将文件保存在.xls .xlsx .csv中,当单击该文件从该页面下载时。
这是否会导致已经呈现的网页通过以下方式添加到输出: php://output
?
更新 - 解决方案:
在查看excel文件之后,它还添加了网页HTML。 我也查看了输出缓冲区的PHP函数,但仍然没有任何工作
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();
写入php://output
与执行普通echo
语句完全相同。 $objWriter->save()
的输出将被添加到回显或位于PHP块之外的所有其他内容( <?php ... ?>
)。
一个例子:
这是对的 :
<?php $objPHPExcel = new PHPExcel(); $objPHPExcel->getActiveSheet()->setTitle("Report"); // ... $objWriter->save('php://output'); ?>
这是错的 :
<!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>
您是否确认Excel文件不包含HTML? Excel可能会忽略它们。 是否添加exit();
在最后一行之后改变什么?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.