2016-08-09 23 views
0

Ich versuche, Daten aus einer HTML-Tabelle in eine Excel-Datei mit phpExcel exportieren. Das Problem, das ich habe, ist, dass ich die Daten anscheinend nicht dazu bringen kann.

Ich habe den folgenden jquery Code, der auf einem Knopfdruck läuft, um die Daten aus der Tabelle zu bekommen und sie zum php Code bekannt zu geben.

Exportdaten jquery

function storeTblValues() 
{ 
var tableData = new Array(); 

$('#LogsTable tr').each(function(row, tr) 
{ 
    if(row == 0) //Table Headers 
    { 
     tableData[row] = 
     {    
      "LogDate" : $(tr).find('th:eq(0)').text(), 
      "LogType" : $(tr).find('th:eq(1)').text(), 
      "StartTime" : $(tr).find('th:eq(2)').text(), 
      "FinishTime" : $(tr).find('th:eq(3)').text(), 
      "Duration" : $(tr).find('th:eq(4)').text() 
     } 
    } 
    else //Table data 
    { 
     tableData[row] = 
     { 
     "LogDate" : $(tr).find('td:eq(0)').text(), 
     "LogType" : $(tr).find('td:eq(1)').text(), 
     "StartTime" : $(tr).find('td:eq(2)').text(), 
     "FinishTime" : $(tr).find('td:eq(3)').text(), 
     "Duration" : $(tr).find('td:eq(4)').text(), 
     }    
    } 
}); 
return tableData; 
} 

function exportToExcel() 
{  
    var tableData;   
    tableData = $.toJSON(storeTblValues()); 
    var tmp = "pTableData=" + tableData; 

    $.ajax({ 
     type: 'POST', 
     url: 'create_export_files.php', 
     data : tmp,  
     success : function(data) 
     { 
      window.location = 'create_export_files.php';   
     } 
    });  
} 

Top Bit der PHP-Datei die Daten Create_export_files.php

$tableData = ""; 

if (isset($_POST["pTableData"])) 
{ 
    $tableData = $_POST["pTableData"]; 
    $tableData = json_decode($tableData, TRUE); 
} 
else 
{ 
    $tableData = "empty"; 
} 


generateExcel($tableData); 

function generateExcel($tableData) 
{ 

    /** Include PHPExcel */ 
    require_once dirname(__FILE__) . '/../Classes/PHPExcel.php'; 
    // Create new PHPExcel object 
    $objPHPExcel = new PHPExcel(); 
     // Add some data 
$objPHPExcel->setActiveSheetIndex(0) 
      ->setCellValue('A1', 'hello') 
      ->setCellValue('B2', 'world!') 
      ->setCellValue('C1', 'Hello') 
      ->setCellValue('D2', 'world!'); 

// Rename worksheet 
$objPHPExcel->getActiveSheet()->setTitle('Simple'); 


// Set active sheet index to the first sheet, so Excel opens this as the first sheet 
$objPHPExcel->setActiveSheetIndex(0); 
$filename = 'export '.date('d-m-Y h:i:a').'.xlsx'; 


// Redirect output to a client’s web browser (Excel2007) 
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
header('Content-Disposition: attachment;filename="'.$filename.'"'); 
header('Cache-Control: max-age=0'); 
// If you're serving to IE 9, then the following may be needed 
header('Cache-Control: max-age=1'); 

// If you're serving to IE over SSL, then the following may be needed 
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past 
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified 
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 
header ('Pragma: public'); // HTTP/1.0 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->save('php://output'); 
} 

Empfang Ich scheine immer in den anderen Teil der Anweisung gehen zu werden. Wo gehe ich falsch?

Wenn ich das Isset-Bit um die pTableData entfernen, wird die Datei erstellt, ist aber beschädigt. Öffnen Sie es im Editor ++ Ich kann sehen, dass pTableData nicht definiert ist. Ist das, weil die PHP-Datei erneut ausgeführt wird, um den Dateidownload zu machen?

+0

Der beste Weg ist Export-Tabelle in HTML (table.html), dann die table.html zu table.xls ändern. – phper

+0

Funktioniert das auch für xlsx? –

+0

@ Al W Ja, Sie können auf diese Weise doc *, xls * -Dateien erstellen. – phper

Antwort

0

versuchen diesen Code:

<?php 
$str = "<table> 
    <tr><td>a</td><td>b</td></tr> 
    <tr><td>a</td><td>b</td></tr> 
    <tr><td>a</td><td>b</td></tr> 
    <tr><td>a</td><td>b</td></tr> 
</table> 
"; 
file_put_contents("table.xls",$str); 
+0

Ich brauche den Benutzer die Möglichkeit haben, die Datei über die zu speichern Browser statt nur an einem bestimmten Ort zu speichern. In der PHP-Datei habe ich den Code weggelassen, in dem ich phpExcel verwende, um genau das zu tun –