Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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
如何使用php在Excel工作表上重复输出_Php_Mysql - Fatal编程技术网

如何使用php在Excel工作表上重复输出

如何使用php在Excel工作表上重复输出,php,mysql,Php,Mysql,请给我下面的代码块,将数据库中的数据填充到excel表格中,然后下载到设备中。。它对我来说工作得很好,只是我想对检索到的所有数据重复从数据库3x(即johnjohn的行,即A1、A2、A3等)中输出的每个数据。请帮助我,因为我所有的尝试都失败了,比如代码块之间的“IF条件”。。。多谢各位 require_once "Classes/PHPExcel.php"; //create PHPExcel object $excel = new PHPExce

请给我下面的代码块,将数据库中的数据填充到excel表格中,然后下载到设备中。。它对我来说工作得很好,只是我想对检索到的所有数据重复从数据库3x(即
johnjohn
的行,即A1、A2、A3等)中输出的每个数据。请帮助我,因为我所有的尝试都失败了,比如代码块之间的“IF条件”。。。多谢各位

             require_once "Classes/PHPExcel.php";
     //create PHPExcel object
     $excel = new PHPExcel();
     //database connection here
     include_once "db.php";
     //insert some data to PHPExcel object
     $excel->setActiveSheetIndex(0);

     $query =mysqli_query($mysqli,"select * from student  WHERE class='".$class."' ");
     $row=4;
     $count=0;
            while($data=mysqli_fetch_object($query)){
              if($count<2)
            {
            $excel->getActiveSheet()

                    ->setCellValue('A'.$row , $data->name)

                     ->setCellValue('B'.$row , $class)   

             ->setCellValue('C'.$row , $data->email)
             ->setCellValue('D'.$row , 'Exam');

     }


     else
     {

     }

             $row++;

             }           $count++;
     // set column dimension/width

     $excel->getActiveSheet()->getColumnDimension('A')->setWidth(10);
     $excel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
     $excel->getActiveSheet()->getColumnDimension('C')->setWidth(20);

     //make table headers
     $excel -> getActiveSheet()
     ->setCellValue('A1', 'TABLE LISTS/DATA') //this is a title
     ->setCellValue('A3', 'NAME')
     ->setCellValue('B3', 'CLASS')
     ->setCellValue('C3', 'EMAIL')


     //merging the title
     $excel->getActiveSheet()->mergeCells('A1:D1');

     //aligning
     $excel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal('center');
     //styling
     $excel->getActiveSheet()->getStyle('A1')->applyFromArray(
     array(
     'font'=>array(
     'size'=>24,
     )
     )
     );

     $excel->getActiveSheet()->getStyle('A3:C3')->applyFromArray(
     array(
     'font'=>array(
     'bold'=>true
     ),
     'borders'=>array(
     'allborders'=>array(
     'style'=> PHPExcel_Style_Border::BORDER_THIN
     )
     )
     )
     );

     //redirect to browser (download) instead of saving the result as a file

     //this is for MS Office Excel 2007 xlsx format
     header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
     header("Content-Disposition: attachment; filename=$class._Resultsheet.xlsx");

     //this is for MS Office Excel 2003 xls format
     //header('Content-Type: application/vnd.ms-excel');
     //header('Content-Disposition: attachment; filename="test.xlsx"');


     header('Cache-Control: max-age=0');

     //write the result to a file
     //for excel 2007 format
     $file = PHPExcel_IOFactory::createWriter($excel,'Excel2007');

     //for excel 2003 format
     //$file = PHPExcel_IOFactory::createWriter($excel,'Excel5');

     //output to php output instead of filename
     $file->save('php://output');

 ?>
 ```
require_once“Classes/PHPExcel.php”;
//创建PHPExcel对象
$excel=新的PHPExcel();
//这里的数据库连接
包括一次“db.php”;
//向PHPExcel对象插入一些数据
$excel->setActiveSheetIndex(0);
$query=mysqli_query($mysqli,“从学生中选择*,其中class=”“$class.”);
$row=4;
$count=0;
while($data=mysqli\u fetch\u object($query)){
如果($countgetActiveSheet()
->setCellValue('A'.$row,$data->name)
->setCellValue('B'.$行,$类)
->setCellValue('C'.$row,$data->电子邮件)
->setCellValue('D'$行,'Exam');
}
其他的
{
}
$row++;
}$count++;
//设置列尺寸/宽度
$excel->getActiveSheet()->getColumnDimension('A')->setWidth(10);
$excel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('C')->setWidth(20);
//制作表格标题
$excel->getActiveSheet()
->setCellValue('A1','表格列表/数据')//这是一个标题
->setCellValue('A3','NAME')
->setCellValue('B3','CLASS')
->setCellValue('C3','EMAIL')
//合并标题
$excel->getActiveSheet()->合并单元格('A1:D1');
//对齐
$excel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal('center');
//造型
$excel->getActiveSheet()->getStyle('A1')->applyFromArray(
排列(
'字体'=>数组(
“大小”=>24,
)
)
);
$excel->getActiveSheet()->getStyle('A3:C3')->ApplyFlomarray(
排列(
'字体'=>数组(
'bold'=>正确
),
“边框”=>数组(
“allborders”=>数组(
'style'=>PHPExcel\u style\u Border::Border\u THIN
)
)
)
);
//重定向到浏览器(下载),而不是将结果保存为文件
//这适用于MS Office Excel 2007 xlsx格式
标题('Content-Type:application/vnd.openxmlformats officedocument.spreadsheetml.sheet');
标题(“内容处置:附件;文件名=$class.\u Resultsheet.xlsx”);
//这适用于MS Office Excel 2003 xls格式
//标题('Content-Type:application/vnd.ms-excel');
//标题('Content-Disposition:attachment;filename=“test.xlsx”');
标头('Cache-Control:max age=0');
//将结果写入文件
//适用于excel 2007格式
$file=PHPExcel_IOFactory::createWriter($excel,'Excel2007');
//excel 2003格式
//$file=PHPExcel_IOFactory::createWriter($excel,'Excel5');
//输出到php输出,而不是文件名
$file->save($file)php://output');
?>
```
编辑: 对不起,我误解了你的问题,有一个技巧你可以重复行

