PHPExcel: Télécharger le fichier Excel sur le côté client
Le problème a été résolu: Pour les autres utilisateurs qui peuvent avoir ce problème - avis de l'encodage du fichier PHP. Si vous utilisez PHPExcel il doit être ANSII d'encodage et de ne pas l'utf-8, sinon le EXCEL sera téléchargé corruption. Les en-Têtes qui ont été ajoutés (réponse 1) a résolu le problème après j'ai changé l'encodage du fichier lui-même.
Je suis à l'aide de PHPExcel afin de créer un fichier EXCEL à partir d'une table MYSQL DB, de sorte que l'utilisateur peut télécharger sur son ordinateur.
Le code soufflet crée un bon fichier Excel, mais le problème est qu'il est téléchargé sur mon serveur. J'ai lu dans PHPExcel manuel que j'ai besoin d'ajouter des en-têtes:
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$name.'.xls"');
header('Cache-Control: max-age=0');
header('Cache-Control: max-age=1');
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, 'Excel5');
$objWriter->save('php://output');
Mais si je fais ça, le fichier téléchargé est:
1. A quelques jibrish à l'intérieur
2. Dit que Excel doit de le corriger car le fichier n'est pas bon.
Le problème est que ce fichier est enregistré comme UTF8 et si je le coder en ANSI, alors il fonctionne correctement, mais bien sûr, c'est une modification manuelle et j'ai besoin d'un travail correctement excel pour atteindre les utilisateurs.
Qu'est-ce que le bug?
Mon code qui fonctionne (mais télécharger le fichier sur le serveur):
<?php
include 'connection.php';
include 'checkUser.php';
//Getting all the needed information from the DB
$task_id=$_GET['id'];
$query2 = "SELECT * FROM projects WHERE ProjectID=$task_id";
$data2 = mysqli_query($con, $query2);
$row = mysqli_fetch_array($data2);
$project_type = $row['ProjectType'];
$project_name = $row['ProjectName'];
switch ($project_type){
case 2: $NumberOfRows=22; $project = "slivedetails"; break;
case 3: $NumberOfRows=30; $project = "plivedetails"; break;
default: $NumberOfRows=0; $project = "none";
}
//column names
if ($project="slivedetails"){
$ColumnNames = mysqli_query($con,"SHOW COLUMNS FROM slivedetails") or die("mysql error");
}
else if ($project="plivedetails"){
$ColumnNames = mysqli_query($con, "SHOW COLUMNS FROM plivedetails") or die("mysql error");
}
$query = "SELECT * FROM $project WHERE TaskID=$task_id";
$data = mysqli_query($con, $query);
$num_rows = mysqli_num_rows($data);
/** Include PHPExcel */
require_once 'PHPExcel_1.7.9_doc/Classes/PHPExcel.php';
require_once 'PHPExcel_1.7.9_doc/Classes/PHPExcel/IOFactory.php';
//create new PHPExcel object
$objPHPExcel = new PHPExcel();
$objPHPExcel = new PHPExcel();
//writer already created the first sheet for us, let's get it
$objSheet = $objPHPExcel->getActiveSheet();
//rename the sheet
$objSheet->setTitle('Task Results');
//let's bold and size the header font and write the header
//as you can see, we can specify a range of cells, like here: cells from A1 to A4
$objSheet->getStyle('A1:AD1')->getFont()->setBold(true)->setSize(12);
$char = 65;
//write header]
for ($i=1;$i<=$NumberOfRows;$i++){
$col_name = mysqli_fetch_array($ColumnNames);
$objSheet->getCell(chr($char).'1')->setValue($col_name['Field']);
$char++;
}
//Now we need to get the data from the DB. While we have a row in the result:
$rowIterator=2; //our row number. We begin from 2 because the first one is the title.
while ($RowInfo = mysqli_fetch_array($data)){
//We will fill the information based on the amount of columns:
$char = 65; //we set the first char as column A
for ($i=0;$i<$NumberOfRows;$i++){
$objSheet->getCell(chr($char).$rowIterator)->setValue($RowInfo[$i]);
$char++;
}
$rowIterator++;
}
//autosize the columns
$char = 65;
for ($i=1;$i<=$NumberOfRows;$i++){
$objSheet->getColumnDimension(chr($char))->setAutoSize(true);
$char++;
}
//create the writer
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");
$objWriter->save('results.xlsx');
?>
OriginalL'auteur Alex | 2013-10-24
Vous devez vous connecter pour publier un commentaire.
Supprimer l'inclusion suivants:
Vous avez déclaré deux fois l'objet. Supprimer l'un d'eux:
Insérer des en-têtes suivants juste avant la création de l'Écrivain:
Au lieu de la suite (qui, en fait, enregistre le fichier dans le serveur):
Insérez le code suivant (qui va créer le fichier téléchargeable):
Cela devrait résoudre le charabia de texte. Si vous avez encore ce genre de texte, insérer le code suivant avant la dernière ligne (
$objWriter->save("php://output");
):Cela a fonctionné pour moi. Espérons que cela aide.
OriginalL'auteur Placid
Cela devrait fonctionner, essayez de modifier votre code comme ceci:
non, ne fonctionne pas. Toujours beaucoup de drôle de simbols dans le fichier excel + mon excel (2010) signale que le fichier dans un format étrange. Le fichier qui est téléchargé sur mon ordi (résultats) fonctionne très bien 🙁
Le problème est que ce fichier est enregistré comme UTF8 et si je le coder en ANSI, alors il fonctionne correctement, mais bien sûr, c'est une modification manuelle et j'ai besoin d'un travail correctement excel pour atteindre les utilisateurs.
Qu'entendez-vous par "le coder en ANSI"?
OriginalL'auteur Legionar
Alex, j'ai eu le même problème. J'ai fait tous mais encore une fois le résultat était le même. Je viens de modifier
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
à
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
et changé tous
.xlsx
à.xls
.Espère que Ça va aider.
OriginalL'auteur Samir Dadash-zade