Reputation: 1708
I am exporting mysql data to an excel file using phpexcel library. The code works fine. But the excel file created doesn't have column name. I want to fetch them as well. Is there any built-in method for it? What adjustment do i need to make my code? Here is my current working code:
<?php
require_once 'PHPExcel/classes/PHPExcel.php';
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$rowcount = 1;
while($row = mysqli_fetch_array($rs))
{
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowcount, $row['id']);
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowcount, $row['title']);
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowcount, $row['date']);
$rowcount++;
}
$filename = "backup-" . date("h.i.s.d-m-Y") . ".xls";
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment; filename=" . $filename);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
?>
Upvotes: 2
Views: 1848
Reputation: 1265
Use mysqli_fetch_fields for getting the field names.
I have edited your code and add column names in code. It might help you.
<?php
require_once 'PHPExcel/classes/PHPExcel.php';
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$rowcount = 1;
$fieldinfo=mysqli_fetch_fields($rs);
foreach ($fieldinfo as $val)
{
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowcount, $val->id);
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowcount, $val->title);
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowcount, $val->date);
}
$rowcount = 2;
while($row = mysqli_fetch_array($rs))
{
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowcount, $row['id']);
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowcount, $row['title']);
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowcount, $row['date']);
$rowcount++;
}
$filename = "backup-" . date("h.i.s.d-m-Y") . ".xls";
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment; filename=" . $filename);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
?>
Upvotes: 4
Reputation: 518
You need to change the code something like below to show the column name and data
//this is for showing the column name
$q = mysql_query("SHOW COLUMNS FROM table_name");
if (mysql_num_rows($q) > 0) {
while ($row_q = mysql_fetch_assoc($q)) {
$col='A';
$objPHPExcel->getActiveSheet()->SetCellValue($col.$rowcount, $row_q['Field']);
$col++;
}
$rowcount++;
}
//this is for showing coulmn data based in results
while($row_data1 = mysql_fetch_assoc($rs)){
$col=0;
foreach($row_data1 as $key=>$value){
$objPHPExcel->getActiveSheet()->SetCellValueByColumnAndRow($col, $rowcount, $value);
$col++;
}
$rowcount++;
}
Upvotes: 1
Reputation: 1958
If i am right , you were searching for something like below
Insert Title Row
$f=0;
$fChar='A';
while($f<mysql_num_fields($rs)){
$objPHPExcel->getActiveSheet()->setCellValue($fChar.'1', mysql_fetch_field($rs,$f++)->name);
$objPHPExcel->getActiveSheet()->getStyle($fChar.'1')->applyFromArray(
array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'color' => array('rgb'=>'E1E0F7'),
),
'font' => array(
'bold' => true,
)
)
);
$fChar++;
}
Now insert values
$fC=2;
while($row=mysql_fetch_array($rs,MYSQL_BOTH)){
$fChar='A';
$f=0;
while($f<mysql_num_fields($rs)){
$objPHPExcel->getActiveSheet()->setCellValue($fChar++.''.$fC, $row[$f++]);
}
$fC++;
}
Upvotes: 1