[RESOLU] [PHP SpreadSheet] Sélection d'une seule ligne

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] [PHP SpreadSheet] Sélection d'une seule ligne

Re: [PHP SpreadSheet] Sélection d'une seule ligne

par GuillaumeLM » 07 mars 2022, 10:33

Merci Maitrepylos,
et désolé, j'avais mal compris ce que vous me proposiez, cela fonctionne parfaitement donc un énorme merci!!

Re: [PHP SpreadSheet] Sélection d'une seule ligne

par Maitrepylos » 07 mars 2022, 09:56

Je vous demande si le code que je vous propose ici, vous convient ? vous me dite oui, mais que vous n'avez pas toute la ligne.
Je vous montre comment avoir toute la ligne dans mon code.

Re: [PHP SpreadSheet] Sélection d'une seule ligne

par GuillaumeLM » 06 mars 2022, 20:01

Il vous suffit donc dans mon code de remplacer la récupération par le ligne complète.

Ceci
 $recup [] = $numMag;
Par
 $recup [] = $row;
Désolé je ne comprend pas votre message, je n'ai pas de variable $recup, et, je ne stock aucune ligne complète!? :?

Re: [PHP SpreadSheet] Sélection d'une seule ligne

par Maitrepylos » 06 mars 2022, 17:25

Il vous suffit donc dans mon code de remplacer la récupération par le ligne complète.

Ceci
 $recup [] = $numMag;
Par
 $recup [] = $row;

Re: [PHP SpreadSheet] Sélection d'une seule ligne

par GuillaumeLM » 04 mars 2022, 11:06

est-ce que ceci, approche ce que vous voulez faire ?
Plus ou moins, puisqu'il me faudrait la ligne au complet et pas seulement les quelques champs de recherche, en passant par le removeRow() j'arrive presque à avoir ce que je veux

Re: [PHP SpreadSheet] Sélection d'une seule ligne

par GuillaumeLM » 04 mars 2022, 11:03

Bonjour, après une maladie et de nombreuses tentative, je reviens vers vous car, désormais, j'arrive à sortir mon fichier excel, avec le bon nombre de lignes en erreurs, mais, avec les dernières lignes du tableau original.
Pour tenter d'être le plus clair possible, je sais que j'ai au total 14 lignes en erreur sur mon tableau original, or, il me sort, sur le fichier erreur, les 14 dernières lignes du tableau original, et non les vraies lignes qui sont en erreurs.
<?php
require_once "config.php";
require_once "vendor/autoload.php";

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxW;

$rowError = array();
if ($dir = opendir('C:\laragon\www\xlsxToCsv\Import')) {
    while (false !== ($file = readdir($dir))) {
        if ($file != ".." && $file != "." && $file != "ERREUR" && $file != "IMPORTER" && $file != "ARCHIVES" && $file != "Entete_type.xlsx" && $file != "Thumbs.db") {
            $reader = new Xlsx();
            $spreadsheet = $reader->load('C:\laragon\www\xlsxToCsv\Import\\' . $file);
            $writer = $spreadsheet;
            $sheet = $writer->getActiveSheet();
            $sheetData = $spreadsheet->getActiveSheet()->toArray();
            if (!empty($sheetData)) {
                for ($i = 1; $i < count($sheetData); $i++) { //Saut de la 1ere ligne entete
                    $j = 1;
                    $numMag = $sheetData[$i][10];
                    $libMag = $sheetData[$i][11];
                    $searchMag = Find_mag($numMag);
                     if (empty($searchMag)) {
                        $j++;
                        $dest = "";
                        $headers  = "MIME-Version: 1.0" . "\r\n";
                        $headers .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
                        $message = "<html>
                        <head>
                        <title></title>
                        </head>
                        <body>
                        <p>Attention,</p>
                        <p>Le magasin " . $numMag . " " . $libMag . ", à la ligne " . ($i + 1) . " du fichier excel n'est pas présent dans la base.</p>
                        <p>Vous devez le créer avant de pouvoir traiter le fichier.</p>
                        </body>
                        </html>";
                        mail($dest, "", $message, $headers);
                        array_push($rowError, $i);
                    }
                    else {
                        $sheet->removeRow(($j+1), 1);
                    }
                }
            }
            $writer = new XlsxW($writer);
            $writer->save("./Erreurs/errorList.xlsx");
        }
    }
    closedir($dir);
}
Voilà la mise à jour du code.

