J'essaie actuellement de déterminer le meilleur moyen de créer un fichier .xls à partir de PHP. Il me semble que tout ce que j'ai à faire est de changer le type de contenu de l'en-tête en "application/vnd.ms-Excel", puis d'afficher les données dans un format séparé par des virgules. Est-ce la meilleure façon de faire cela?
Merci pour toute aide!
Métropole
MODIFIER
Serait-il mauvais de simplement sortir les données en HTML? J'ai déjà un cours que j'aimerais étendre sur ce problème, alors je préférerais rester à l'écart d'une solution tierce. J'ai juste besoin de savoir quel serait le meilleur moyen de sortir les données pour tirer le meilleur parti de ce format de fichier.
Après avoir examiné PHPExcel, il semble que ce soit la meilleure solution à ce problème. J'apprécie toutes vos réponses et j'aurais donné trois bonnes réponses si je pouvais lol. Mais les votes devront faire :)
Cela dépend si vous voulez un fichier CSV ou un fichier XLS. Un fichier XLS peut inclure des informations de formatage pour les cellules, ainsi que le verrouillage des lignes/colonnes, les protections et autres fonctionnalités impossibles dans un fichier CSV. N'oubliez pas non plus qu'Excel ne prend pas correctement en charge le contenu codé UTF-8 lors de l'ouverture de fichiers CSV.
Si vous voulez un fichier XLS formaté, vous avez besoin d'une bibliothèque telle que PhpSpreadsheet qui peut écrire un fichier avec ce formatage, ou COM si votre serveur s'exécute sous Windows avec Excel installé
c'est assez facile, car Excel supporte le code HTML. Il vous suffit donc d’ajouter un en-tête en haut du fichier .. et de renvoyer ensuite votre code HTML!
header ( "Content-type: application/vnd.ms-Excel" );
header ( "Content-Disposition: attachment; filename=foo_bar.xls" );
echo "<table><tr><th>Header1</th></tr><tr><td>value1</td></tr></table>";
cela va générer un fichier Excel!
Vous pouvez utiliser l’un des formats XML compris par Microsoft Office.
Voir le site OpenXML Developer de Microsoft pour plus de détails/spécifications.
Il existe une bibliothèque sur PHPExcel que vous pouvez consulter pour vous aider.
Bien sûr, tout dépend de ce que vous entendez par:
"tirer le meilleur parti de ce format de fichier"
Si vous ne disposez que de simples tableaux sans formatage, les fichiers CSV sont peut-être tout ce dont vous avez besoin. Cependant, si vous souhaitez utiliser davantage de fonctionnalités d'une feuille de calcul, je vous recommande de jeter un coup d'œil à OpenXML.
Vous pouvez simplement sortir du code HTML et les versions plus récentes d'Excel le liront. Je ne sais pas combien de formatage vous pouvez faire avec cela cependant.
Si vous avez besoin de taper des données, d’un formatage riche ou de formules, j’ai eu du succès avec PHPExcel .
Ma préférence est d'écrire des fichiers CSV. Le format CSV est un format très facile à écrire et une conversion facile à partir de scripts de table HTML existants. Il présente également l’avantage d’être lisible par une grande variété de tableurs non Microsoft. Si vous pouvez faire du format CSV le format de fichier de choix pour votre application Web, vous en récolterez les fruits lorsque vous devrez accepter une feuille de calcul comme entrée. Il est beaucoup plus facile de lire et d’analyser un fichier CSV qu’un fichier Excel.
Essayez le enveloppeur de fichier XLS , ala ce post sur SO.
Jetez un coup d’œil à ce paquetage PEAR: Spreadsheet Excel Writer
Avertissement: Je travaille chez Expected Behavior, la société qui a développé DocRaptor.
Cela dit, vous pouvez utiliser DocRaptor pour générer des fichiers XLS à partir de HTML. DocRaptor est un projet Ruby on Rails, mais vous pouvez l'utiliser avec PHP. Voici notre exemple PHP:
Voici un autre lien vers la page d'accueil de DocRaptor:
Vous pouvez commencer à utiliser ces fichiers. Il créera un fichier Excel et vous aidera à le télécharger. Téléchargez le code source ou faites une démonstration ici: http://purpledesign.in/blog/to-generate-Excel-using-php/
Vous pouvez ajouter de telles lignes dans le
01-simple-download-xlsx.php
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'Roll')
->setCellValue('B1', 'Name')
->setCellValue('C1', 'Total Classes')
->setCellValue('D1', 'Class Attended')
->setCellValue('E1', 'Percentage');
Vous pouvez imprimer les données d'une base de données comme celle-ci en utilisant une boucle while.
$i=2;
while ($row = $database->fetch_array($result))
{
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A'.$i, $row[0])
->setCellValue('B'.$i, $row[1])
->setCellValue('C'.$i, $row[2])
->setCellValue('D'.$i, $total)
->setCellValue('E'.$i, round(($row[2]/$total)*100));
$i++;
}
Oui, c’est un moyen possible - si vous avez besoin d’un fichier CSV complet qui s’ouvrira dans Ms Excel.
Si vous avez besoin d’un fichier XLS enrichi, de nombreuses options sont disponibles, notamment l’utilisation de DLL tierces telles que «CarlosAg.ExcelXmlWriter.dll» pour créer le fichier XLS. Vous pouvez rechercher des exemples d'utilisation de cette dll sur le net ou regardez ici