8
votes

Phpexcel cesse de fonctionner après avoir défini 20 types de cellules

J'ai un script qui génère une petite table XLS (~ 25x15). Il contient des pourcentages et des chaînes et j'ai un opérateur IF qui définit la cellule actuelle en tant que type de pourcentage avec ce code:

$this->objPHPExcel->getActiveSheet()->getStyle($coords)->getNumberFormat()->setFormatCode('0.00%');


2 commentaires

Comme Phpexcel n'imposer aucune limite sur le nombre de styles (bien que Excel lui-même, il est bien supérieur à 20) et un certain nombre de nos scripts de démonstration dans le dossier / exemples utilisent plus de 20 styles différents, pouvez-vous s'il vous plaît fournir un fonctionnement Exemple de code qui démontre ce problème. Il se peut que le problème soit dans un style particulier que vous définissez plutôt qu'après un certain nombre de styles.


Qu'est-ce que $ ceci dans votre question et quel est $ coords dans votre question et où est le reste de l'exemple minimal nu pour reproduire votre problème? Meta. Stackexchange.com/questions/22754/...


3 Réponses :


1
votes
<?php
$file = 'output_log.txt';

function get_owner($file)
{
    $stat = stat($file);
    $user = posix_getpwuid($stat['uid']);
    return $user['name'];
}

$format = "UID @ %s: %s\n";

printf($format, date('r'), get_owner($file));

chown($file, 'ross');
printf($format, date('r'), get_owner($file));

clearstatcache();
printf($format, date('r'), get_owner($file));
?>
clearstatcache(); can be useful. Load this function at the start of the php page.

1 commentaires

Je l'ai essayé mais ça n'a pas fonctionné. Voici le code que j'utilise Pastebin.com/wjwux8J0 . Je serai grandement apprécié si vous parvenez à donner tout autre conseil.



3
votes

phpexcel attribue assez de mémoire forte>

tandis que phpexcel est une belle bibliothèque, l'utilisation peut nécessiter d'énormes quantités de mémoire allouées à PHP. P>

Selon Ce fil , juste 5 cellules peut rendre 6 Mo fort> d'utilisation de la mémoire: p>

ini_set('memory_limit', '32M');


8 commentaires

Veuillez citer votre référence pour chaque cellule d'une feuille de calcul PHPExcel s'élève à environ 20 Ko de mémoire. ... Ma règle de base a toujours été 1K / cellule sur 32 bits PHP et 1,6K / cellule si Vous utilisez php 64 bits


Cela semble être un peu plus qu'un jugement contre la gestion de la mémoire PHPExcel et ne semble pas répondre à la question de l'OP sur les styles de quelque manière que ce soit. Op ne mentionne pas du tout la mémoire. Et il mentionne à peine toutes les techniques pour réduire l'utilisation de la mémoire dans phpexcel


Le problème avec COM et la raison pour laquelle MM ne le recommande pas, est qu'il provoque des problèmes lorsque vous essayez de travailler avec plus d'un objet COM (ou plus d'un fichier Excel) à la fois ... mais Il est également limité aux serveurs Windows


Il existe de réels avantages pour com si vous avez cette option cependant: prise en charge complète de toutes les fonctionnalités de MS Excel; fonctionne en dehors des limitations de mémoire PHP; plus rapide (code natif) - phpexcel est ciblé des personnes qui n'ont pas cet accès ou ne peuvent pas comprendre la complexité du modèle d'objet COM


Les styles ne peuvent pas être mis en cache de la même manière que les cellules, car elles sont une collection complexe d'objets imbriqués; et nous vous recommandons toujours de définir des styles par plage plutôt que par une cellule individuelle car cela crée un enregistrement de style unique pour toute la gamme de cellules plutôt que d'un enregistrement de style individuel pour chaque cellule.


C'est quelque chose que je cherche à changer pour la version 2, de tester chaque réglage de style et de créer un nouveau style s'il n'y a pas de match existant (bien que cela crée sa propre performance au-dessus de la performance); et uniquement définir des objets composants de style pertinents, plutôt que de créer un arbre complet d'objets par défaut, si des éléments de style sont indéfinis


Faire correspondre le style que vous souhaitez contre les styles existants ou prédéfinis et définir la cellule XFindex sur ce style élimine beaucoup de style au-dessus de la tête; Mais c'est une tâche compliquée pour un utilisateur, sinon je recommanderais que comme une méthode de travail efficace plus efficace de mémoire - c'est essentiellement ce que mon code V2 actuel fait dans les coulisses, jetant les doublons de la mémoire; mais la correspondance est lente et il a l'inconvénient que tout changement à un style existant affecte toutes les cellules qui l'utilisent


Sur ma machine, l'exécution du code de l'affiche occupe une «utilisation de la mémoire de pointe maximale: 5,5 Mo». Son propre code montre ce résultat. INI_SET ('Memory_Limit', '32m'); Est donc complètement superflu, bien que intéressant sur des feuilles de calcul plus grandes de Phpexcel, il n'est pas pertinent ici.



2
votes

J'ai couru votre code localement et j'ai trouvé que toutes les 26 cellules que vous avez définies sur ce pourcentage avaient le bon format et un signe%. Je devais commencer les lignes 136-137 d'abord, bien sûr.

Ceci doit être lié à votre configuration. Je ne peux pas imaginer que vous auriez trop de mémoire pour une feuille de calcul de cette taille.

Pour vos informations, j'ai confirmé qu'il fonctionnait sur PHP version 5.4.16 avec PHP Excel version version 1.7.6, 2011-02-27. J'ai ouvert la feuille de calcul avec MS Excel 2007.


3 commentaires

Aussi avec la dernière version, 1.7.9. 17:01:54 Usage de la mémoire actuelle: 5.5 MB 17:01:54 Haute mémoire USAGE: 5.5 Mo


Cela ne pourrait être que la machine dépendante de la machine s'il s'agissait de la mémoire, mais je n'ai pas de machine particulièrement impressionnante. Je me pencherais vers une différence dans les versions PHP ou les versions PHPEXCEL. Quels sont les vôtres?


Oh, et aussi quel éditeur de tableur vous l'ouvrez! J'ai eu de petits bugs lorsque mes formats n'étaient pas complètement corrects qui ont été traités largement différemment dans différents éditeurs de feuille de calcul.