2010-04-06 151 views
45

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

我从MySQL数据库中提取结果集,我想用ExcelExcel库以excel格式写数据。综观例如

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

表明我们有硬编码细胞/列引用作为“A1”,然后将其写入到细胞/列A1。我如何根据结果集中的行和相应列值来增加单元格/列和/或行引用?

请指导。

回答

108

我asume您已连接到你的数据库了。

$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++; 
} 
+0

谢谢伊沃萨维耶夫。 – Asif 2010-04-07 11:19:43

+0

不客气。 – 2010-04-07 13:10:45

+6

手册中的说明:在PHPExcel列索引中,索引为0,而行索引为1。这意味着'A1'〜(0,1) – 2011-02-15 17:16:05

5

我没有太多的使用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); 
    } 
+0

结果可能不是一对一,但是许多数据行写入到列中,这需要一个循环来遍历列。 – 2013-03-01 21:52:37