2014-10-17 3 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

+0

'$ headingsrow = $ result-> fetch_assoc();' не просто извлекает ваши заголовки, но также извлекает вашу первую строку данных, которую вы затем отбрасываете –

ответ

1

В коде

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

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

} 

вы увеличили значение $ Col вместо увеличения значения $ ROWNUMBER.

попробовать это,

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

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

} 
+0

Нет, это не так. Этот код предназначен только для имен столбцов, которые отображаются правильно. Ниже приведен код для результатов, которые игнорируют первую строку, с которой у меня возникают проблемы. – PatrikB

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()); 

}