在php excel上打印变量
我想从数据库中获取数据并将其保存为excel文件。 到目前为止我得到了什么(创建连接和新的phpexcel对象): 然后我从数据库中获取数据:在php excel上打印变量,php,excel,Php,Excel,我想从数据库中获取数据并将其保存为excel文件。 到目前为止我得到了什么(创建连接和新的phpexcel对象): 然后我从数据库中获取数据: // 1.Get data // data for final table // format is [username][projectNo] => [process1, process2, ..., processN] $result = []; // map project no to its title $projectNoToTitle
// 1.Get data
// data for final table
// format is [username][projectNo] => [process1, process2, ..., processN]
$result = [];
// map project no to its title
$projectNoToTitle = [];
$sql = '
SELECT uid, username
FROM `user`
ORDER BY username
';
$query = mysqli_query($conn, $sql);
// for each user
while ($data = mysqli_fetch_assoc($query))
{
$sql2 = '
SELECT a.* FROM
(
(
-- select pairs project - leader
SELECT p.projectNo, p.title, CONCAT(pr.process, "(ld)") AS process
FROM project p
LEFT JOIN proc_leader pr ON p.projectNo = pr.projectNo
AND pr.proc_leader = "' . mysqli_real_escape_string($conn, $data['username']) . '"
)
-- union all means we union result of queries, which have structure
-- and don\'t remove duplicates (it\'s faster than UNION and
-- more logical because in our sittuation it won\'t be any duplicates)
UNION ALL
(
-- select pairs project - checker
SELECT p.projectNo, p.title, CONCAT(pch.process, "(chk)") AS process
FROM project p
LEFT JOIN proc_checker pch ON p.projectNo = pch.projectNo
AND pch.proc_checker = "' . mysqli_real_escape_string($conn, $data['username']) . '"
)
UNION ALL
(
-- select pairs project - checker
SELECT p.projectNo, p.title, CONCAT(pch.process, "(staff)") AS process
FROM project p
LEFT JOIN proc_staff pch ON p.projectNo = pch.projectNo
AND pch.proc_staff = "' . mysqli_real_escape_string($conn, $data['username']) . '"
)
) AS a
ORDER BY a.projectNo
';
$query2 = mysqli_query($conn, $sql2);
// for each project => process pair of user
while ($data2 = mysqli_fetch_assoc($query2)) {
$username = $data['username'];
$projectNo = $data2['projectNo'];
$projectTitle = $data2['title'];
$process = $data2['process'];
$projectNoToTitle[$projectNo] = $projectTitle;
if (!isset($result[$username])) {
$result[$username] = [];
}
if (!isset($result[$username][$projectNo])) {
$result[$username][$projectNo] = [];
}
if ($process) {
$result[$username][$projectNo][] = $process;
}
}
}
然后我想将收到的数据打印到excel表格中:
$Letter='B';
$Number=2;
$F = $objPHPExcel->createSheet(); //Setting index when creating
$objPHPExcel->setActiveSheetIndex(1);
// 2. Output data
if ($result)
{
// output body
$body = '';
foreach ($result as $username => $usernameData) {
$row = '' . htmlspecialchars($username) . '';
$F->setCellValue('A'.$Number, $row);
foreach ($projectNoToTitle as $projectNo => $projectTitle) {
$r = isset($usernameData[$projectNo])
? implode(', ', $usernameData[$projectNo])
: 'N/A';
$row .= '' . htmlspecialchars($r) . '';
}
$body .= $row;
}
$F->setCellValue('A'.'1', 'username');
$F->fromArray($projectNoToTitle, null, 'B1');
$F->getRowDimension($Number)->setRowHeight(20);
$F->getColumnDimension($Letter)->setWidth(40);
$F->getColumnDimension('A')->setWidth(30);
++$Number;
++$Letter;
// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="HeadCount.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}
我试图打印正文
,但它在一个单元格中提供了所有信息。喜欢
如果我只打印行
我只得到一个
如何打印所有必需的数据?我需要smth像但在excel中。我知道我可以将我得到的表保存为excel,但问题是我以后需要添加更多信息,所以我想使用phpexcel来完成。感谢您的帮助您需要在looplike@nogad声明中设置单元格值,您必须单独设置每个单元格。你不需要把一根巨大的绳子连在一起。看起来你也从来没有用
$body
anyway@nogad什么样的循环?我应该循环什么?@Cfreak是的,我试图打印它,我在一个单元格中获得了所有信息,如第一张屏幕截图所示。您已经有了循环。您需要在循环中设置单元格值。如@nogad所述,您必须单独设置每个单元格。你不需要把一根巨大的绳子连在一起。看起来你也从来没有用$body
anyway@nogad什么样的循环?我应该循环什么?@Cfreak是的,我试着打印它,我在一个单元格中得到了所有信息,就像第一张屏幕截图上一样。你已经有了循环
$Letter='B';
$Number=2;
$F = $objPHPExcel->createSheet(); //Setting index when creating
$objPHPExcel->setActiveSheetIndex(1);
// 2. Output data
if ($result)
{
// output body
$body = '';
foreach ($result as $username => $usernameData) {
$row = '' . htmlspecialchars($username) . '';
$F->setCellValue('A'.$Number, $row);
foreach ($projectNoToTitle as $projectNo => $projectTitle) {
$r = isset($usernameData[$projectNo])
? implode(', ', $usernameData[$projectNo])
: 'N/A';
$row .= '' . htmlspecialchars($r) . '';
}
$body .= $row;
}
$F->setCellValue('A'.'1', 'username');
$F->fromArray($projectNoToTitle, null, 'B1');
$F->getRowDimension($Number)->setRowHeight(20);
$F->getColumnDimension($Letter)->setWidth(40);
$F->getColumnDimension('A')->setWidth(30);
++$Number;
++$Letter;
// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="HeadCount.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}