如何在PHPExcel中的一个单元格中插入具有相同ID的值
How to insert value with same id in one cell in PHPExcell
我有一个从 php 请求生成的 excell 文件。所以我在 excel 文件中的内容是:用户名、项目、流程。这是第一个 table 用户名:
uid| username| salary|
---+---------+-------+
1 | bob | 0 |
2 | barikan | 0 |
3 | beny | 0 |
第二个 table 过程:
projectNo| process | proc_leader|
---------+---------+------------+
1610004 | ANM BLD | barikan |
1610004 | BGD CUP | barikan |
1610005 | ANM BLD | bob |
1610006 | BGD CUP | beny |
和项目 table:
projectNo| title|
---------+------+
1610004 | TMNT |
1610005 | LEON |
1610006 | MAT |
在我的 excel 文件中,我想打印如下内容:
username| TMNT | LEON | MAT |
--------+------------------+---------+---------+
barikan | ANM BLD, BGD CUP | N/A | N/A |
beny | N/A | N/A | BGD CUP |
bob | N/A | ANM BLD | |
我可以打印项目和用户名:
$objPHPExcel = new PHPExcel();
$F = $objPHPExcel->getActiveSheet();
$F->setCellValue('A1', "Username");
$request="SELECT * FROM project";
$result=$conn->query($request);//get the result (ressource)
$Letter='B';
while($row = $result->fetch_assoc())
{//extract each record
$projectNo=$row["projectNo"];
$F->setCellValue($Letter.'1', ' '.$projectNo.' ');
$F->getRowDimension('1')->setRowHeight(20);
$F->getColumnDimension($Letter)->setWidth(30);
++$Letter;
}
$request2="SELECT * FROM user WHERE username='barikan'";
//$request2="SELECT * FROM user ORDER BY username ASC";
$result2= $conn->query($request2);//get the result (ressource)
$Number=2;
while($row2 = $result2->fetch_assoc())
{//extract each record
//$projectNum=$row2["projectNo"];
$username=$row2["username"];
$F->setCellValue('A'.$Number, $row2["username"]);
$F->getColumnDimension('A')->setWidth(20);
++$Number;
}
并且仍在研究如何为每个用户名打印进程,但现在我只为一个名字打印它:
$request3="SELECT process, projectNo FROM proc_leader INNER JOIN user pl ON (proc_leader = pl.username)
WHERE
proc_leader.proc_leader = 'barikan' ";
//proc_leader.proc_leader = '$username' AND proc_leader.projectNo = '$projectNo'";
$result3= $conn->query($request3);//get the result (ressource)
$Let='B';
while($row3 = $result3->fetch_assoc())
{//extract each record
$prNo=$row3["projectNo"];
$F->setCellValue($Let.'2', ''.$prNo.' '.$row3["process"].'');
++$Let;
//++$Number;
}
那么如何将具有相同id的进程放在同一个cell中呢?谢谢
编辑
好吧,感谢使用 group_concat 的想法,但是当我 运行 sql 我不知道所有的名字。看,这是我的 proc_leader table:
proc_leader
以及我在 运行 查询后得到的结果:
SELECT projectNo, group_concat(process) AS processes, proc_leader
FROM proc_leader
GROUP BY projectNo
result
缺少用户名 "candy"。为什么?
感谢帮助
如果我理解正确,您可以将项目 table 的查询更改为:
SELECT projectNo, group_concat(process) AS processes, proc_leader
FROM project
GROUP BY projectNo;
取决于 MySQL 的版本,可能需要
SELECT projectNo, group_concat(process) AS processes, ANY_VALUE(proc_leader)
FROM project
GROUP BY projectNo;
group_concat 函数将所有进程分组并用逗号分隔它们,就像您在所需 excel sheet 中显示的那样 - 可以使用名称 "processes" 访问该列.
http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html
MySQL 的更高版本不允许选择非聚合列 - 除非您明确告诉它您不介意值来自哪一行,例如使用 ANY_VALUE功能。
http://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
如果您对特定项目有不同的 proc_leader 否 - 那么查询可能是:
SELECT projectNo, group_concat(process) AS processes, proc_leader
FROM project
GROUP BY projectNo, proc_leader;
另一种方法是在 excel sheet 中搜索具有匹配用户名的行,然后搜索正确的列并附加到匹配的单元格。
我有一个从 php 请求生成的 excell 文件。所以我在 excel 文件中的内容是:用户名、项目、流程。这是第一个 table 用户名:
uid| username| salary|
---+---------+-------+
1 | bob | 0 |
2 | barikan | 0 |
3 | beny | 0 |
第二个 table 过程:
projectNo| process | proc_leader|
---------+---------+------------+
1610004 | ANM BLD | barikan |
1610004 | BGD CUP | barikan |
1610005 | ANM BLD | bob |
1610006 | BGD CUP | beny |
和项目 table:
projectNo| title|
---------+------+
1610004 | TMNT |
1610005 | LEON |
1610006 | MAT |
在我的 excel 文件中,我想打印如下内容:
username| TMNT | LEON | MAT |
--------+------------------+---------+---------+
barikan | ANM BLD, BGD CUP | N/A | N/A |
beny | N/A | N/A | BGD CUP |
bob | N/A | ANM BLD | |
我可以打印项目和用户名:
$objPHPExcel = new PHPExcel();
$F = $objPHPExcel->getActiveSheet();
$F->setCellValue('A1', "Username");
$request="SELECT * FROM project";
$result=$conn->query($request);//get the result (ressource)
$Letter='B';
while($row = $result->fetch_assoc())
{//extract each record
$projectNo=$row["projectNo"];
$F->setCellValue($Letter.'1', ' '.$projectNo.' ');
$F->getRowDimension('1')->setRowHeight(20);
$F->getColumnDimension($Letter)->setWidth(30);
++$Letter;
}
$request2="SELECT * FROM user WHERE username='barikan'";
//$request2="SELECT * FROM user ORDER BY username ASC";
$result2= $conn->query($request2);//get the result (ressource)
$Number=2;
while($row2 = $result2->fetch_assoc())
{//extract each record
//$projectNum=$row2["projectNo"];
$username=$row2["username"];
$F->setCellValue('A'.$Number, $row2["username"]);
$F->getColumnDimension('A')->setWidth(20);
++$Number;
}
并且仍在研究如何为每个用户名打印进程,但现在我只为一个名字打印它:
$request3="SELECT process, projectNo FROM proc_leader INNER JOIN user pl ON (proc_leader = pl.username)
WHERE
proc_leader.proc_leader = 'barikan' ";
//proc_leader.proc_leader = '$username' AND proc_leader.projectNo = '$projectNo'";
$result3= $conn->query($request3);//get the result (ressource)
$Let='B';
while($row3 = $result3->fetch_assoc())
{//extract each record
$prNo=$row3["projectNo"];
$F->setCellValue($Let.'2', ''.$prNo.' '.$row3["process"].'');
++$Let;
//++$Number;
}
那么如何将具有相同id的进程放在同一个cell中呢?谢谢
编辑
好吧,感谢使用 group_concat 的想法,但是当我 运行 sql 我不知道所有的名字。看,这是我的 proc_leader table: proc_leader
以及我在 运行 查询后得到的结果:
SELECT projectNo, group_concat(process) AS processes, proc_leader
FROM proc_leader
GROUP BY projectNo
result
缺少用户名 "candy"。为什么? 感谢帮助
如果我理解正确,您可以将项目 table 的查询更改为:
SELECT projectNo, group_concat(process) AS processes, proc_leader
FROM project
GROUP BY projectNo;
取决于 MySQL 的版本,可能需要
SELECT projectNo, group_concat(process) AS processes, ANY_VALUE(proc_leader)
FROM project
GROUP BY projectNo;
group_concat 函数将所有进程分组并用逗号分隔它们,就像您在所需 excel sheet 中显示的那样 - 可以使用名称 "processes" 访问该列. http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html
MySQL 的更高版本不允许选择非聚合列 - 除非您明确告诉它您不介意值来自哪一行,例如使用 ANY_VALUE功能。 http://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
如果您对特定项目有不同的 proc_leader 否 - 那么查询可能是:
SELECT projectNo, group_concat(process) AS processes, proc_leader
FROM project
GROUP BY projectNo, proc_leader;
另一种方法是在 excel sheet 中搜索具有匹配用户名的行,然后搜索正确的列并附加到匹配的单元格。