Excel ワークシートの列に基づくループを実行するにはどうすればよいですか? WorksheetIterator、RowIterator、CellIterator を見つけました (そして使用しました) が、列については何もありませんでした。
7 に答える
ColumnIterator はないので、手動で行う必要があります。
特定のワークシートの場合:
列の行をループするには:
$column = 'A';
$lastRow = $worksheet->getHighestRow();
for ($row = 1; $row <= $lastRow; $row++) {
$cell = $worksheet->getCell($column.$row);
// Do what you want with the cell
}
行の列をループするには、PHP の Perls スタイルの文字をインクリメントする機能を利用できます。
$row = 1;
$lastColumn = $worksheet->getHighestColumn();
$lastColumn++;
for ($column = 'A'; $column != $lastColumn; $column++) {
$cell = $worksheet->getCell($column.$row);
// Do what you want with the cell
}
ループの最後の列をテストするために列の文字を比較する場合、単純に < または <= を使用できないことに注意してください。 != 比較。列の最大値をインクリメントして、終点を過ぎた最初の列 ID を示します。
使用することもできます
$worksheet->cellExists($column.$row);
getCell() を使用して (または使用せずに) セルにアクセスする前にセルの存在をテストして、反復子 getIterateOnlyExistingCells() の動作をエミュレートするループ内
イテレータは実際にはかなり遅いので、これらの単純なループはイテレータを使用するよりも高速であることがわかるでしょう。
更新(2015-05-06)
PHPExcel バージョン 1.8.1 では、新しい列反復子が導入されました。行と列のイテレータを使用すると、反復する行または列の範囲を指定することもでき、ループするときに prev() と next() を使用できます。
これを試して!仕事!
$limit = 10000;
$value='sua mensagem'
for($i=0,$j='A';$i<$limit;$i++,$j++) {
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue($j.$i, $value);
}
印刷したいものを $value に設定します。
これは、最後のメッセージの getColumnLetter メソッドの修正です。列の数に関係なく、列の「文字」を取得できます。
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;
}
この再帰的なメソッドは、「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;
}
したがって、PHP配列の列をインデックス番号でループし、それを文字列に変換して、「setCellValue」などのPHPExcelメソッドで使用できます...しかし、上記のソリューションは、使用できれば確実に高速です!