我想创建一个 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
条件的字段。
最后,您应该将已弃用的 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
}
首先,不要在每个循环中实例化您的工作簿和工作表,而是在之前实例化一次。
其次,您的参数顺序错误,先是列
,然后是行
,而不是方法名称中明确指出的相反顺序。
关于PHP 到 Excel : fill the output Excel file with a loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33913828/