La génération de gros fichiers Excel à partir de données MySQL avec PHP à partir d'applications de l'entreprise,
Nous sommes en train de développer et de maintenir un couple de systèmes, qui ont besoin d'exporter les rapports au format Excel à l'utilisateur final. Les rapports sont recueillies à partir d'une base de données MySQL avec certains trivial de traitement et habituellement résultat dans ~40000 lignes de données, avec 10 à 15 colonnes, nous nous attendons à ce que la quantité de données à croître de façon constante.
Pour le moment, nous sommes à l'aide de PHPExcel pour Excel génération, mais il ne travaille pas pour nous. Après nous allons au-dessus de 5000 lignes, la consommation de la mémoire et de temps de chargement devenir untolerable, et ne peut pas être résolu par indéfiniment croissante de PHP de limites maximales pour l'utilisation de la mémoire et temps d'exécution du script. Le traitement des données est aussi mince que possible, et tout le problème est avec PHPExcel être un dévoreur de mémoire. CSV génération serait plus léger, mais, malheureusement, nous sommes obligés d'exporter Excel (Excel et seul) de nos services en raison de la demande des utilisateurs. Cela est dû aux exigences de mise en forme, etc., donc CSV n'est pas une option.
Toutes les idées/recommandations pour une application tierce/module/service/qu'est-ce déjà pour générer un grand excelle? N'a pas d'importance si c'est une licence commerciale, tant qu'il correspond à nos besoins, peuvent être intégrés pour les applications PHP existantes et fait son travail. Nos services sont généralement en cours d'exécution sur linux/php/mysql et nous pouvons faire à peu près tout ce que nous devons faire avec les serveurs.
Merci!
Est-il une raison précise pour laquelle vous ne souhaitez pas utiliser le format CSV (plusieurs feuilles de calcul, mise en forme, etc)? Aussi, ne vous devez les exporter au format xls ou xlsx (ou il n'a pas d'importance)?
Nanne: autant Que je sache, l'un de nos programmeurs a plus ou moins tout essayé pour faire PHPExcel exécuter aussi léger que possible. Je vais transmettre votre lien avec lui, mais je pense que nous avons déjà essayé. Pouvez-vous recommander des solutions de rechange raisonnables à PHPExcel qui pourraient faire le travail mieux? Bo: les exigences des Utilisateurs (ie. eux ne sachant pas comment faire pour importer CSV correctement ou qui ne veulent pas s'embêter avec elle), la mise en forme et l'intégrité des données, plusieurs feuilles et le lot. XLS les exportations sont le minimum, comme nous l'avons aucun contrôle sur la version d'Excel, les utilisateurs finaux ont, XLSX n'est pas une nécessité, mais un joli bonus.
La seule chose que j'ai trouvé dans le passé, mais rejette moi-même pour plusieurs raisons (des trucs 3ème partie, peu de déviation vraiment, pas d'expérience avec les API, etc) est en le poussant à google spreadsheat l'aide de l'API. Vous ne savez pas si il est possible à tous de télécharger facilement comme un XLS, mais vous pouvez regarder: developers.google.com/google-apps/spreadsheets
OriginalL'auteur lostcontrol | 2012-05-18
Vous devez vous connecter pour publier un commentaire.
Pour une telle grande quantité de données, je ne recommanderais pas des outils comme PHPExcel ou ApachePOI (pour Java) en raison de leurs besoins en mémoire. J'ai lutté avec des tâches similaires récemment et j'ai trouvé commode (mais peut-être un peu délicat) pour injecter des données dans des feuilles de calcul. Serverside génération ou la mise à jour des feuilles de calcul Excel peuvent être obtenus ainsi d'édition XML simple. J'ai XLSX feuille de calcul assis sur le serveur et chaque fois que des données sont collectées à partir de dB, je le décompresser à l'aide de php. Puis-je accéder à des fichiers XML qui sont la tenue de contenu des feuilles de calcul qui doivent être injectés et insérer les données manuellement. Par la suite, j'ai compresser feuille de calcul dossier afin de le distribuer comme un régulier fichier XLSX. Tout le processus est assez rapide et fiable. Évidemment, il y a peu de problèmes et de bugs liés à l'organisation interne de XLSX/formats de fichier Open XML (e. g. Excel ont tendance à stocker toutes les chaînes de caractères en tableau distinct et utiliser des références à ce tableau dans une feuille de calcul). Mais lors de l'injection seules les données comme les nombres et les chaînes de caractères, il n'est pas difficile. Si quelqu'un est intéressé, je peux fournir un peu de code.
Ok, voici un exemple de code pour cela. J'ai essayé de commenter ce qu'il fait, mais n'hésitez pas à demander de plus amples explications.
Bon, je vais le poster dans une autre réponse à cette question...
J'ai inséré le code dans ma réponse originale à cette question. J'ai simplifié de la classe que j'utilise dans mon projet, de l'idée de base et des flux de travail. Vous avez seulement besoin d'inclure la fonction pour la décompression et le dossier de compression pour cet échantillon. Si besoin je peux fournir aussi...
Qui XLSX feuille de calcul lib que vous utilisez, il travaillera pour 2 lac lignes?
OriginalL'auteur bazinac
La liste des solutions de rechange pour PHPExcel que j'essaie de garder à jour est ici
Si vous êtes après raw vitesse/performance de la mémoire au-dessus et au-delà de tout ce qui PHPExcel peut offrir, alors le seul que j'avais en fait recommandons est Ilia wrapper de l'extension pour libXL, parce que la bibliothèque est toujours activement soutenu.
OriginalL'auteur Mark Baker
Découvrez OfficeWriter. Nous avons récemment amélioré les performances pour des ensembles de données massifs pour une Fortune de 500 financiers de la société. Elle ne sorte plus avec le format de fichier que vous avez spécifiquement besoin (graphiques et qu'en avez-vous), mais l'API est assez facile à utiliser et à l'évaluation, vous pourriez obtenir un POC rapidement. Avertissement - je suis sur les ingénieurs qui ont construit la dernière version.
Un autre inconvénient pour vous les gars, c'est que c'est .NET.
OriginalL'auteur Nick Martin
Ce sujet juste l'impression de tableau?
OriginalL'auteur FDisk
Vous pouvez exporter au format CSV, Excel peut gérer cela. Si vous avez des problèmes lors de l'écriture du fichier, vous pouvez toujours en boucle les résultats (pagination) et de les ajouter dans le fichier CSV
Essayer de convertir par la suite en utilisant PHPExcel .xsl ou .format odf, sinon, laissez-le au format CSV.
Je l'ai suggéré, le CSV comme une étape intermédiaire, car il est facile à générer. Et puis essaie de le convertir en un format Excel.
Mais vous n'avez pas inclure quoi que ce soit à propos de la conversion (sans parler de la "laisser comme CSV", remarque). Comme
PHPExcel
a un problème avec de grandes feuilles et de la mémoire, vous rencontrerez le même problème, n'est-ce pas? Et si non, vous devez ajouter comment convertir big.csv
fichiers.xls
pour ce utile de répondre autant que je suis concerné.Salut Boby, nous avons utilisé pour fournir les rapports au format CSV pour l'utilisateur final, mais le problème est que certains contenu de la cellule n'a pas été correctement importés par Excel, à moins que l'utilisateur a utilisé l'Importation séparée-fonction (note: les CSV ont été formés correctement). Par exemple, des chaînes de caractères comme "000123123" perdu leur zéros, qui conduisent à la corruption des données. Cela était dû à Excel décider que la chaîne devait être interprétée comme un nombre, et le contenu d'origine (ie. les zéros non significatifs) a été perdu.
C'était l'une des principales raisons, nous avons tourné à PHPExcel pour la génération de fichier, comme on pourrait alors définir directement le contenu de la cellule type. La prestation de CSV est ne serait pas un problème, si nos utilisateurs accepteront qu'ils auraient à utiliser l'Import-fonction - mais, malheureusement, ils ne sont pas, et nous avons à offrir Excelle.
OriginalL'auteur Boby
Avez-vous essayer la vieille Poire Excel (aka Spreadsheet_Excel_Writer: http://pear.php.net/package/Spreadsheet_Excel_Writer/redirected)?
Checkuout de la discussion sur la Poire Vs PHPExcel:
http://phpexcel.codeplex.com/discussions/240688
il n'était pas clair d'abord que le CSV n'était pas une option. Il devrait être une allusion au fait que si deux personnes font la même réponse (qui peut ne pas être correcte) que les questions sont peut-être pas aussi claire que prévu initialement.
L'original question dit littéralement:
CSV generation would be lighter, but unfortunately we're required to export Excel (and Excel alone)
. Me semble clair. Et même si c'était pas clair, il y a quelque chose de mal avec la question, ok, mais qui n'en fait pas une réponse valable à la (peut-être pas clair) de la question, maintenant que est effacer.J'ai édité la réponse à supprimer la référence au format CSV. 🙂 Et ce n'était pas clair, c'est "...nous sommes requises pour l'exportation Excel (Excel et seul)..." qu'excel n'est pas de format de fichier, mais le chargement de l'application les formats de fichier (Excel prend en charge de nombreux formats: xls, xlsx, etc).
Mais la partie précédente où le mot
CSV
est mentionné dans un rejet chemin est encore assez clair. De toute façon, cela mène à rien. Ne pas prendre sur vous ou quoi que ce soit, mais de salutations et de la signature de postes n'est pas nécessaire, votre nom est déjà là 🙂OriginalL'auteur Bo.