【问题标题】:Download an Excel file from web server folder从 Web 服务器文件夹下载 Excel 文件
【发布时间】:2015-09-14 09:39:06
【问题描述】:

我正在使用 PHPExcel 将 Oracle SQL 查询结果保存到 .xlsx 文件中。我在node--18769.tpl.phpnode--18769.tpl.xlsx 中编写了我的PHP 代码文件正在下载到webroot (/root/themes/bartik/templates) 文件夹,结果。

我的要求:

  1. 我可以将node--18769.tpl.xlsx重命名为report.xlsx吗?

  2. 是否可以在文件名前添加UNIX TIMESTAMP? (如 1442223364_report.xlsx)

  3. 文件生成后如何将report.xlsx下载到本地系统?

这是我的代码:

require_once dirname(__FILE__) . '/Classes/PHPExcel.php'; // Create new PHPExcel object $objPHPExcel = new PHPExcel(); // Set document properties // Add some data $query = "SELECT DISTINCT TITLE, PID, TYPE, SUM(DAYCOUNT) AS tot, ROUND(SUM(DAYCOUNT)/( SELECT SUM(DAYCOUNT) FROM REPORT_LIST_VIEW), 4) AS per FROM REPORT_LIST_VIEW WHERE DAYCOUNT > '0' GROUP BY TITLE, PID, TYPE ORDER BY tot DESC"; //print $query; exit; $res = db_query($query); $rowNumber = 1; while ( $dataFetched = $res->fetchAssoc() ) { $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A'.$rowNumber, $dataFetched['title']) ->setCellValue('B'.$rowNumber, $dataFetched['tot']) ->setCellValue('C'.$rowNumber, $dataFetched['per']); $rowNumber++; } // Miscellaneous glyphs, UTF-8 $objPHPExcel->getActiveSheet()->getRowDimension(8)->setRowHeight(-1); $objPHPExcel->getActiveSheet()->getStyle('A8')->getAlignment()->setWrapText(true); // Rename worksheet $objPHPExcel->getActiveSheet()->setTitle('Page & Files Reports '); // Set active sheet index to the first sheet, so Excel opens this as the first sheet $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel->getActiveSheet()->setCellValue('A8',"Hello\nWorld"); $objPHPExcel->getActiveSheet()->getRowDimension(8)->setRowHeight(-1); $objPHPExcel->getActiveSheet()->getStyle('A8')->getAlignment()->setWrapText(true); // Rename worksheet $objPHPExcel->getActiveSheet()->setTitle('Simple'); // Set active sheet index to the first sheet, so Excel opens this as the first sheet $objPHPExcel->setActiveSheetIndex(0); // Save Excel 2007 file $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save(str_replace('.php', '.xlsx', __FILE__));

代码更新:

$objPHPExcel->getActiveSheet()->setTitle('Simple'); // 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 (Excel2007) header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="01simple.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;

【问题讨论】:

    标签: php excel download phpexcel


    【解决方案1】:

    这一行

    $objWriter->save(str_replace('.php', '.xlsx', __FILE__));
    

    告诉 PHPExcel 当你保存文件时使用什么文件名......只需将其更改为

    $objWriter->save("WHATEVER_YOU_WANT_TO_CALL_THE_FILE.xlsx);
    

    如果您想将文件下载到本地,则保存到php://output 并将适当的标题发送到浏览器,完全按照the documentation 中的描述和PHPExcel 提供的the examples 中所示

    【讨论】:

    • 谢谢马克。我更新了我的代码。但是下载的xlsx文件已损坏。
    • 在文本编辑器中打开文件。查找前导/尾随空白字符、文件顶部的 BOM 标头或文件二进制流中的任何纯文本 PHP 消息
    • 包含网页的html源代码。
    • 如果您调用导出为 Excel,则禁止输出该页面内容
    【解决方案2】:
    // write the file
    $objWriter->save('Excel_report/'filename');
    
    //Redirect output to a client’s web browser (Excel2007)
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename="Contact.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');
    
    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;
    

    【讨论】:

    • 请添加描述
    猜你喜欢
    • 2015-04-04
    • 2011-06-04
    • 2016-10-22
    • 2020-07-02
    • 2017-08-11
    • 2010-11-15
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    相关资源
    最近更新 更多