2017-04-10 2 views
0

Ich versuche, PHPexcel-Plugin verwenden, um herunterladbare Excel-Datei aus MySQL-Daten zu generieren. Leider bekomme ich nur die Spaltenüberschriften und nicht ihre Werte in der heruntergeladenen Excel-DateiKeine Werte in herunterladbaren Excel-Datei mit PHPexcel-Plugin generiert

Wohin gehe ich falsch? Außerdem möchte ich, dass Unicode-Zeichen korrekt angezeigt werden. Nach meinem Code der downloadexcel.php Datei -

<?php 
require_once 'Classes/PHPExcel.php'; 
require_once 'Classes/PHPExcel/Writer/Excel2007.php'; 

$objPHPExcel = new PHPExcel(); 

$data=array(); 

$sql="SELECT s.t_id,s.t_text,p.user_name,p.description,s.time,p.place from t 
AS s INNER JOIN users AS p ON s.user_name=p.user_name order by s.time desc"; 
$result = mysqli_query($con,$sql); 

while($row = mysqli_fetch_array($result)) { 
    $array=array("T Link" => $row[0],"T"=>$row[1] , "User Name" => $row[2] , 
"User Profile" => $row[3], "Time" => $row[4] , "Place" => $row[5]); 
    array_push($data,$array); 
    } 

$objPHPExcel->getActiveSheet()->setCellValue('A1', 'T Link'); 
$objPHPExcel->getActiveSheet()->setCellValue('B1', 'T'); 
$objPHPExcel->getActiveSheet()->setCellValue('C1', 'User Name'); 
$objPHPExcel->getActiveSheet()->setCellValue('D1', 'User Profile'); 
$objPHPExcel->getActiveSheet()->setCellValue('E1', 'Time'); 
$objPHPExcel->getActiveSheet()->setCellValue('F1', 'Place'); 

