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

我想创build一个Excel文件(使用PhpExcel),并填写一个MySQL查询的内容。

我只有一列,所以结果如下所示:

$sheet->setCellValueByColumnAndRow(0, $i, $content) 

所以我必须在我的查询中循环,并创build一个计数器来填充对应于我的内容的列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线它的工作原理。 但variables不起作用。另一方面,如果我把“$列= 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_*来replace不推荐使用的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++; }