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');
?>
oh mon dieu, tu m'as sauvé la vie. J'ai déjà un mal de tête dû à l'infini de recherche de google, mais grâce à vous, je ne suis pas fou.

OriginalL'auteur Alex | 2013-10-24