$row=2; 
foreach($data as $row->$value) { 
$objPHPExcel->getActiveSheet()->setCellValue('A'.$row,$value->t_id); 
$objPHPExcel->getActiveSheet()->setCellValue('B'.$row,$value->t_text); 
$objPHPExcel->getActiveSheet()->setCellValue('C'.$row,$value->user_name); 
$objPHPExcel->getActiveSheet()->setCellValue('D'.$row,$value->description); 
$objPHPExcel->getActiveSheet()->setCellValue('E'.$row,$value->time); 
$objPHPExcel->getActiveSheet()->setCellValue('F'.$row,$value->place); 
    $row++; 
} 
header('Content-Type: application/vnd.openxmlformats- 
officedocument.spreadsheetml.sheet'); 
header('Content-Disposition: attachment;filename="helloworld.xlsx"'); 
header('Cache-Control: max-age=0'); 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->save('php://output'); 
?> 

Basierend auf Kommentare von Mark Baker, bearbeiten den Code aber noch kein Ergebnis bekommen. Das ist mein bearbeitet Code -

<?php 
require_once 'Classes/PHPExcel.php'; 
require_once 'Classes/PHPExcel/Writer/Excel2007.php'; 

$objPHPExcel = new PHPExcel(); 

$data=array(); 

$sql="SELECT s.t_id,s.t_text,p.user_name,p.description,s.time,p.place from t 
AS s INNER JOIN users AS p ON s.user_name=p.user_name order by s.time desc"; 
$result = mysqli_query($con,$sql); 

$objPHPExcel->getActiveSheet()->setCellValue('A1', 'T Link'); 
$objPHPExcel->getActiveSheet()->setCellValue('B1', 'T'); 
$objPHPExcel->getActiveSheet()->setCellValue('C1', 'User Name'); 
$objPHPExcel->getActiveSheet()->setCellValue('D1', 'User Profile'); 
$objPHPExcel->getActiveSheet()->setCellValue('E1', 'Time'); 
$objPHPExcel->getActiveSheet()->setCellValue('F1', 'Place'); 

while ($row = mysqli_fetch_array($result)) 
     { 
$n=2; 
foreach($data as $row) { 
$objPHPExcel->getActiveSheet()->setCellValue('A'.$n,$row['t_id']); 
$objPHPExcel->getActiveSheet()->setCellValue('B'.$n,$row['t_text']); 
$objPHPExcel->getActiveSheet()->setCellValue('C'.$n,$row['user_name']); 
$objPHPExcel->getActiveSheet()->setCellValue('D'.$n,$row['description']); 
$objPHPExcel->getActiveSheet()->setCellValue('E'.$n,$row['time']); 
$objPHPExcel->getActiveSheet()->setCellValue('F'.$n,$row['place']); 
    $n++; 
    } 
} 
header('Content-Type: application/vnd.openxmlformats- 
officedocument.spreadsheetml.sheet'); 
header('Content-Disposition: attachment;filename="helloworld.xlsx"'); 
header('Cache-Control: max-age=0'); 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->save('php://output'); 
?> 
+0

Die __array__, die Sie in $ data sind drängen hat keine Ähnlichkeit mit dem __model__, die Sie in 'foreach zuzugreifst ($ data als $ row -> $ value) ' –

+0

$ row wird für die Zeilennummer verwendet; aber auch als Modellhalter: '$ row = 2; foreach ($ Daten als $ Zeile -> $ Wert) {' –

+0

Das sind 2 Probleme mit Ihrem Code; beides verhindert, dass es richtig funktioniert –

Antwort

0

Ändern Sie diese Zeile:

foreach($data as $row->$value) { 

zu

foreach($data as $row => $value) { 

"->" Operator wird mit Objekten verwendet. Der Unterschied zwischen den beiden Betreibern wird hier erklärt: https://stackoverflow.com/a/14037376/577778

Aktualisiert-Code

<?php 
require_once 'Classes/PHPExcel.php'; 
require_once 'Classes/PHPExcel/Writer/Excel2007.php'; 

$objPHPExcel = new PHPExcel(); 

$data=array(); 

$sql="SELECT s.t_id,s.t_text,p.user_name,p.description,s.time,p.place from t 
AS s INNER JOIN users AS p ON s.user_name=p.user_name order by s.time desc"; 
$result = mysqli_query($con,$sql); 

$objPHPExcel->getActiveSheet()->setCellValue('A1', 'T Link'); 
$objPHPExcel->getActiveSheet()->setCellValue('B1', 'T'); 
$objPHPExcel->getActiveSheet()->setCellValue('C1', 'User Name'); 
$objPHPExcel->getActiveSheet()->setCellValue('D1', 'User Profile'); 
$objPHPExcel->getActiveSheet()->setCellValue('E1', 'Time'); 
$objPHPExcel->getActiveSheet()->setCellValue('F1', 'Place'); 

$n=2; 

while ($row = mysqli_fetch_array($result)) 
     { 
$objPHPExcel->getActiveSheet()->setCellValue('A'.$n,$row['t_id']); 
$objPHPExcel->getActiveSheet()->setCellValue('B'.$n,$row['t_text']); 
$objPHPExcel->getActiveSheet()->setCellValue('C'.$n,$row['user_name']); 
$objPHPExcel->getActiveSheet()->setCellValue('D'.$n,$row['description']); 
$objPHPExcel->getActiveSheet()->setCellValue('E'.$n,$row['time']); 
$objPHPExcel->getActiveSheet()->setCellValue('F'.$n,$row['place']); 
    $n++; 
} 
header('Content-Type: application/vnd.openxmlformats- 
officedocument.spreadsheetml.sheet'); 
header('Content-Disposition: attachment;filename="helloworld.xlsx"'); 
header('Cache-Control: max-age=0'); 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->save('php://output'); 
?> 
+0

Q Hussain Bitte sehen Sie meinen bearbeiteten Code. Das funktioniert aber nicht – user20152015

+0

Im modifizierten Code glaube ich nicht, dass Sie "foreach" mehr brauchen. Versuchen Sie, den Code nach dem Entfernen auszuführen. Versuchen Sie außerdem, innerhalb von "while" den Wert von $ row ['t_id'] zu drucken. Sind Sie sicher, dass Ihre Abfrage ein Ergebnis zurückgibt? –

+0

Wenn ich foreach entferne, wie kann ich dann nachfolgende Zeilen holen? – user20152015

Verwandte Themen