【问题标题】:PHPExcel generating totally jacked up outputPHPExcel 生成完全提升的输出
【发布时间】:2011-05-31 18:15:30
【问题描述】:

您好,

我无法弄清楚如何正确使用 PHP,尤其是 PHPExcel。我已经阅读了有关此主题的多篇文章,但我一直在转圈。这是我的代码的相关部分:

$viewinv = mysql_connect($sqlsrv,$username,$password);
if (!$viewinv) { die('Could not connect to SQL server. Contact administrator.'); }
mysql_select_db($database, $viewinv) or die('Could not connect to database. Contact administrator.');
$query = "select unit_id,config,location from inventory;";
$result = mysql_query($query);

if ($result = mysql_query($query) or die(mysql_error())) {
   $objPHPExcel = new PHPExcel();
   $objPHPExcel->getActiveSheet()->setTitle('blah');

$rowNumber = 1;
$headings = array('Unit ID','Config','Location');
$objPHPExcel->getActiveSheet()->fromArray(array($headings),NULL,'A'.$rowNumber);
$rowNumber++;
while ($row = mysql_fetch_row($result)) {
   $col = 'A';
   foreach($row as $cell) {
      $objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$cell);
      $col++;
   }
   $rowNumber++;
}
   $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

   header('Content-Type: application/vnd.ms-excel');
   header('Content-Disposition: attachment;filename="myFile.xls"');
   header('Cache-Control: max-age=0');

   $objWriter->save('php://output');
   exit();
}
echo 'a problem has occurred... no data retrieved from the database';

PHPExcel 肯定是从查询中输出数据,我可以看到纯文本的点点滴滴,但它被大量随机字符包围,就好像我正在查看压缩或编译数据的内容一样。

例如:

PKâh¿>G’D²Xð[Content_Types].xml­”MNÃ0…÷œ"ò%nY „švAa •(0ö¤±êØ–gúw{&i‰@ÕnbEö{ßøyìÑdÛ¸l mð¥‘×ÁX¿(ÅÛü)¿’òF¹à¡;@1_滘±Øc)j¢x/%ê…Eˆày¦ 

任何指针将不胜感激

【问题讨论】:

    标签: php mysql phpexcel


    【解决方案1】:

    您的问题肯定在于输出的内容不仅仅是 Excel 数据(包含在输出缓冲区中)。

    要解决您的问题,只需拨打电话

      ob_clean(); //this will clean the output buffer
    

    在发送标头之前。

    【讨论】:

    • 这是问题 - 要测试您是否遇到此问题,请将文件写入本地磁盘并手动下载。如果它在 Excel 中打开良好,那么问题在于 MOleYard 建议的更多内容。根据我的经验,没有必要使用上面的 openxmlformats 标头,一个简单的八位字节内容类型标头可以正常工作,并且更通用,因此可能对跨浏览器/平台更友好。
    • 解决了我的问题!谢谢!
    • 谢谢!你节省了一天。
    【解决方案2】:

    通过将正确的编写器类型与正确的内容类型和文件扩展名匹配,该问题可能会得到解决。

    XLSX(Office 2007+):

    Writer      : Excel2007 (PHPExcel_Writer_Excel2007)
    Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
    

    XLS(Office 2007 之前):

    Writer      : Excel5 (PHPExcel_Writer_Excel5)
    Content-Type: application/vnd.ms-excel
    

    【讨论】:

    • 一开始设置为Excel5,我设置为Excel2007来测试是否能正确输出。 Excel5和Excel2007的结果都是一样的,都是乱码。 Excel 还会弹出一条警告,指出“您尝试打开的文件 __ 的格式与文件扩展名指定的格式不同。请在打开文件之前验证文件没有损坏并且来自受信任的来源。你想要现在打开文件?”
    • 您是否也收到了 Excel5 的文件扩展名警告,还是只收到 Excel2007 的文件扩展名警告?另外,您正在使用哪个版本的 Excel(office)进行测试?
    • 使用 Excel5 和 .xls 我会收到该警告。使用 Excel2007 和 .xlsx 我会收到不同的警告。 “无法打开文件,因为文件格式或文件扩展名无效。验证文件没有损坏并且文件扩展名与文件格式匹配”。我使用的是 Office Professional Plus 2010。
    • 让我们尝试以下操作:Excel2007,内容类型为 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'。
    • 试过了,同样的错误。奇怪的是,在 Internet Explorer 中,它直接将相同的乱码输出到浏览器中,而不是尝试在 Excel 中将其作为文件打开。
    猜你喜欢
    • 2013-12-03
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    相关资源
    最近更新 更多