select * 
from student cross join 
(select "" union all select "" union all select "") repeater
order by student.id
sqlfiddle

原始答案 它对我来说工作得很好,只是我想对检索到的所有数据重复从数据库3x(即John John的行,即A1、A2、A3等)中输出的每个数据

然后我建议您保持PHP代码不变,并使用MySQL从较低级别的MySQL获得所需的结果

而不是那样做

select * from student
像这样做

select
    concat(col1, ',', col1, ',', col1) as col1,
    concat(col2, ',', col2, ',', col2) as col2,
    concat(col3, ',', col3, ',', col3) as col3,
    concat(col4, ',', col4, ',', col4) as col4
    --  .....
from student
(将您喜欢的列的分隔符从
,“
更改为空格

在我看来,我认为最好选择在DB级别而不是PHP级别进行操作。这使您的DB更具可移植性,更独立于应用程序代码,例如,您可以将在PHP应用程序下工作的MySQL DB移动到JAVA应用程序下工作,而无需新的JAVA开发人员做太多工作。

EDIT: 对不起,我误解了你的问题,有一个技巧你可以重复行

select * 
from student cross join 
(select "" union all select "" union all select "") repeater
order by student.id
sqlfiddle

原始答案 它对我来说工作得很好,只是我想对检索到的所有数据重复从数据库3x(即John John的行,即A1、A2、A3等)中输出的每个数据

然后我建议您保持PHP代码不变,并使用MySQL从较低级别的MySQL获得所需的结果

而不是那样做

select * from student
像这样做

select
    concat(col1, ',', col1, ',', col1) as col1,
    concat(col2, ',', col2, ',', col2) as col2,
    concat(col3, ',', col3, ',', col3) as col3,
    concat(col4, ',', col4, ',', col4) as col4
    --  .....
from student
(将您喜欢的列的分隔符从
,“
更改为空格


在我看来,我认为最好选择在DB级别而不是PHP级别进行操作。这使您的DB更具可移植性,更独立于应用程序代码,例如,您可以将在PHP应用程序下工作的MySQL DB移动到JAVA应用程序下工作,而无需新的JAVA开发人员做太多工作。

Ok。谢谢ou,会改进的。好的。谢谢,会改进的。Concat用于连接两个或多个字符串左右。我不想加入。我希望每个重复的数据在excel工作表上都有自己的行。不要将它们合并在同一个cellOh中,对不起,我误解了这个问题,我的错!我会删除它。@user74651这是你想要的吗?是的。我一直在寻找这很难实现that@user74651查看更新,这是一个非常简单的解决方案Concat用于连接2个或多个字符串。我不想连接。我希望每个重复的数据在excel工作表上都有自己的行。不要在同一个cellOh中连接它们,抱歉我误解了问题,我的错!我将删除它。@user74651这是您想要的吗?是的,p我一直觉得很难做到that@user74651看更新,这是一个非常简单的解决方案