如何使用 mysqli 导出到包含多个工作表的 excel 文件,其中数据来自数据库
how to export to excel file with multiple sheets wherein data is from database using mysqli
我是 phpexcel oops 概念的新手。
我正在尝试做一些事情,比如我有一些数据,我正在尝试根据开始日期、截止日期和会话(如早餐、午餐和晚餐)导出多张表格。
我几乎已经到达但无法迭代这些行。
任何帮助都将有助于完成它。
下面是我试过的代码。
<?php
error_reporting(E_ALL);
ini_set("display_errors", "ON");
require_once 'PHPExcel.php';
require_once 'PHPExcel/IOFactory.php';
include 'db.php';
$xls_filename = 'Data' . date('d-m-Y') . '.xls'; // Define Excel (.xls) file name
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$heading = array(
'id' => 'S.No',
'date' => 'Date',
'item_name' => 'Item',
'qty_in' => 'Quantity (dine in)',
'qty_out' => 'Quantity (parcel)',
'price' => 'Total Quantity',
'total' => 'Total Price',
);
$no_of_cols = count($heading);
$rowNumberH = 1;
$colH = 'A';
$columns = array('0' => 'A', '1' => 'B', '2' => 'C', '3' => 'D', '4' => 'E', '5' => 'F', '6' => 'G', '7' => 'H', '8' => 'I', '9' => 'J', '10' => 'K', '11' => 'L', '12' => 'M', '13' => 'N', '14' => 'O', '15' => 'P', '16' => 'Q', '17' => 'R', '18' => 'S', '19' => 'T', '20' => 'U', '21' => 'V', '22' => 'W', '23' => 'X', '24' => 'Y', '25' => 'Z');
$q = $conn->query("SELECT * FROM main");
if (mysqli_num_rows($q) > 0) {
foreach ($heading as $h) {
$objPHPExcel->getActiveSheet()->setCellValue($colH . $rowNumberH, $h);
$objPHPExcel->getActiveSheet()->getColumnDimension($colH)->setWidth(25);
$colH++;
}
$row = 2;
while ($row_q = mysqli_fetch_assoc($q)) {
$i = 0;
foreach ($row_q as $key => $value) {
if ($key == 'location')
continue;
$objPHPExcel->getActiveSheet()->setCellValue($columns[$i] . $row, $row_q[$key]);
$i++;
}
}
}
header("Content-Type: application/xls");
header("Content-Disposition: attachment; filename=$xls_filename");
header("Pragma: no-cache");
header("Expires: 0");
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
?>
代码只打印一行。
在 while 循环中递增 $row。希望有用。
已编辑:
我要提到我添加了 $row++ 的代码片段。
我在 while 循环的末尾添加了 $row++ ,当我在我的计算机上测试它时它对我有用。我通过像您的 table 一样创建 table 来实现您的代码。我还在这段代码中测试了不同类型的 table 并且效果很好。
$q = $conn->query("SELECT * FROM student");
if (mysqli_num_rows($q) > 0) {
foreach ($heading as $h) {
$objPHPExcel->getActiveSheet()->setCellValue($colH . $rowNumberH, $h);
$objPHPExcel->getActiveSheet()->getColumnDimension($colH)->setWidth(25);
$colH++;
}
$row = 2;
while ($row_q = mysqli_fetch_assoc($q)) {
$i = 0;
foreach ($row_q as $key => $value) {
if ($key == 'location')
continue;
$objPHPExcel->getActiveSheet()->setCellValue($columns[$i] . $row, $row_q[$key]);
$i++;
}
$row++; // $row is added only in your code.
}
}
您可以做的是:
改为使用此函数:
$objPHPExcel->setActiveSheetIndex(0)->setCellValueByColumnAndRow($col,$row,"Name");
$col 和 $row 都是整数。
如果你会使用
$objPHPExcel->setActiveSheetIndex(0)->setCellValueByColumnAndRow(0,1,"Name");
姓名将打印在单元格 A1 上。
使用此方法将消除您是否实际移动到下一行的歧义。
我是 phpexcel oops 概念的新手。
我正在尝试做一些事情,比如我有一些数据,我正在尝试根据开始日期、截止日期和会话(如早餐、午餐和晚餐)导出多张表格。
我几乎已经到达但无法迭代这些行。
任何帮助都将有助于完成它。
下面是我试过的代码。
<?php
error_reporting(E_ALL);
ini_set("display_errors", "ON");
require_once 'PHPExcel.php';
require_once 'PHPExcel/IOFactory.php';
include 'db.php';
$xls_filename = 'Data' . date('d-m-Y') . '.xls'; // Define Excel (.xls) file name
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$heading = array(
'id' => 'S.No',
'date' => 'Date',
'item_name' => 'Item',
'qty_in' => 'Quantity (dine in)',
'qty_out' => 'Quantity (parcel)',
'price' => 'Total Quantity',
'total' => 'Total Price',
);
$no_of_cols = count($heading);
$rowNumberH = 1;
$colH = 'A';
$columns = array('0' => 'A', '1' => 'B', '2' => 'C', '3' => 'D', '4' => 'E', '5' => 'F', '6' => 'G', '7' => 'H', '8' => 'I', '9' => 'J', '10' => 'K', '11' => 'L', '12' => 'M', '13' => 'N', '14' => 'O', '15' => 'P', '16' => 'Q', '17' => 'R', '18' => 'S', '19' => 'T', '20' => 'U', '21' => 'V', '22' => 'W', '23' => 'X', '24' => 'Y', '25' => 'Z');
$q = $conn->query("SELECT * FROM main");
if (mysqli_num_rows($q) > 0) {
foreach ($heading as $h) {
$objPHPExcel->getActiveSheet()->setCellValue($colH . $rowNumberH, $h);
$objPHPExcel->getActiveSheet()->getColumnDimension($colH)->setWidth(25);
$colH++;
}
$row = 2;
while ($row_q = mysqli_fetch_assoc($q)) {
$i = 0;
foreach ($row_q as $key => $value) {
if ($key == 'location')
continue;
$objPHPExcel->getActiveSheet()->setCellValue($columns[$i] . $row, $row_q[$key]);
$i++;
}
}
}
header("Content-Type: application/xls");
header("Content-Disposition: attachment; filename=$xls_filename");
header("Pragma: no-cache");
header("Expires: 0");
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
?>
代码只打印一行。
在 while 循环中递增 $row。希望有用。
已编辑: 我要提到我添加了 $row++ 的代码片段。
我在 while 循环的末尾添加了 $row++ ,当我在我的计算机上测试它时它对我有用。我通过像您的 table 一样创建 table 来实现您的代码。我还在这段代码中测试了不同类型的 table 并且效果很好。
$q = $conn->query("SELECT * FROM student");
if (mysqli_num_rows($q) > 0) {
foreach ($heading as $h) {
$objPHPExcel->getActiveSheet()->setCellValue($colH . $rowNumberH, $h);
$objPHPExcel->getActiveSheet()->getColumnDimension($colH)->setWidth(25);
$colH++;
}
$row = 2;
while ($row_q = mysqli_fetch_assoc($q)) {
$i = 0;
foreach ($row_q as $key => $value) {
if ($key == 'location')
continue;
$objPHPExcel->getActiveSheet()->setCellValue($columns[$i] . $row, $row_q[$key]);
$i++;
}
$row++; // $row is added only in your code.
}
}
您可以做的是:
改为使用此函数:
$objPHPExcel->setActiveSheetIndex(0)->setCellValueByColumnAndRow($col,$row,"Name");
$col 和 $row 都是整数。
如果你会使用
$objPHPExcel->setActiveSheetIndex(0)->setCellValueByColumnAndRow(0,1,"Name");
姓名将打印在单元格 A1 上。
使用此方法将消除您是否实际移动到下一行的歧义。