我遇到了这个问题,它没有显示实际的excel文件。请检查下面的代码:
/** Error reporting */
error_reporting(E_ALL);
/** PHPExcel */
require_once 'PHPExcel.php';
include 'PHPExcel/Writer/Excel2007.php';
// Create new PHPExcel object
#echo date('H:i:s') . " Create new PHPExcel object\n";
$objPHPExcel = new PHPExcel();
$excel = new PHPExcel();
$objPHPExcel->getProperties()->setTitle("Payroll");
if(!$result){
die("Error");
}
$col = 0;
$row = 2;
while($mrow = mysql_fetch_assoc($result)) {
$col = 0;
foreach($mrow as $key=>$value) {
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $value);
$col++;
}
$row++;
}
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'Scholar Id')
->setCellValue('B1', 'Lastname')
->setCellValue('C1', 'Middlename')
->setCellValue('D1', 'Firstname')
->setCellValue('E1', 'Barangay')
->setCellValue('F1', 'Level')
->setCellValue('G1', 'Allowance')
->setCellValue('H1', 'Has claimed?');
$objPHPExcel->getActiveSheet()->getStyle('A1:H1')->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(18);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(18);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(18);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(18);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(14);
$objPHPExcel->getActiveSheet()->getStyle('A1:H1')->getAlignment()- >setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->setShowGridlines(true);
$objPHPExcel->getActiveSheet()->getStyle('A1:H1')->applyFromArray(
array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'color' => array('rgb' => 'FFFF00')
)
)
);
// Save Excel 2007 file
echo date('H:i:s') . " Write to Excel2007 format\n";
#$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="payroll.xlsx"');
header('Cache-Control: max-age=0');
$writer->save('php://output');
答案 0 :(得分:44)
我现在就开始工作了!感谢phpexcel to download
我将代码更改为:
// Save Excel 2007 file
#echo date('H:i:s') . " Write to Excel2007 format\n";
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
ob_end_clean();
// We'll be outputting an excel file
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="payroll.xlsx"');
$objWriter->save('php://output');
我认为这一行:
ob_end_clean();
解决了我的问题。
答案 1 :(得分:5)
我不知道我是否可以帮助我遇到同样的问题而且我用
解决了ob_end_clean();
我把它放在
之后$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
所以不要改变标题并保存为xslx,问题是缓冲区!
答案 2 :(得分:2)
如果这是您的脚本的剪切和粘贴,最可能的罪魁祸首是
echo date('H:i:s') . " Write to Excel2007 format\n";
如果您要发送到浏览器进行下载,则必须没有其他输出(回声,打印语句,放入和退出PHP),而不是PHPExcel自身输出到php://输出的输出
答案 3 :(得分:2)
请确保所有文件(例如包含的文件)均采用UTF-8 无BOM 编码。
您可以通过不同的方式识别出来,例如:见link。
仅当您需要带有BOM 的UTF-8 时 - 请在将数据输出到浏览器之前使用ob_end_clean();
,如此处的其他答案所示。
答案 4 :(得分:0)
我有同样的问题,问题很简单。只需将代码放在下面:
ob_end_clean();
之后:
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
答案 5 :(得分:0)
我认为此问题的解决方案与此处相同: Google Chrome errors while exporting XLS file using PHP
只需在附件; 和文件名之间添加空格,即可:
header("Content-Disposition: attachment; filename=\"Past_Due_Report.xls\"");
正如我在您自己的答案中看到的那样,这就是您所做的,而且很可能是解决您的问题的原因。
答案 6 :(得分:0)
我遇到了同样的问题,但是打电话给ob_end_clean()
没有用。我的CMS(drupal 7)弄乱了标题,因此即使在文件输出之前调用了0A
,内容的开头还是出现了新行(十六进制ob_end_clean()
)。
使用下面的代码,我最终摆脱了前面的新行:
for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); }
ob_implicit_flush(1);
ob_clean();
答案 7 :(得分:0)
这个答案救了我一命。谢谢@ARN
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="export_result.xlsx"');
for ($i = 0; $i < ob_get_level(); $i++) {
ob_end_flush();
}
ob_implicit_flush(1);
ob_clean();
$objWriter->save("php://output");
答案 8 :(得分:0)