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检索所需的字段/列,从而返回关联数组。

此外,您不必在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++;
}