PHP到Excel:用循环填充输出的Excel文件

时间:2015-11-25 10:18:50

标签: php excel loops counter

我想创建一个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文件将始终只包含一行..

有你的想法吗?

非常感谢!

2 个答案:

答案 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++;
}