PHPExcel file не может открыть файл, потому что формат файла или расширение файла недопустимы

Я застрял с этой проблемой, он не отображает фактический файл 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 objectn";
$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 formatn";
#$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');

пожалуйста, помогите мне решить эту проблему

5 ответов


теперь он работает! Благодаря этому phpexcel скачать

Я изменил код на этот:

// 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();

решить мою проблему.


Я не знаю, Могу ли я помочь, у меня была та же проблема, и я решил с

ob_end_clean();

Я положил его сразу после

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

поэтому не меняйте заголовок и не сохраняйте его как xslx в любом случае, проблема заключается в буфере!


пожалуйста, убедитесь, что все файлы (например, которые включены) находятся в UTF-8 без BOM кодировка.
Вы можете определить это по-разному, например, вижу это ссылке.

только если вам нужен UTF-8 С BOM - пожалуйста, используйте ob_end_clean(); перед выводом данных в браузер, как указано в другие ответы здесь.


наиболее вероятным виновником, если это вырезать и вставить в свой скрипт

echo date('H:i:s') . " Write to Excel2007 format\n";

Если вы отправляете в браузер для загрузки, то не должно быть никаких других выходных данных (Эхо, операторы печати, выпадающие и из PHP), чем выходные данные, сгенерированные на php://output самим PHPExcel


у меня такая же проблема, проблема проста. Просто поместите код ниже :

ob_end_clean();

после :

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