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

Php to Excel : fill the output Excel file with a loop

我想创建一个 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 检索所需的 field/column,返回关联数组。

此外,您不必在 SELECT.

中包含 WHERE 条件的字段

最后,您应该将已弃用的 mysql_* 函数替换为它们的等效函数 mysqli_*,如 here 所述。

编辑:

对于您的 "new" 问题,此代码应该有效:

$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
}

首先,不要在每个循环中实例化您的工作簿和sheet,先执行一次。

其次,您的参数顺序错误,先是 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++;
}