我想创建一个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文件将始终只包含一行。。
你有主意吗?
非常感谢!
您只需要将每列的调用更改为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
检索所需的字段/列,从而返回关联数组。
此外,您不必在SELECT
中包含WHERE
条件的字段。
最后,您应该用等价的mysqli_*
替换弃用的mysql_*
函数,如下所述。
编辑:
对于您的"新"问题,此代码应该有效:
$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
,而不是相反的,正如方法名称中所解释的那样。
也许这就是你想要的东西:
$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++;
}