生成Excel文件时出错

时间:2015-04-30 10:41:51

标签: php phpexcel

我使用库PHPExcel生成“.xlsx”文件。该文件已生成,但当我尝试打开它时出现错误:Excel found some unreadable content. Do you want to fix the content?当我点击“是”时,它会打开包含我想要的内容的文件。

如何避免此错误?我已经删除了<?php ?>标签之后的所有空格,我已经检查过在生成文件之前我没有HTML,但我仍然不知道我的错误在哪里。

这是我的代码:

<?php
include ('/lib/PHPExcel/PHPExcel.php');
include ('/lib/PHPExcel/PHPExcel/IOFactory.php');

// I use session for now when the excel is generate       
$_SESSION['downloadstatus'] = array(
    "status" => "pending"
);

// Creation of the Excel File
$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties()
            ->setCreator("Temporaris")
            ->setLastModifiedBy("Temporaris")
            ->setTitle("Template Relevé des heures intérimaires")
            ->setSubject("Template excel")
            ->setDescription("Template excel permettant la création d'un ou plusieurs relevés d'heures")
            ->setKeywords("Template excel");
$objPHPExcel->setActiveSheetIndex(0);
$sheet = $objPHPExcel->getActiveSheet();

// Add the content of Excel File
$indiceColumn = "A";
$indiceLine = 1;

$defaultColumns = array("Matricule", "Nom_Prenom", "Siret_etablissement", "Regate_etablissement", "Centre_analytique", "Date");
foreach ($defaultColumns as $columnName) {
    $sheet->SetCellValue($indiceColumn . $indiceLine, $columnName);
    $indiceColumn++;
}

$listColumnName = EDIXIS_db_query("select csv_nom_col FROM  temporaris_eu_config_ent_csv WHERE id_config = " . $id_sel . " ORDER BY id");
while ($columnName = EDIXIS_db_fetch_object($listColumnName)) {
    $sheet->SetCellValue($indiceColumn . $indiceLine, $columnName->csv_nom_col);
    $indiceColumn++;
}

// Send the Excel File to the user
$writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="template.xlsx"');
header('Cache-Control: max-age=0');
$writer->save('php://output');
$_SESSION['downloadstatus'] = array(
    "status"  => "finished",
    "message" => "Done"
);
?>

-----编辑-----

我尝试检查修复文件和错误文件之间的区别,所以我用notpad ++打开它们。

他们是错误文件和修复文件之间不同的一些角色:

  • 一些人•谁成了«
  • 一些“谁变得太”
  • 此行

‚›.›”Ò© +@SdÕ Eë ݲäÄfÃH*²?ÙÑý®³+ @ î幜ᨽ]YC^!&íÝŒVSN 8é•v‹}œßOn(IY8%Œw0£kHô¶{×ÊÐHá{ôbÖ‚\jd˜ÑeΡa,É%X‘¦èp(>ûhEÆe\° ä‹X «9ÿÄ,d¡DlNÂHwH%ÈÐGS J20ÁåĪiÅŽÞÑ|77åÄiu^xÓºîUÒã0ÓáºXñüûõðíg)u¢ÝØ*'k•ld'}æƒ"êÔ²“ÏcHù›ý¬A}YŸ9/ÕvWÜ– Šà¡šm {åéúîëüžv5¯>N8>æüsS󦮯xÝp>žàr¤Ú]Òÿa÷”Ò¬³R•Á,ò¯ìuCËúˆ/íò&j+4.Js¶;ƽè’Q‡Œsy$ÀJ‚!883ØéLŒ 2nÄè"ê}ïˆïI0}ÒÈO$–À„Ê6¯Dœ‚Ç Ôÿþ2ÿR¬{i¼ªX>ªtá;ÕÊoÚÂG¼/v¹:ûeº¿PK ”J¤Fs‘{Y³ ¦ xl/theme/theme1.xmlíYOoÛ6¿ïSº·²lÉu‚:EìØëÖ¦

谁成为了这一行

Ë7\ ÖIDiV´W¬„ +¸5ölkÖ;›ö‘ûLܺwH‘"çÇ3ž´·kgÙ32Áyy=8¯,6~9ç<»ÉÎ-^ K&lt;Ìù¿í^μ* 6 * |óÄäS£œÉrŽIÀÉ4%‡'ñ1“™-¸Qª'¹1«ª ÷AA-ZF)FA $‰|ÔêŒ= UDJ€&GT;'QOkqòf@ - ^ UP”3§3yáEëA&LT;º×ÉÃ0L‡> b¥○×A×Y×¥Ô‰NC«ð®ÕªQ2ìàb@‰&安培;μâìóØB+S¾§fП6ÎkμÝ·#€ft¨fWÂAùyóùËâŽw³ª〜7©EY»¨&GT;6³º©goªYSUã。 “ªÛ'ýö@)E&安培; [(UYÊbßéÊž·LO°¬GZY·hœ4'(IUI÷”K¡‰™æòD€μËh&GT; HFO™YÉnåèbúuïYèY'}2ÄOK"e—W"ÎÁcPêÿ•ÿ )Öƒ4^Õl†€:]ùεò[¶H÷%®W¿L÷PK «J¤Fs‘{Y³ ¦ xl/theme/theme1.xmlíYOoÛ6¿ïSº·²lÉu‚:EìØëÖ¦

所以我认为这是一个编码问题。但我仍然不知道如何解决它。

2 个答案:

答案 0 :(得分:0)

问题是你的$ _SESSION代码。

$_SESSION['downloadstatus'] = array(
    "status"  => "finished",
    "message" => "Done"
);

由于标题已经输出,我几乎可以肯定你在excel文档的末尾附加了一个php警告。进行以下更改,它应该可以正常工作。

$_SESSION['downloadstatus'] = array(
    "status"  => "finished",
    "message" => "Done"
);

// Send the Excel File to the user
$writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="template.xlsx"');
header('Cache-Control: max-age=0');
$writer->save('php://output');
exit;

答案 1 :(得分:0)

我发现它是如此愚蠢的问题。只是因为它不允许在$objPHPExcel->getProperties()中添加一些特殊字符,所以我用'e'替换每个'é',现在它可以正常工作。

相关问题