我想创建一个Excel文件(使用PhpExcel)并用MySQL查询的内容填充它。
我只有一列,所以结果如下:
$sheet->setCellValueByColumnAndRow(0, $i, $content)
所以我必须循环查询并创建一个计数器来填充与我内容的 ptlum 列的每个项目相对应的每一行。
所以目标是得到以下结果:
1 AX001
2 AX003
3 AX012
代码是:
$column = 1;
while($data = mysql_fetch_assoc($result)) {
$workbook = new PHPExcel;
$sheet = $workbook->getActiveSheet();
$sheet->setCellValueByColumnAndRow(0, $column, $data['ptlum']);
//echo($column. " " . $data['ptlum']. " ");
$column = $column + 1; //or $column++;
问题是我的Excel文件是空的.. 如果我在 setCellValueByColumnAndRow 行中放置一个数字而不是$ column,它就能正常工作。但变量不起作用.. 另一方面,如果我把“$ column = 1;”在循环内部,我的Excel文件将始终只包含一行..
有你的想法吗?
非常感谢!
答案 0 :(得分:1)
您只需将每个列的调用更改为setCellValueByColumnAndRow
并将其递增:
$sql = "SELECT ptlum FROM `ptlum` WHERE nomcom = 'AIGREFEUILLE' and RIGHT (date,4) < 2015 and RIGHT(date,4) > 0 ";
$result = mysql_query($sql);
$row = 1; // 1-based index
$column = 1;
while($data = mysql_fetch_assoc($result)) {
$sheet->setCellValueByColumnAndRow($column, $row, $data['ptlum']);
$column = $column + 1; //or $column++; if you prefer
}
如您所见,您可以使用mysql_fetch_assoc
检索所需的字段/列,并返回关联数组。
此外,您不必在WHERE
中包含SELECT
条件的字段。
最后,您应该将已弃用的mysql_*
函数替换为等效的mysqli_*
,如here所述。
修改强>
为您的&#34;新&#34;问题,这段代码应该有效:
$sql = "SELECT ptlum FROM `ptlum` WHERE nomcom = 'AIGREFEUILLE' and RIGHT (date,4) < 2015 and RIGHT(date,4) > 0 ";
$result = mysql_query($sql);
$row = 1; // 1-based index
$column = 1;
$workbook = new PHPExcel;
$sheet = $workbook->getActiveSheet();
while($data = mysql_fetch_assoc($result)) {
$sheet->setCellValueByColumnAndRow($column, $row, $data['ptlum']);
$column = $column + 1; //or $column++; if you prefer
}
首先,不要在每个循环中设置工作簿和工作表,之前执行一次。
其次,您的参数的顺序错误,它是column
然后row
,而不是方法名称中显示的反转。
答案 1 :(得分:0)
也许这就是你想要的东西:
$sql = "SELECT ptlum, RIGHT(date,4) FROM `ptlum` WHERE nomcom = 'AIGREFEUILLE' and RIGHT (date,4) < 2015 and RIGHT(date,4) > 0 ";
$result = mysql_query($sql);
$i = 0;
while($data = mysql_fetch_assoc($result)) {
$sheet->setCellValueByColumnAndRow(0, $i, $i+1); //1-based index
$sheet->setCellValueByColumnAndRow(1, $i, $data['ptlum']);
$i++;
}