Ich würde gerne um Ihre Hilfe bitten.PHP Excel und Codeigniter
Ich mache ein Projekt mit CodeIgniter und ich muss neben den Charts, die ich mache, Excel-Dateien generieren. Ich verwende PHPExcel, um die Excel-Dateien zu generieren.
Ich habe den Klassenordner im Ordner "third_party" des Projekts hinzugefügt. Excel.php in den Bibliotheken-Ordner des Projektes mit den Codes
ich eine Datei erstellt genannt:
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
require_once APPPATH."/third_party/Classes/PHPExcel.php";
class Excel extends PHPExcel {
public function __construct() {
parent::__construct();
}
}
Meiner Ansicht Datei verwenden ich Ajax die Daten zu senden und es Prozess in der Steuerung, die ist wo ich die Codes für das PHPExcel platziert habe. Hier ist mein Code in der Ansicht:
$("#excel").click(function(){
var fromDate = $("#fromDate").val();
var toDate = $("#toDate").val();
var dataString = "fromDate="+fromDate+"&toDate="+toDate;
$.ajax({
//url of the function
url: '<?php echo base_url(); ?>index.php/charts/excel',
//set type post
type: 'POST',
//get the data from the input field
data: dataString,
success:function(data)
{
alert(data);
}
});
});
Hier ist mein Code in der Steuerung:
public function excel()
{
$this->load->library('Excel');
//activate worksheet number 1
$this->excel->setActiveSheetIndex(0);
//name the worksheet
$this->excel->getActiveSheet()->setTitle('Users list');
$sDate = $this->input->post('fromDate');//date_create_from_format('Y-m-d', $_POST['fromDate']);
$eDate = $this->input->post('toDate');//date_create_from_format('Y-m-d', $_POST['toDate']);
$data = $this->Charts_model->hello($sDate,$eDate);
// read data to active sheet
//print_r($data);
$row = 1;
foreach($data as $r){
$this->excel->getActiveSheet()->fromArray(array($r->emp_id, $r->emp_stat, $r->isActive, $r->dateStarted), null, 'A'.$row);
$row++;
}
$filename='just_some_random_name.xls'; //save our workbook as this file name
header('Content-Type: application/vnd.ms-excel'); //mime type
header('Content-Disposition: attachment;filename="'.$filename.'"'); //tell browser what's the file name
header('Cache-Control: max-age=0'); //no cache
//save it to Excel5 format (excel 2003 .XLS file), change this to 'Excel2007' (and adjust the filename extension, also the header mime type)
//if you want to save it as .XLSX Excel 2007 format
$objWriter = PHPExcel_IOFactory::createWriter($this->excel, 'Excel5');
//force user to download the Excel file without writing it to server's HD
$objWriter->save('php://output');
}
Der Controller scheint zu funktionieren, aber tut es herunterladen jede Excel-Datei.
Also habe ich versucht, die von der Steuerung zurückgegebene Daten und this ist, wie es aussieht, wenn alarmiert.
Ich hoffe, Sie könnten mir mit diesem helfen. Dank
UPDATE
Das Problem ist gelöst. Es stellt sich heraus, dass es bereits die Datei herunterlädt. Als ich das Verzeichnis überprüft habe, existiert die Datei.
Was ich getan habe ist, dass ich ein Anker-Tag hinzugefügt, die ausgelöst wird, wenn der Export erfolgreich ist, so dass es mich auffordern kann, dass die Datei tatsächlich heruntergeladen und unter der Seite zu sehen ist.
$("#someid").trigger("click").attr("target", "_blank");
Der Anker-Tag sieht wie folgt aus:
<a href="<?php echo base_url(); ?>/directoryofthefile/somename.xls" style="display: none;">
<input type="button" id="someid" value="Test" class="btn btn-success">
</a>
In Zukunft Debug mit 'console.log()' anstelle von 'alert()'. Es ist eine bessere Angewohnheit und ist interaktiv. – Goose