2014-10-17 196 views
0

我想顯示上表中的所有行與上面相應的列名稱,它的工作原理。問題是它從列名稱下面的結果中刪除第一行。就好像列行在某種程度上被視爲顯示結果的while循環中的一行,但我無法弄清楚。PHPExcel多個foreach循環

如果我刪除下面顯示的列名稱代碼,將顯示所有結果。

//COLUMN NAMES 
foreach($headings as $heading) { 

    $objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$heading); 
    $col++; 

} 

所有的代碼如下所示。

$query = "SELECT * FROM `" . $_SESSION['sess_table'] . "` ORDER by ID ASC"; 

if ($result = $mysqli->query($query)) { 

    $objPHPExcel = new PHPExcel(); 
    $objPHPExcel->getActiveSheet()->setTitle($excelTitle); 

    $headingsrow = $result->fetch_assoc(); 
    $headings = array_keys($headingsrow); 

    //COLUMN NAMES 
    $rowNumber = 1; 
    $col = 'A'; 
    foreach($headings as $heading) { 

     $objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$heading); 
     $col++; 

    } 

    //RESULTS 
    $rowNumber = 3; 
    while ($row = $result->fetch_row()) { 

     $col = 'A'; 
     foreach($row as $key => $cell) { 

      $objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$cell); 
      $col++; 

     } 

     $rowNumber++; 

    } 

    $objPHPExcel->getActiveSheet()->freezePane('A2'); 

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 

    header('Content-Type: application/vnd.ms-excel'); 
    header('Content-Disposition: attachment;filename="' . $excelFilename . '.xls"'); 
    header('Cache-Control: max-age=0'); 

    $objWriter->save('php://output'); 
    exit(); 

} 
+0

如果我的數據理解是正確的,你必須增加$ rowNumber而不是$ col。 – Dhanendran 2014-10-17 12:05:24

+0

'$ headingsrow = $ result-> fetch_assoc();'不只是獲取您的標題,它還會獲取您的第一行數據,然後丟棄它 – 2014-10-17 17:04:17

回答

1

在你的代碼,

$rowNumber = 1; 
$col = 'A'; 
foreach($headings as $heading) { 

    $objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$heading); 
    $col++; 

} 

你已經增加了$山坳值,而不是增加$ ROWNUMBER價值。

試試這個,

$rowNumber = 1; 
$col = 'A'; 
foreach($headings as $heading) { 

    $objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$heading); 
    $rowNumber++; 

} 
+0

不,那不是。該代碼僅適用於顯示正確的列名稱。下面的代碼是忽略了我遇到問題的第一行的結果。 – PatrikB 2014-10-17 12:45:14

0

您要提取的第一行檢索您的標題,但隨後放棄它,即使它包含要寫入以及

if ($result = $mysqli->query($query)) { 

    $objPHPExcel = new PHPExcel(); 
    $objPHPExcel->getActiveSheet()->setTitle($excelTitle); 

    $row = $result->fetch_assoc(); 
    $headings = array_keys($row); 

    //COLUMN NAMES 
    $rowNumber = 1; 
    $col = 'A'; 
    foreach($headings as $heading) { 

     $objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$heading); 
     $col++; 

    } 

    //RESULTS 
    $rowNumber = 3; 
    do { 
     $col = 'A'; 
     foreach($row as $key => $cell) { 

      $objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$cell); 
      $col++; 

     } 

     $rowNumber++; 

    } while ($row = $result->fetch_row()); 

}