2010-04-06 152 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