Auteur original : Podcast sur l'iceberg Quand j'ai vu cet article, j'ai été très surpris par la patience de l'auteur original. Bien que nous en utilisions dans la vie quotidienne, ils ne sont pas tous répertoriés par l'auteur. Lors de l'écriture d'Excel, j'ai utilisé de la poire. Library, j'ai également utilisé l'en-tête du pack, et j'ai également utilisé ceux qui utilisent smarty pour remplacer simplement xml, sans parler du csv. héhé. (Je ne parlerai pas de la méthode COM. Il y en a trop qui sont lisibles. J'ai également écrit des articles sur l'utilisation de wps pour générer du word, etc.)
Mais quand je lisais, je n’en ai utilisé qu’un, j’ai oublié ce que c’était, j’ai donc dû revenir en arrière et lire le code. Parce que c'est basé sur le principe de l'emprunt, je ne m'en souviens pas.
Adresse d'origine : http://xinsync.xju.edu.cn/index.php/archives/3858
Contenu original :
Récemment, en raison des besoins du projet, j'ai besoin de développer un module pour exporter certaines données du système vers Excel, les modifier, puis les réimporter dans le système. J'en ai profité pour faire quelques recherches à ce sujet, et voici quelques résumés.
Fondamentalement, il existe deux types de fichiers exportés :
1 : Format de type Excel Il ne s’agit en fait pas d’un fichier Excel au sens traditionnel du terme, c’est simplement parce qu’Excel a une forte compatibilité et peut être ouvert correctement. Après avoir modifié ce type de fichier puis l'avoir enregistré, il vous sera généralement demandé si vous souhaitez le convertir en fichier Excel.
Avantages : Simple.
Inconvénients : Il est difficile de générer le format. S'il est utilisé pour l'importation, vous devez écrire vous-même le programme correspondant.
2 : Format Excel, correspondant au Excel-like, le fichier généré par cette méthode est plus proche du format Excel réel.
Si des caractères tronqués apparaissent lors de l'exportation du chinois, vous pouvez essayer de convertir la chaîne en gb2312. Par exemple, ce qui suit convertit $yourStr de utf-8 en gb2312 :
$yourStr = mb_convert_encoding(”gb2312″, “UTF-8″, $yourStr);
Plusieurs méthodes sont répertoriées ci-dessous en détail);
1. Exportation PHP vers Excel
1 : La première recommandation est le très populaire PHPExcel, site officiel : http://www.codeplex.com/PHPExcel
Il peut être importé et exporté, et peut être exporté au format Office 2007, qui est également compatible avec 2003.
Le package téléchargé contient des documents et des exemples que vous pouvez étudier par vous-même.
Voici un exemple de copie d'un paragraphe :
Code PHP
<?php
/**
* PHPExcel
*
* Copyright (C) 2006 - 2007 PHPExcel
*
* Cette bibliothèque est un logiciel libre ; vous pouvez la redistribuer et/ou
* le modifier selon les termes du GNU Lesser General Public
* Licence telle que publiée par la Free Software Foundation ;
* version 2.1 de la Licence, ou (à votre choix) toute version ultérieure.
*
* Cette bibliothèque est distribuée dans l'espoir qu'elle sera utile,
* mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de
* QUALITÉ MARCHANDE ou ADÉQUATION À UN USAGE PARTICULIER Voir le GNU.
* Licence publique générale moindre pour plus de détails.
*
* Vous devriez avoir reçu une copie du GNU Lesser General Public
* Licence avec cette bibliothèque ; sinon, écrivez sur le logiciel libre ;
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 États-Unis
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2007 PHPExcel ( http://www.codeplex.com/PHPExcel )
* @license http://www.gnu.org/licenses/lgpl.txt LGPL
* @version 1.5.0, 2007-10-23
*/
/** Rapport d'erreurs */
rapport d'erreur (E_ALL);
/** Inclure le chemin **/
set_include_path(get_include_path() . PATH_SEPARATOR . '../Classes/');
/** PHPExcel */
inclure « PHPExcel.php » ;
/** PHPExcel_Writer_Excel2007 */
inclure « PHPExcel/Writer/Excel2007.php » ;
// Crée un nouvel objet PHPExcel
echo date('H:i:s') ” Créer un nouvel objet PHPExceln”;
$objPHPExcel = nouveau PHPExcel();
// Définir les propriétés
echo date('H:i:s') ” Définir les propriétésn” ;
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
$objPHPExcel->getProperties()->setLastModifiedBy(”Maarten Balliauw”);
$objPHPExcel->getProperties()->setTitle(”Document de test Office 2007 XLSX”);
$objPHPExcel->getProperties()->setSubject(”Document de test Office 2007 XLSX”);
$objPHPExcel->getProperties()->setDescrīption("Document de test pour Office 2007 XLSX, généré à l'aide de classes PHP.");
$objPHPExcel->getProperties()->setKeywords(”office 2007 openxml php”);
$objPHPExcel->getProperties()->setCategory(”Fichier de résultat du test”);
//Ajouter des données
echo date('H:i:s') ”Ajouter des donnéesn”;
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setCellValue('A1′, 'Bonjour');
$objPHPExcel->getActiveSheet()->setCellValue('B2′, 'world!');
$objPHPExcel->getActiveSheet()->setCellValue('C1′, 'Bonjour');
$objPHPExcel->getActiveSheet()->setCellValue('D2′, 'world!');
// Renommer la feuille
echo date('H:i:s') ” Renommer la feuillen”;
$objPHPExcel->getActiveSheet()->setTitle('Simple');
// Définit l'index de la feuille active sur la première feuille, pour qu'Excel l'ouvre comme première feuille
$objPHPExcel->setActiveSheetIndex(0);
// Enregistrer le fichier Excel 2007
echo date('H:i:s') ” Écrire au format Excel2007n”;
$objWriter = nouveau PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
// Echo fait
echo date('H:i:s') ” Terminé l'écriture du fichier.rn”;
2. Utilisez l'adresse de téléchargement de la classe Spreadsheet_Excel_Writer de Pear : http://pear.php.net/package/Spreadsheet_Excel_Writer
Cette classe dépend d'OLE, adresse de téléchargement : http://pear.php.net/package/OLE
Il convient de noter que le format du fichier Excel exporté est relativement ancien. Si vous l'enregistrez après modification, il vous sera demandé si vous souhaitez le convertir dans un format plus récent.
Mais vous pouvez définir le format, ce qui est très puissant.
Code PHP
<?php
require_once 'Spreadsheet/Excel/Writer.php';
// Création d'un classeur
$workbook = nouveau Spreadsheet_Excel_Writer();
// envoi des en-têtes HTTP
$workbook->send('test.xls');
// Création d'une feuille de calcul
$worksheet =& $workbook->addWorksheet('Ma première feuille de calcul');
//Les données réelles
$worksheet->write(0, 0, 'Nom');
$worksheet->write(0, 1, 'Âge');
$worksheet->write(1, 0, 'John Smith');
$feuille de travail->write(1, 1, 30);
$worksheet->write(2, 0, 'Johann Schmidt');
$feuille de travail->write(2, 1, 31);
$worksheet->write(3, 0, 'Juan Herrera');
$feuille de travail->write(3, 1, 32);
// Envoyons le fichier
$classeur->fermer();
?>
3 : Utilisez smarty pour générer des formats de support de fichiers XML ou HTML conformes aux spécifications Excel, ce qui constitue une solution d'exportation parfaite. Cependant, le fichier exporté est essentiellement un fichier XML. S'il est utilisé pour l'importation, il doit être traité séparément.
Pour plus de détails, veuillez consulter le post de Rardge Hero : http://bbs.chinaunix.net/viewthread.php?tid=745757.
Il est à noter que si le nombre de lignes dans la table exportée est incertain, il est préférable de mettre "ss:" dans le modèle : supprimez les éléments tels que ExpandedColumnCount=”5″ ss:ExpandedRowCount=”21″”.
4. Utilisez la fonction pack pour imprimer les symboles de saut de phrase qui simulent le format Excel. Après avoir été modifiés et enregistrés dans Office 2003, aucune invite ne s'affichera. Cette méthode est recommandée.
L'inconvénient est qu'il n'a pas de format.
Code PHP
<?php
// Envoyer l'en-tête
en-tête("Pragma : public");
en-tête("Expire : 0");
header("Cache-Control : doit-revalider, post-check=0, pre-check=0");
header("Type de contenu : application/téléchargement forcé");
header("Content-Type: application/octet-stream");
header("Type de contenu : application/téléchargement");;
header(”Content-Disposition: attachment;filename=test.xls “);
en-tête("Content-Transfer-Encoding: binaire ");
//Cellule de données XLS
xlsBOF();
xlsWriteLabel(1,0,"Ma première ligne Excel");
xlsWriteLabel(2,0,"Ma deuxième ligne Excel : ");
xlsWriteLabel(2,1,"Bonjour à tous");
xlsEOF();
fonction xlsBOF() {
echo pack("ssssss", 0×809, 0×8, 0×0, 0×10, 0×0, 0×0);
retour;
}
fonction xlsEOF() {
echo pack("ss", 0×0A, 0×00);
retour;
}
fonction xlsWriteNumber($Row, $Col, $Value) {
echo pack("sssss", 0×203, 14, $Row, $Col, 0×0);
echo pack("d", $Valeur);
retour;
}
fonction xlsWriteLabel($Row, $Col, $Value) {
$L = strlen($Valeur);
echo pack("ssssss", 0×204, 8 + $L, $Row, $Col, 0×0, $L);
echo $Valeur ;
retour;
}
?>
Cependant, l'auteur a échoué lors de son utilisation sur un système Linux 64 bits, et tous les symboles de rupture de phrase sont devenus des caractères tronqués.
5. Comment utiliser les tabulations et les sauts de ligne
Le caractère de tabulation "t" permet aux utilisateurs de séparer les colonnes sur la même ligne, et le caractère de nouvelle ligne "tn" peut ouvrir la ligne suivante.
<?php
header("Type de contenu : application/vnd.ms-execl");
header("Content-Disposition: attachment; filename=myExcel.xls");
header("Pragma : sans cache");
en-tête("Expire : 0");
/*première ligne*/
echo "bonjour"."t";
echo "monde"."t";
écho « tn » ;
/*début de la deuxième ligne*/
echo "c'est la deuxième ligne"."t";
echo "Salut, jolie fille". "t";
écho « tn » ;
?>
6. Utilisez com
Si votre PHP peut ouvrir le module com, vous pouvez l'utiliser pour exporter des fichiers Excel
Code PHP
<?PHP
$filename = « c:/spreadhseet/test.xls » ;
$feuille1 = 1 ;
$feuille2 = « feuille2 » ;
$excel_app = new COM("Excel.application") ou Die ("Pas de connexion");
print « Nom de l'application : {$excel_app->Application->value}n » ;
print « Version chargée : {$excel_app->Application->version}n » ;
$Workbook = $excel_app->Workbooks->Open(”$filename”) ou Die(”N'a pas ouvert $filename $Workbook”);
$Feuille de travail = $Workbook->Feuilles de travail ($sheet1);
$Feuille de travail->activer ;
$excel_cell = $Worksheet->Range(”C4″);
$excel_cell->activer ;
$excel_result = $excel_cell->valeur ;
imprimer « $excel_resultn » ;
$Feuille de travail = $Workbook->Feuilles de travail ($sheet2);
$Feuille de travail->activer ;
$excel_cell = $Worksheet->Range(”C4″);
$excel_cell->activer ;
$excel_result = $excel_cell->valeur ;
imprimer « $excel_resultn » ;
#Pour fermer toutes les instances d'Excel :
$Classeur->Fermer ;
non défini($Feuille de travail);
non défini($Classeur);
$excel_app->Classeurs->Fermer();
$excel_app->Quitter();
non défini($excel_app);
?>
Un meilleur exemple : http://blog.chinaunix.net/u/16928/showart_387171.html
1. Importation PHP dans Excel
1 : utilisez toujours PHPExcel, site officiel : http://www.codeplex.com/PHPExcel .
2 : Utilisez PHP-ExcelReader, adresse de téléchargement : http://sourceforge.net/projects/phpexcelreader
Exemple:
Code PHP
<?php
require_once 'Excel/reader.php';
// ExcelFile ($ nom de fichier, $ encodage);
$data = nouveau Spreadsheet_Excel_Reader();
// Définit l'encodage de sortie.
$data->setOutputEncoding('utf8′);
$data->read('jxlrwtest.xls');
rapport d'erreur(E_ALL ^ E_NOTICE);
pour ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
pour ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
echo """.$data->sheets[0]['cells'][$i][$j]."",";
}
écho « n » ;
}
?>
----------
Ce site adopte l'accord de droit d'auteur Creative Commons, qui nécessite une attribution, une non-commercialisation et une cohérence. Ce site accepte toute réimpression non commerciale, mais doit indiquer qu'elle provient de "Uncle Fatty's Simple Life", conserver le lien original et doit également. indiquer le titre original et le lien.