Encore merci d'avance!

Re: [PHP SpreadSheet] Sélection d'une seule ligne

par Maitrepylos » 03 mars 2022, 18:36

est-ce que ceci, approche ce que vous voulez faire ?
<?php
require_once "config.php";
require_once "vendor/autoload.php";

use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
use PhpOffice\PhpSpreadsheet\Spreadsheet;

$rowError = [];
if ($dir = opendir('C:\laragon\www\xlsxToCsv\Import')) {
    $a=1;
    while (false !== ($file = readdir($dir))) {
        if ($file != ".." && $file != "." && $file != "ERREUR" && $file != "IMPORTER" && $file != "ARCHIVES" && $file != "Entete_type.xlsx" && $file != "Thumbs.db") {
            $reader = new Xlsx();
            $spreadsheet = $reader->load('C:\laragon\www\xlsxToCsv\Import\\' . $file);
            $sheetData = $spreadsheet->getActiveSheet()->toArray();
            if (!empty($sheetData)) {
                for ($i = 1, $iMax = count($sheetData); $i < $iMax; $i++) { //Saut de la 1ere ligne entete
                    $numMag = $sheetData[$i][10];
                    $libMag = $sheetData[$i][11];
                    $row = $sheetData[$i];
                    $searchMag = Find_mag($numMag);
                    if (empty($searchMag)) {
                        $recup [] = $numMag;
                    }

                }
            }

        }
    }
    $excel = new Spreadsheet();
    $excel->fromArray(
        $recup,
        null,
        'A2'
    );
    $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($excel);
    $writer->setOffice2003Compatibility(true);
    $writer->save("./Erreurs/errorList".$a.".xlsx");
    $a++;
}
closedir($dir);

Re: [PHP SpreadSheet] Sélection d'une seule ligne

par @rthur » 28 févr. 2022, 13:14

C'est que tu l'utilises mal car c'est la bonne fonction.
Donc il faut que tu avances dans ton debugage.

Re: [PHP SpreadSheet] Sélection d'une seule ligne

par GuillaumeLM » 28 févr. 2022, 12:53

Le removeRow() ne me retire absolument aucune ligne...

Re: [PHP SpreadSheet] Sélection d'une seule ligne

par @rthur » 28 févr. 2022, 12:43

Je t'ai donné le code pour supprimer une ligne avec removeRow(), qu'est-ce qui ne fonctionne pas ?

Re: [PHP SpreadSheet] Sélection d'une seule ligne

par GuillaumeLM » 28 févr. 2022, 11:16

Bonjour,
Désolé, je n'y arrive pas, soit j'ai des erreurs soit il me crée un fichier xlsx identique au 1er sans aucun tri dedans... Ou encore, une feuille excel vierge.

Re: [PHP SpreadSheet] Sélection d'une seule ligne

par or 1 » 25 févr. 2022, 13:28

https://www.php.net/manual/fr/function.copy.php pour faire une copie du fichier original, et supprimer les lignes comme indiqué par @rthur dans le fichier copié.

Re: [PHP SpreadSheet] Sélection d'une seule ligne

par GuillaumeLM » 25 févr. 2022, 12:00

Bonjour, pour tenter d’être le plus clair possible, je reçois un fichier X avec une liste de magasin dans lequel mon 1er for va vérifier la présence dans la base de données de ces magasins.
S'ils sont bien présents, mon programme passe à la suite, s'ils ne sont pas présent, je veux une ressortie des magasins en erreur dans un nouveau fichier Y.
Et donc actuellement j'ai une sortie de la totalité du fichier X.
Merci

Re: [PHP SpreadSheet] Sélection d'une seule ligne

par Maitrepylos » 25 févr. 2022, 11:44

Si je comprend bien, dans votre for, vous récupérez vos lignes dans un tableau et ensuite vous créez un fichier au départ de ce nouveau tableau.

Re: [PHP SpreadSheet] Sélection d'une seule ligne

par GuillaumeLM » 24 févr. 2022, 18:31

D'accord, je me suis mal exprimer, pardon, ce que je veux c'est récupérer certaines lignes seulement sans modifier le fichier original, et donc, créer un nouveau fichier avec ces quelques lignes.
En gros, un équivalent addRow() serait génial.