Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从数据库导出时发生PHPexcel库错误_Php_Mysql_Phpexcel - Fatal编程技术网

从数据库导出时发生PHPexcel库错误

从数据库导出时发生PHPexcel库错误,php,mysql,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 * fr

我正在使用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()调用表示页面内容应被视为电子表格,但您不会从电子表格对象创建任何输出。删除所有输出(回显调用),因为不可能获得它,请将头调用移动到文件顶部,并从Excel类中回显原始输出

代码如下。我已经移动了标题,删除了一些垃圾,并添加了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');

?>

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

代码如下。我已经移动了标题,删除了一些垃圾,并添加了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');

?>



如果您有PHP之上的任何东西,无论是空间、cookie还是会话,都可能导致这种情况。字节顺序标记也会导致这种情况。我没有任何其他代码超过我的php。。。它只是纯php,没有会话,没有cookieTry,然后把你的标题放在你的开始
下面,你正在
echo
-ing各种调试信息到浏览器中,比如
echo date('H:i:s')。“创建新的PHPExcel对象\n”。去掉那个。只输出excel文件。如果您想查看发送头的内容和位置,请使用headers_sent($file,$line)如果您有PHP以上的内容,无论是空间、cookie还是会话,都可能导致此问题。字节顺序标记也会导致这种情况。我没有任何其他代码超过我的php。。。它只是纯php,没有会话,没有cookieTry,然后把你的标题放在你的开始
下面,你正在
echo
-ing各种调试信息到浏览器中,比如
echo date('H:i:s')。“创建新的PHPExcel对象\n”。去掉那个。仅输出excel文件。如果您想查看发送的标题是什么以及在哪里,请使用headers\u sent($file,$line)我尝试删除回音并再次放置ob\u start()。。。它设法被下载,但当我打开excel文件时,再次出现错误弹出窗口,请参见上面的编辑。我已经重构了您的代码,并向stdout添加了一个write。可能需要一些调整,因为我只是按照手册操作-我以前几乎没有使用过PHPExcel。正如我在上面的评论中所述,这一行
ini_集('include_path',ini_get('include_path');../Classes/')
中有一个分号/类/“
我很确定它必须是冒号。@phil lavin谢谢。。。它现在起作用了……;)你是一个节省工作的好消息。很高兴再次看到一个幸福的结局<代码>+1
当之无愧。干得好,菲尔。我试着消除回声,然后再次启动ob_start()。。。它设法被下载,但当我打开excel文件时,再次出现错误弹出窗口,请参见上面的编辑。我已经重构了您的代码,并向stdout添加了一个write。可能需要一些调整,因为我只是按照手册操作-我以前几乎没有使用过PHPExcel。正如我在上面的评论中所述,这一行
ini_集('include_path',ini_get('include_path');../Classes/')
中有一个分号/类/“
我很确定它必须是冒号。@phil lavin谢谢。。。它现在起作用了……;)你是一个节省工作的好消息。很高兴再次看到一个幸福的结局<代码>+1
当之无愧。干得好,菲尔。