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?
Der beste Weg ist Export-Tabelle in HTML (table.html), dann die table.html zu table.xls ändern. – phper
Funktioniert das auch für xlsx? –
@ Al W Ja, Sie können auf diese Weise doc *, xls * -Dateien erstellen. – phper