[PHP] Quelques lignes qui transforment un fichier excel en extract CSV !
Coucou les d'jeun's !
Bon j'imagine que vous avez déjà préparé vos reserves de nourriture pour demain ?!?
Entre la grève SNCF et les manifestations contre la loi el khomri ...
Il risque d'y avoir du monde dehors ^^
Pour vous divertir une fois de plus, car je suis là pour ça (entre autres)
J'ai créé un court script PHP qui vous permet d'extraire les données d'un fichier excel, qu'importe qu'il soit sur plusieurs pages ou non, et de le formater en CSV !!!
Je sais que beaucoup me diront les Regex, c'est vintage, l'utilisation du DOM c'est mieux :D
Et vous aurez surement raison ..
Mais j'arrive avec ces quelques lignes à faire un extract CSV d'un fichier excel de 3 Mo en 1 seconde.
Ce qui à mon sens, n'est pas trop mal ;)
Maintenant à vous d'adapter en fonction de vos besoins ;)
Pour ceux qui veulent comprendre
comment ça marche !
Pour les plus curieux, je tiens à vous dire que j'ai exploré seul ces sentiers ...
Aussi, je peux vous certifier, que vous aurez surement un peu de mal à comprendre au début.
Je vous invite par conséquent à créer un petit fichier excel avec peu de contenu pour faire vos tests.
Un fichier excel n'est rien d'autre qu'une archive ...
Aussi en la renommant en .zip, vous pourrez explorer un peu ses entrailles !
Les diverses feuilles Excel que peut contenir votre document
Sont stockées ici dans le dossier xl\worksheets\
Ce sont tous les fichiers .xml, préfixés par un "sheet"
À l'intérieur vous découvrirez un fichier xml classique, avec toutes les lignes de votre feuille "<row>"
Et pour chaque ligne, vous aurez les cellules de celle-ci "<c>"
Exemple ici pour la ligne 1 : A1, B1, C1, ...
C'est là que ça se complique un peu ( mais pas trop ;) )
Comme je le montre sur la capture d'écran ci-dessous, certaines cellules affichent un t="s"
Ce "t", c'est le type, ça signifie "type string"
En gros .. le contenu de cette cellule sera une chaîne de caractères ...
Si tel n'est pas le cas, vous pourrez considérer que le contenu de la cellule est un chiffre / nombre "entier" ou un "float" (chiffre / nombre à virgule)
Aussi le contenu de chaque cellule sera représenté ainsi par <v> (value) :
Si c'est un entier, la valeur ici sera bien 0, sauf que comme vous êtes malin et que vous voyez ' t="s" ', vous vous doutez que ce qui est attendu ici c'est une chaîne de caractère !
Et donc non, ici 0 ne sera pas la chaîne de caractères !
ça sera juste une information pour nous dire d'aller lire l’occurrence n°0 d'un fichier contenant les chaines de caractères !
Ce fichier c'est "xl/sharedStrings.xml" !
Donc nous irons lire ce fichier, et récupérer l’occurrence "0"
Quand je parle d’occurrence ... c'est que les lignes ne sont pas numérotées ...
Excel considère que ce fichier est dans l'ordre et va ligne ligne par ligne ...
Chaque chaîne de caractères sera contenu entre <si> :
Bref en prenant donc l’occurrence 0 (la première)
Le contenu est entre <t> (texte)
Aussi, pour en revenir à notre exemple ...
La cellule A1, contiendra ici le texte "Mon Texte !"
Eh voilà !
Nous avons fait le tour de ce dont nous avons besoin de connaitre pour comprendre mieux le script fourni au début de cet article ;)
Bonjour,
Votre script semble répondre complètement à ce que je veux faire, mais voilà je ne suis pas du tout programmeur, ,et je ne comprends pas comment l’utiliser.
Je suppose qu’il faut indiquer le chemin du fichier .xls pour pouvoir l’ouvrir et aussi ou le sauvegarder le .csv
Merci d’avance si vous pouviez m’éclairer un peu à ce sujet.
Cordialement
Pascal
Bonjour,
Ce post est très intéressant et m’a été très utile pour travailler avec un fichier de 13Mo !
Je voudrais savoir comment effectuer le processus inverse ? C’est-à-dire passer du fichier csv à un fichier Excel ?
Est-il possible de créer un fichier zip/excel à partir d’un fichier csv ?
Hello et bonne année !
Pour répondre à ta question, c’est possible mais moins simple ;)
A voir peut-être dans un prochain article ^^
Bonjour,
merci pour ce code que je trouve super.
J’ai juste une petite question.
Comment savoir si une cellule est vide? Je ne trouve pas où faire le test dans le code.
Merci
A pascal : si la cellule est vide elle est simplement « absente » du fichier XML. Il faut donc analyser $row[0][$k] qui contient le nom de la cellule pour reconstituer le colonage d’origine, indispensable pour faire un csv ! Sinon cela va décaler l’ordre des données ….
C’est ce que je suis en train de faire…
Sinon Merci à l’auteur pour ce code qui est une très bonne base de travail.
A pascal : si la cellule est vide elle est simplement « absente » du fichier XML. Il faut donc analyser $row[0][$k] qui contient le nom de la cellule pour reconstituer le colonage d’origine, indispensable pour faire un csv ! Sinon cela va décaler l’ordre des données ….
C’est ce que je suis en train de faire…
Sinon Merci à l’auteur pour ce code qui est une très bonne base de travail.
Bonjour,
Merci pour ce code qui remplace bien phpExcel ! Je me permet de remettre le code car j’ai du modifier le nom du fichier xml de mon coté.
[pastacode lang="php" manual="%0A%20%20%24handle%20%3D%20fopen(%22zip%3A%2F%2F%22.%24NomFinal.%22%23xl%2FsharedStrings.xml%22%2C%20'r')%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Ouvre%20le%20fichier%20xlsx%20en%20tant%20que%20fichier%20zip%20%24NomFinal%20%3D%20absence.xlsx%0A%20%20if%20(%24handle)%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Si%20le%20fichier%20est%20ouvert%0A%20%20%20%20%24result%20%3D%20''%3B%0A%20%20%20%20while%20(!feof(%24handle))%20%20%24result%20.%3D%20fread(%24handle%2C%208192)%3B%0A%20%20%20%20fclose(%24handle)%3B%0A%20%20%20%20%24content%20%3D%20str_replace(%22%5Cn%22%2C%20%22%22%2C%20%24result)%3B%0A%20%20%20%20if%20(preg_match_all('%2F%5C%3Csi%3E(.*%3F)%5C%3C%5C%2Fsi%3E%2Fs'%2C%20%24result%2C%20%24match))%7B%0A%20%20%20%20%20%20%20%24dico%20%3D%20%24match%5B1%5D%3B%0A%20%20%20%20%20%20%20foreach%20(%24match%5B1%5D%20as%20%24k%20%3D%3E%20%24v)%20%24dico%5B%24k%5D%20%3D%20strip_tags(%24v)%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20if%20((%24zip%20%3D%20zip_open(%24NomFinal)))%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Ouvre%20le%20zip%0A%20%20%20%20while%20(%24zip_entry%20%3D%20zip_read(%24zip))%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Lit%20le%20zip%0A%0A%20%20%20%20%20%20if%20(!%20zip_entry_open(%24zip%2C%20%24zip_entry))%20continue%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Ouvre%20le%20zip%20en%20lecture%0A%20%20%20%20%20%20%24filename%20%3D%20zip_entry_name(%24zip_entry)%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20On%20recupere%20les%20nom%20dans%20le%20zip%0A%0A%20%20%20%20%20%20if%20(preg_match(%22%2Fxl%5C%2Fworksheets%5C%2Fworksheet(%5B0-9%5D%7B0%2C3%7D).xml%2F%22%2C%24filename%2C%24fileId))%20%7B%20%20%20%20%20%20%20%20%2F%2F%20On%20lit%20le%20fichier%20worksheetXX.xml%0A%20%20%20%20%20%20%20%20%2F%2F%20%20Open%20File%0A%20%20%20%20%20%20%20%20%24filesize%20%3D%20intval(zip_entry_filesize(%24zip_entry))%3B%0A%20%20%20%20%20%20%20%20%24content%20%3D%20zip_entry_read(%24zip_entry%2C%20%24filesize)%3B%0A%20%20%20%20%20%20%20%20%24rowReg%20%20%20%20%20%3D%20'%2F%5C%3Crow%20%5BA-Za-z-0-9%5E_.%3A%3D%22%5C'%20%5D%7B0%2C200%7D%3E(.*%3F)%5C%3C%5C%2Frow%3E%2Fs'%3B%0A%20%20%20%20%20%20%20%20if%20(preg_match_all(%24rowReg%2C%20%24content%2C%20%24data))%7B%0A%20%20%20%20%20%20%20%20%20%20%24rows%20%3D%20%24data%5B1%5D%3B%0A%20%20%20%20%20%20%20%20%20%20foreach%20(%24rows%20as%20%24k%20%3D%3E%20%24v)%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Lit%20toutes%20les%20lignes%20du%20xsls%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%24colReg%20%3D%20'%2F%5C%3Cc%20%5BA-Za-z-0-9%5E_.%3A%3D%22%5C'%20%5D%7B0%2C200%7D(%5C%3E%5C%3Cv%3E(.*%3F)%5C%3C%5C%2Fv%3E%7C%5C%2F%5C%3E)%2Fs'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(preg_match_all(%24colReg%2C%20%24v%2C%20%24row))%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24rowData%20%3D%20%24row%5B2%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%20%20%20%20%20%20Extract%20All%20Record%20from%20Line%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20foreach%20(%24rowData%20as%20%24k%20%3D%3E%20%24v)%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(strstr(%24row%5B0%5D%5B%24k%5D%2C%20't%3D%22s%22'))%20%24v%20%3D%20str_replace(%22%5Cn%22%2C'%5Cn'%2C%24dico%5B%24v%5D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20echo%20'%22'.addslashes((%24v%3D%3D'%2F%3E')%3F''%3A%24v).'%22%3B'%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Affichage%20donn%C3%A9e%20du%20xsls%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%2F%2Fforeach%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20echo%20%22%5Cn%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%2F%2Fif%0A%20%20%20%20%20%20%20%20%20%20%7D%20%2F%2Fforeach%0A%20%20%20%20%20%20%20%20%7D%20%2F%2Fif%0A%20%20%20%20%20%20%7D%20%2F%2Fif%0A%20%20%20%20%20%20zip_entry_close(%24zip_entry)%3B%0A%20%20%20%20%7D%20%2F%2Fwhile%0A%20%20%20zip_close(%24zip)%3B%0A%20%7D%20%2F%2Fif" message="script" highlight="20" provider="manual"/]
Bonjour Bob,
S’il vous plaît, pouvez-vous me faire voir le script complet qui fonctionne (le formulaire pour choisir le fichier à convertir et la page php de traitement) ?
Je vois que ce script correspond bien à ce que je cherche, mais j’arrive pas à le manier pour afin obtenir le fichier csv.
Votre aide me serait très utile, car je suis un débutant en php
Je vous fais voir mes codes, juste pour vous donner l’idée de ce que je veux faire (je précise que je suis un débutant en php) :
Formulaire
[pastacode lang="markup" manual="%09%09%09%09%09%09%09%09%3Cform%20id%3D%22%22%20action%3D%22admin%2Fconversion.php%22%20method%3D%22post%22%20enctype%3D%22multipart%2Fform-data%22%20style%3D%22margin-top%3A%20-25px%3B%22%3E%0A%09%09%09%09%09%09%09%09%09%3Cdiv%20class%3D%22form-row%22%3E%0A%09%09%09%09%09%09%09%09%09%09%3Clabel%20class%3D%22col-md-4%20control-label%22%3EChoisir%20un%20fichier%20Excel%3C%2Flabel%3E%0A%09%09%09%09%09%09%09%09%09%09%3Cinput%20type%3D%22file%22%20name%3D%22file%22%20id%3D%22file%22%20accept%3D%22.xls%2C.xlsx%22%3E%26nbsp%3B%26nbsp%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20type%3D%22submit%22%20value%3D%22Import%22%20id%3D%22converter%22%20name%3D%22import%22%20class%3D%22btn-submit%22%20style%3D%22height%3A%2025px%3B%22%3E%0A%09%09%09%09%09%09%09%09%09%09%09%3Ci%20class%3D%22fas%20fa-download%22%3E%3C%2Fi%3E%26nbsp%3BConvertir%3C%2Fbutton%3E%26nbsp%3B%0A%09%09%09%09%09%09%09%09%09%09%3Cbutton%20type%3D%22reset%22%20id%3D%22itemClear%22%20class%3D%22btn-reset%22%20style%3D%22height%3A%2025px%3B%22%3E%0A%09%09%09%09%09%09%09%09%09%09%09%3Ci%20class%3D%22fas%20fa-times%22%3E%3C%2Fi%3E%3C%2Fbutton%3E%0A%09%09%09%09%09%09%09%09%09%09%3Cbr%20%2F%3E%0A%09%09%09%09%09%09%09%09%09%3C%2Fdiv%3E%0A%09%09%09%09%09%09%09%09%3C%2Fform%3E" message="Formulaire" highlight="" provider="manual"/]
Page de traitement,
conversion.php:
[pastacode lang="php" manual="%3C%3Fphp%0A%2F*%0A*%20%20%20%20%20%20%20%20%20%20%20%20%20Convert%20Excel%20to%20CSV%0A*%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20V%201.0%0A*%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Dyrk.org%0A*%20%20%20%20%20%20%20%20%20%20(c)%20Dave%20Hill%202016%20-%202017%0A*%2F%0A%0Aif%20(!%20isset(%24argv%5B1%5D)%20%7C%7C%20!%20is_file(%24argv%5B1%5D))%0A%09exit(%22%5Busage%5D%20.%2F%24argv%5B0%5D%20myexcelfile.xlsx%5Cn%22)%3B%0A%0A%2F%2F%20%20%20%20%20%20%20Text%20Dictionnary%0A%24handle%20%3D%20fopen(%22zip%3A%2F%2F%24argv%5B1%5D%23xl%2FsharedStrings.xml%22%2C%20'r')%3B%0Aif%20(%24handle)%20%7B%0A%09%24result%20%3D%20''%3B%0A%09while%20(!feof(%24handle))%0A%09%09%24result%20.%3D%20fread(%24handle%2C%208192)%3B%0A%09fclose(%24handle)%3B%0A%09%24content%20%3D%20str_replace(%22%5Cn%22%2C%20%22%22%2C%20%24result)%3B%0A%09if%20(preg_match_all('%2F%5C%3Csi%3E(.*%3F)%5C%3C%5C%2Fsi%3E%2Fs'%2C%20%24result%2C%20%24match))%20%7B%0A%09%09%24dico%20%3D%20%24match%5B1%5D%3B%0A%09%09foreach%20(%24match%5B1%5D%20as%20%24k%20%3D%3E%20%24v)%0A%09%09%09%24dico%5B%24k%5D%20%3D%20strip_tags(%24v)%3B%0A%09%7D%0A%7D%0A%0A%0Aif%20((%24zip%20%3D%20zip_open(%24argv%5B1%5D)))%20%7B%0A%09while%20(%24zip_entry%20%3D%20zip_read(%24zip))%20%7B%0A%09%09if%20(!%20zip_entry_open(%24zip%2C%20%24zip_entry))%0A%09%09%09continue%3B%0A%09%09%24filename%20%3D%20zip_entry_name(%24zip_entry)%3B%0A%09%09if%20(preg_match(%22%2Fxl%5C%2Fworksheets%5C%2Fsheet(%5B0-9%5D%7B0%2C3%7D).xml%2F%22%2C%24filename%2C%24fileId))%20%7B%0A%09%09%09%2F%2F%20%20%20%20%20Open%20File%0A%09%09%09%24filesize%20%3D%20intval(zip_entry_filesize(%24zip_entry))%3B%0A%09%09%09%24content%20%3D%20zip_entry_read(%24zip_entry%2C%20%24filesize)%3B%0A%09%09%09echo%20%22%5Cn%5Cn%5Cn%5CnFilename%20%3A%3B%20%24filename%3B%5Cn%5Cn%5Cn%5Cn%22%3B%0A%09%09%09%24rowReg%20%20%20%20%20%3D%20'%2F%5C%3Crow%20%5BA-Za-z-0-9%5E_.%3A%3D%22%5C'%20%5D%7B0%2C200%7D%3E(.*%3F)%5C%3C%5C%2Frow%3E%2Fs'%3B%0A%09%09%09if%20(preg_match_all(%24rowReg%2C%20%24content%2C%20%24data))%20%7B%0A%09%09%09%09%24rows%20%3D%20%24data%5B1%5D%3B%0A%09%09%09%09%2F%2F%20%20%20%20%20%20%20Read%20All%20Data%20Line%0A%09%09%09%09foreach%20(%24rows%20as%20%24k%20%3D%3E%20%24v)%20%7B%0A%09%09%09%09%09%24colReg%20%3D%20'%2F%5C%3Cc%20%5BA-Za-z-0-9%5E_.%3A%3D%22%5C'%20%5D%7B0%2C200%7D(%5C%3E%5C%3Cv%3E(.*%3F)%5C%3C%5C%2Fv%3E%7C%5C%2F%5C%3E)%2Fs'%3B%0A%09%09%09%09%09if%20(preg_match_all(%24colReg%2C%20%24v%2C%20%24row))%20%7B%0A%09%09%09%09%09%09%24rowData%20%3D%20%24row%5B2%5D%3B%0A%09%09%09%09%09%09%2F%2F%20%20%20%20%20%20%20Extract%20All%20Record%20from%20Line%0A%09%09%09%09%09%09foreach%20(%24rowData%20as%20%24k%20%3D%3E%20%24v)%20%7B%0A%09%09%09%09%09%09%09if%20(strstr(%24row%5B0%5D%5B%24k%5D%2C%20't%3D%22s%22'))%0A%09%09%09%09%09%09%09%09%24v%20%3D%20str_replace(%22%5Cn%22%2C'%5Cn'%2C%24dico%5B%24v%5D)%3B%0A%09%09%09%09%09%09%09echo%20'%22'.addslashes((%24v%3D%3D'%2F%3E')%3F''%3A%24v).'%22%3B'%3B%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09echo%20%22%5Cn%22%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%09%09zip_entry_close(%24zip_entry)%3B%0A%09%7D%0A%09zip_close(%24zip)%3B%0A%7D%0A%3F%3E" message="conversion.php" highlight="" provider="manual"/]
Bonjour, 2022 et avec php 8.0+, les fonctions zip_* sont obsolètes :)
J’ai donc mis à jour en utilisant la class ZipArchive, en réadaptant un peu à ma sauce également !
[pastacode lang="php" manual="function%20get_intels_from_xls(%24url)%20%7B%0A%09%09if(is_string(%24url)%20AND%20!empty(%24url))%20%7B%0A%09%09%09%24file%20%3D%20%24url%3B%20%2F%2F%20Traitements%20de%20l'URL%20si%20besoin%20auparavant%0A%09%09%09%0A%09%09%09if(file_exists(%24file))%20%7B%0A%09%09%09%09%24handle%20%3D%20fopen('zip%3A%2F%2F'.%24file.'%23xl%2FsharedStrings.xml'%2C%20'r')%3B%0A%09%09%09%09if(%24handle)%20%7B%0A%09%09%09%09%09%24result%20%3D%20''%3B%0A%09%09%09%09%09while(!feof(%24handle))%20%7B%20%24result%20.%3D%20fread(%24handle%2C%208192)%3B%20%7D%0A%09%09%09%09%09fclose(%24handle)%3B%0A%09%09%09%09%09%24content%20%3D%20str_replace(%22%5Cn%22%2C%20%22%22%2C%20%24result)%3B%0A%09%09%09%09%09if(preg_match_all('%2F%5C%3Csi%3E(.*%3F)%5C%3C%5C%2Fsi%3E%2Fs'%2C%20%24result%2C%20%24match))%20%7B%0A%09%09%09%09%09%09%24dico%20%3D%20%24match%5B1%5D%3B%0A%09%09%09%09%09%09foreach(%24match%5B1%5D%20as%20%24k%20%3D%3E%20%24v)%20%7B%20%24dico%5B%24k%5D%20%3D%20strip_tags(%24v)%3B%20%7D%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%09%0A%09%09%09%09%24zip%20%3D%20new%20ZipArchive%3B%0A%09%09%09%09%24res%20%3D%20%24zip-%3Eopen(%24file)%3B%0A%0A%09%09%09%09if(%24res%20%3D%3D%3D%20TRUE)%20%7B%0A%09%09%09%09%09%24return%20%3D%20array()%3B%0A%09%09%09%09%09%0A%09%09%09%09%09%24nbr_files%20%3D%20%24zip-%3EnumFiles%3B%0A%09%09%09%09%09%24rowReg%20%3D%20'%2F%5C%3Crow%20%5BA-Za-z-0-9%5E_.%3A%3D%22%5C'%20%5D%7B0%2C200%7D%3E(.*%3F)%5C%3C%5C%2Frow%3E%2Fs'%3B%0A%09%09%09%09%09%24colReg%20%3D%20'%2F%5C%3Cc%20%5BA-Za-z-0-9%5E_.%3A%3D%22%5C'%20%5D%7B0%2C200%7D(%5C%3E%5C%3Cv%3E(.*%3F)%5C%3C%5C%2Fv%3E%7C%5C%2F%5C%3E)%2Fs'%3B%0A%09%09%09%09%09%0A%09%09%09%09%09for(%24i%20%3D%200%3B%20%24i%20%3C%20%24nbr_files%3B%20%24i%2B%2B)%20%7B%0A%09%09%09%09%09%09%24filename%20%3D%20%24zip-%3EgetNameIndex(%24i)%3B%0A%09%09%09%09%09%09%0A%09%09%09%09%09%09if(%24filename%20AND%20preg_match(%22%2Fxl%5C%2Fworksheets%5C%2Fsheet(%5B0-9%5D%7B0%2C3%7D).xml%2Fis%22%2C%24filename%2C%24fileId))%20%7B%0A%09%09%09%09%09%09%09%24fileIntels%20%3D%20%24zip-%3EstatIndex(%24i)%3B%0A%09%09%09%09%09%09%09%24filesize%20%3D%20intval(%24fileIntels%5B'size'%5D)%3B%0A%09%09%09%09%09%09%09%24content%20%3D%20%24zip-%3EgetFromIndex(%24i)%3B%0A%09%09%09%09%09%09%09%0A%09%09%09%09%09%09%09if(preg_match_all(%24rowReg%2C%20%24content%2C%20%24data))%20%7B%0A%09%09%09%09%09%09%09%09%24rows%20%3D%20%24data%5B'1'%5D%3B%0A%09%09%09%09%09%09%09%09foreach(%24rows%20as%20%24k%20%3D%3E%20%24v)%20%7B%0A%09%09%09%09%09%09%09%09%09if(preg_match_all(%24colReg%2C%20%24v%2C%20%24row))%20%7B%0A%09%09%09%09%09%09%09%09%09%09%24rowData%20%3D%20%24row%5B2%5D%3B%0A%09%09%09%09%09%09%09%09%09%09foreach(%24rowData%20as%20%24kk%20%3D%3E%20%24vv)%20%7B%0A%09%09%09%09%09%09%09%09%09%09%09if(strstr(%24row%5B0%5D%5B%24kk%5D%2C%20't%3D%22s%22'))%20%7B%20%24vv%20%3D%20str_replace(%22%5Cn%22%2C'%5Cn'%2C%24dico%5B%24vv%5D)%3B%20%7D%0A%09%09%09%09%09%09%09%09%09%09%09%24return%5B%24k%5D%5B%24kk%5D%20%3D%20addslashes((%24vv%3D%3D'%2F%3E')%3F''%3A%24vv)%3B%0A%09%09%09%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%7D%0A%09%09%09%09%09%0A%09%09%09%09%09%24zip-%3Eclose()%3B%0A%09%09%09%09%09%0A%09%09%09%09%09if(!empty(%24return))%20%7B%0A%09%09%09%09%09%09return%20%24return%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%09%09%0A%09%09return%20false%3B%0A%09%7D" message="" highlight="" provider="manual"/]