phpexcel 導出excel無法打開,提示文件格式或文件名無效,文件損毀,解決辦法


使用過很多次phpexcel了,有時需要保存文件到磁盤,有時需要瀏覽器彈出下載。保存到磁盤一半不會出現問題,關鍵是瀏覽器彈出保存,經常會發生導出的excel文件無法打開,提示文件格式或文件名無效,文件損毀。在此,記錄一下解決辦法。

1、xls還是xlsx?首先確定導出的excel文件擴展名

2、添加header,不同的文件類型,不同的header。

我就是這里出了問題,xlsx用了xls的header,導致導出的excel無法打開。

2007excel:xlsx如下:

$excelName = '績效得分統計'.time();

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');

header('Content-Disposition: attachment;filename="'.$excelName.'.xlsx"');

header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

$objWriter->save('php://output');

exit;

 

2003excel:xls如下:

header('Content-Type: application/vnd.ms-excel');

header('Content-Disposition: attachment;filename="links_out'.$timestamp.'.xls"');

header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

$objWriter->save('php://output');

exit;

 

3、末尾添加exit(一定要添加,否則也會提示文件損壞)。

$objWriter->save('php://output');

exit;

 

 

例如xlsx,完整參考如下:

require_once ('inc/PHPExcel-1.8/Classes/PHPExcel.php');

$objPHPExcel = new PHPExcel();

$objSheet = $objPHPExcel->getActiveSheet();

$objPHPExcel->getProperties()->setCreator("文檔創建者添翼博客")

->setTitle("添翼博客PHPExcel" . time())

->setSubject("添翼博客phpexcel導出". time())

->setDescription("phpexcel導出excel無法打開,提示文件格式或文件名無效,文件損毀,解決辦法". time())

->setKeywords("phpexcel");

ob_end_clean();

 

//填充數據

$objSheet->setTitle("績效得分統計". time());

 

//輸入表頭1

foreach ($titlearray as $k=>$v){

$num = $k;

$objSheet->setCellValue(PHPExcel_Cell::stringFromColumnIndex($num) . (1), $v);

}

 

//輸入表頭2

foreach ($leadnames as $k=>$v){

$num = $k;

$objSheet->setCellValue(PHPExcel_Cell::stringFromColumnIndex($num) . (2), $v);

}

$head3 = ['',''];

$head4 = array_merge($head3,$dept_data);

foreach ($dept_data as $k2=>$v2){

$num2 = ($k2+1)*2-1;

$num3 = ($k2+1)*2;

$num4 = ($k2+2)*2-1;

$num5 = ($k2+2)*2;

 

//合並單元格
$first = 'A'.$num2;
$first2 = 'A'.$num3;
$first3 = 'A'.$num4;
$first4 = 'B'.$num4;
$first5 = 'B'.$num5;

$objPHPExcel->getActiveSheet()->mergeCells("$first:$first2");
$objSheet->setCellValue($first3, $v2);
$objSheet->setCellValue($first4, '應得分');
$objSheet->setCellValue($first5, '實得分');
}

$col = count($projectName);
$row = count($dept_data);
for ($i=0;$i<$col;$i++){
for ($j=0;$j<$row;$j++){
$n1 = $i+2;
$n2 = PHPExcel_Cell::stringFromColumnIndex($n1);
$m1 = ($j+2)*2-1;
$m2 = ($j+2)*2;
$kou1 = $n2.$m1;
$kou2 = $n2.$m2;
// echo $new2Data1[$i][$j];
if (!empty($new2Data1[$i][$j])){
$objSheet->setCellValue($kou1, $new2Data1[$i][$j]);
}
if (!empty($new2Data2[$i][$j])){
$objSheet->setCellValue($kou2, $new2Data2[$i][$j]);
}
}
}

$excelName = '績效得分統計'.time();
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$excelName.'.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM