PHPExcel如何动态设置单元格的值

51

如何使用PHPExcel库动态设置单元格/列的值?

我从MySQL数据库获取结果集,并希望使用PHPExcel库以Excel格式编写数据。查看示例后,我需要动态设置单元格/列的值。

$objPHPExcel->getActiveSheet()->setCellValue('A1', 'cell value here');

提示我们必须将单元格/列引用硬编码为“A1”,然后将其写入单元格/列A1。我如何根据行和相应的列值从结果集中递增单元格/列和/或行引用?

请指教。

2个回答

120

我假设你已经连接到了你的数据库。

$sql = "SELECT * FROM my_table";
$result = mysql_query($sql);

$row = 1; // 1-based index
while($row_data = mysql_fetch_assoc($result)) {
    $col = 0;
    foreach($row_data as $key=>$value) {
        $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $value);
        $col++;
    }
    $row++;
}

8
手册中的一条注释:在 PHPExcel 中,列索引是以 0 为基础的,而行索引是以 1 为基础的。这意味着 'A1' 相当于 (0,1)。 - Álvaro González
4
每次for循环后,您还需要重置$col变量。在"$row ++"之后添加"$col = 0;"即可。 - liz

6

我在php方面的经验不多,但从逻辑上讲,这是我会做的事情。

  1. 循环遍历MySQL的结果集
  2. 在Excel中,你应该已经知道A、B、C应该是什么,因为这些是列,你也知道你要返回多少列。
  3. 行号可以每次循环增加。

下面是一些说明这种技术的伪代码:

    for (int i = 0; i < MySQLResults.count; i++){
         $objPHPExcel->getActiveSheet()->setCellValue('A' . (string)(i + 1), MySQLResults[i].name); 
        // Add 1 to i because Excel Rows start at 1, not 0, so row will always be one off
         $objPHPExcel->getActiveSheet()->setCellValue('B' . (string)(i + 1), MySQLResults[i].number);
         $objPHPExcel->getActiveSheet()->setCellValue('C' . (string)(i + 1), MySQLResults[i].email);
    }

结果可能不是一对一的,而是将许多数据行写入列中,这需要一个循环来遍历列。 - Steven Scott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接