web-dev-qa-db-fra.com

Boucle de colonne PHPExcel

Comment puis-je créer une boucle basée sur des colonnes de feuille de calcul Excel? J'ai trouvé (et utilisé) WorksheetIterator, RowIterator et CellIterator mais rien sur les colonnes.

30
Hazar

Il n'y a pas de ColumnIterator, vous devrez donc le faire à la main.

Pour toute feuille de calcul donnée:

Pour boucler des lignes pour une colonne:

$column = 'A';
$lastRow = $worksheet->getHighestRow();
for ($row = 1; $row <= $lastRow; $row++) {
    $cell = $worksheet->getCell($column.$row);
    //  Do what you want with the cell
}

Pour boucler des colonnes en ligne, vous pouvez tirer parti de la capacité de Perls de PHP à incrémenter des caractères:

$row = 1;
$lastColumn = $worksheet->getHighestColumn();
$lastColumn++;
for ($column = 'A'; $column != $lastColumn; $column++) {
    $cell = $worksheet->getCell($column.$row);
    //  Do what you want with the cell
}

Notez que lorsque l'on compare des lettres de colonne pour tester la dernière colonne de la boucle, nous ne pouvons pas simplement utiliser <ou <= car nous comparons des chaînes, et "B"> "AZ" dans la comparaison de chaînes standard. ! = comparaison, après avoir incrémenté la valeur de colonne la plus élevée pour donner le premier identifiant de colonne au-delà du point final.

Vous pouvez aussi utiliser

$worksheet->cellExists($column.$row);

dans la boucle pour vérifier l'existence d'une cellule avant d'y accéder, à l'aide de getCell () (ou non) pour émuler le comportement de l'itérateur getIterateOnlyExistingCells ()

Les itérateurs sont en fait assez lents, alors vous constaterez peut-être que ces boucles simples sont plus rapides que d’utiliser les itérateurs.

MISE &AGRAVE; JOUR(2015-05-06)

La version 1.8.1 de PHPExcel a introduit un nouvel itérateur de colonnes. Les itérateurs de lignes et de colonnes vous permettent également de spécifier une plage de lignes ou de colonnes à itérer, et vous permettent d'utiliser prev () et next () lors d'une lecture en boucle.

79
Mark Baker

Ce court extrait fournit une boucle entre les lignes de colonnes . Il récupère les index de la dernière colonne non vide (et de sa ligne) et les boucles pour ces index, aussi tenez compte des valeurs oubliées dans Excel.

Le code parcourt les lignes de la colonne A, puis celles de la colonne B ...

$objReader = new PHPExcel_Reader_Excel2007();
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($file);

foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) 
{
    $worksheetTitle = $worksheet->getTitle();
    $highestColumn = $worksheet->getHighestColumn();
    $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);

    // expects same number of row records for all columns
    $highestRow = $worksheet->getHighestRow();

    for($col = 0; $col < $highestColumnIndex; $col++)
    {
        // if you do not expect same number of row records for all columns
        // get highest row index for each column
        // $highestRow = $worksheet->getHighestRow();

        for ($row = 1; $row <= $highestRow; $row++)
        {
            $cell = $worksheet->getCellByColumnAndRow($col, $row);
            $val = $cell->getValue();
            // do what you want with cell value
        }
    }
}
7
unnamed

colonnes de boucle comme plage

foreach ( range('A', $Excel->getActiveSheet()->getHighestColumn()) as $column_key) {

}
4
anydasa

Ceci est le correctif pour la méthode getColumnLetter du dernier message, il vous permet d’obtenir les "lettres" des colonnes, quel que soit le nombre de colonnes que vous avez.

function getColumnLetter( $number ){
    $prefix = '';
    $suffix = '';
    $prefNum = intval( $number/26 );
    if( $number > 25 ){
        $prefix = getColumnLetter( $prefNum - 1 );
    }
    $suffix = chr( fmod( $number, 26 )+65 );
    return $prefix.$suffix;
}
1
Ronald Rubí

Essaye ça! Travail!

$limit = 10000;
$value='sua mensagem'
for($i=0,$j='A';$i<$limit;$i++,$j++) {
    $objPHPExcel->setActiveSheetIndex(0)
  ->setCellValue($j.$i, $value);
}

définissez dans $ valeur ce que vous voulez imprimer.

1
Rogerio de Moraes

Cette méthode récursive a été conçue pour vous permettre d’obtenir les "lettres" des colonnes, quel que soit le nombre de colonnes que vous avez, de "A" à "ZZZZZZZZZ ...":

function getColumnLetter( $number )
{
    $prefix = '';
    $suffix = '';
    $prefNum = intval( $number/26 );
    if( $prefNum > 25 )
    {
        $prefix = getColumnLetter( $prefNum );
    }
    $suffix = chr( fmod( $number, 26 )+65 );
    return $prefix.$suffix;
}

Ainsi, vous pouvez boucler les colonnes d’un tableau PHP sur un numéro d’index et les convertir en chaîne de lettres et les utiliser dans les méthodes PHPExcel, comme "setCellValue" ... peut les utiliser!

0
laurent belloeil