从数据库导出时 PHPexcel 库错误

标签 php mysql phpexcel

我正在使用 PHPexcel 库进行报告。当我使用静态值时它运行良好,但是当我尝试将 MySQL 数据库中的数据导出到 PHPexcel 时,

它总是给我这个错误

Warning: Cannot modify header information - headers already sent 

我试过 ob_start() 函数,但是当我打开我下载的 excel 时,它是空的

这是我的 PHPexcel 代码:

<?php

include("conn.php");

$query ="Select * from info";
$result = mysql_query($query);



/** Error reporting */
error_reporting(E_ALL);

/** Include path **/
ini_set('include_path', ini_get('include_path').';../Classes/');

/** PHPExcel */
include 'PHPExcel.php';

/** PHPExcel_Writer_Excel2007 */
include 'PHPExcel/Writer/Excel2007.php';

// Create new PHPExcel object
echo date('H:i:s') . " Create new PHPExcel object\n";
$objPHPExcel = new PHPExcel();




// Add some data
$row1=1;
$row2=1;
$row3=1;

echo date('H:i:s') . " Add some data\n";
$objPHPExcel->setActiveSheetIndex(0);


while($row = mysql_fetch_array($result))
{
$let1 = "A".$row1."";
$let2 = "B".$row2."";
$let3 = "C".$row3."";

$objPHPExcel->getActiveSheet()->SetCellValue($let1, $row['id']);
$objPHPExcel->getActiveSheet()->SetCellValue($let2, $row['name']);
$objPHPExcel->getActiveSheet()->SetCellValue($let3, $row['age']);

$row1++;
$row2++;
$row3++;
}

$objPHPExcel->getActiveSheet()->getStyle("A1:C1")->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle("A1:C1")->getFont()->setSize(20);
$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:C1');

$objPHPExcel->getActiveSheet()->getStyle('A1')->applyFromArray(
    array(
        'fill' => array(
            'type' => PHPExcel_Style_Fill::FILL_SOLID,
            'color' => array('rgb' => 'FF0000')
        )
    )
);


header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header("Content-Disposition: attachment;filename=\"filename.xlsx\"");
header("Cache-Control: max-age=0");

exit();

?>

它可以完美地处理静态值,但是当我尝试动态添加值时,它就搞砸了。请帮忙,提前谢谢你

最佳答案

查看您的代码,您的 header() 调用表明页面内容应被视为电子表格,但您没有从电子表格对象创建任何输出。删除所有输出(您的 echo 调用),因为不可能拥有它,将您的 header 调用移至文件顶部,并从您的 Excel 类中回显原始输出。

代码如下。我移动了 header ,去除了一些垃圾并添加了 PHPExcel 手册建议的写入 STDOUT 的方式。

<?php

header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header("Content-Disposition: attachment;filename=\"filename.xlsx\"");
header("Cache-Control: max-age=0");

/** Error reporting */
error_reporting(E_ALL);

/** Include path **/
ini_set('include_path', ini_get('include_path').';../Classes/');

/** PHPExcel */
include 'PHPExcel.php';

/** PHPExcel_Writer_Excel2007 */
include 'PHPExcel/Writer/Excel2007.php';

include("conn.php");

$query ="Select * from info";
$result = mysql_query($query);

// Create new PHPExcel object
$objPHPExcel = new PHPExcel();

// Add some data
$row1=1;
$row2=1;
$row3=1;

$objPHPExcel->setActiveSheetIndex(0);

while($row = mysql_fetch_array($result))
{
    $let1 = "A".$row1."";
    $let2 = "B".$row2."";
    $let3 = "C".$row3."";

    $objPHPExcel->getActiveSheet()->SetCellValue($let1, $row['id']);
    $objPHPExcel->getActiveSheet()->SetCellValue($let2, $row['name']);
    $objPHPExcel->getActiveSheet()->SetCellValue($let3, $row['age']);

    $row1++;
    $row2++;
    $row3++;
}

$objPHPExcel->getActiveSheet()->getStyle("A1:C1")->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle("A1:C1")->getFont()->setSize(20);
$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:C1');

$objPHPExcel->getActiveSheet()->getStyle('A1')->applyFromArray(
    array(
        'fill' => array(
            'type' => PHPExcel_Style_Fill::FILL_SOLID,
            'color' => array('rgb' => 'FF0000')
        )
    )
);

// Untested... pulled from the manual as the way to write with PHPExcel
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');                                                                                                           
$objWriter->save('php://output');

?>

关于从数据库导出时 PHPexcel 库错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20647611/

相关文章:

php - PHP_excel 的替代品

PHPExcel 返回损坏的二进制文件

php - 如何在 spout PHP excel writer 中编辑特定单元格

php 登录 curl 代码未按预期工作

php - 按子数组的计数对数组进行排序

Python MySQLdb查询参数 "IS NULL"而不是 "= NULL"

c# - 如何使用 C# 或通过 Interconnect 或 Passthru 将数据从 TitanDB 导出到 MySQL

javascript - gldatepicker 更改提交

php - PHP 中带有许多结果的 SQL

mysql - 我可以避免在此查询中重复计算吗?