PHPExcel save a CSV也在添加网页HTML


PHPExcel save a CSV is adding the webpage HTML as well

我有一个网页,其中有一个无线电组作为您希望保存的文件格式的选项。选项:

  • xls
  • .xlsx
  • . csv

所有的工作,除了。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文件中有什么想法吗?

顺便说一下,如果重要的话,这是普拉多项目

更新:

A little more…

我有一个网页,生成一个表格格式的报告(思考表/网格)。在同一页面上,我可以选择将表格格式的日期保存为Excel .xls(不知怎的,.xlsx现在不起作用了,呃…)。用户可以选择将文件保存为.xls .xlsx .csv,当单击该文件时,该文件将从该页面下载。

这会导致已经呈现的网页通过:php://output被添加到输出中吗?

UPDATE - Solution:

是的,在查看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 ... ?>)之外的所有其他内容。


一个例子:

  • 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>
    

你确认Excel文件不包含HTML吗?它们可能会被Excel忽略。添加exit();后的最后一行改变什么?