¿Cómo puedo hacer un ciclo basado en las columnas de la hoja de cálculo de Excel? Encontré (y usé) WorksheetIterator, RowIterator y CellIterator pero nada sobre las columnas.PHPExcel Column Loop
Respuesta
No hay ColumnIterator, por lo que tendrá que hacer esto a mano.
Para cualquier hoja de cálculo dada:
Para filas de bucles de una columna:
$column = 'A';
$lastRow = $worksheet->getHighestRow();
for ($row = 1; $row <= $lastRow; $row++) {
$cell = $worksheet->getCell($column.$row);
// Do what you want with the cell
}
Para columnas de bucle en una fila, se puede aprovechar la capacidad de estilo Perls de PHP para incrementar caracteres:
$row = 1;
$lastColumn = $worksheet->getHighestColumn();
$lastColumn++;
for ($column = 'A'; $column != $lastColumn; $column++) {
$cell = $worksheet->getCell($column.$row);
// Do what you want with the cell
}
Tenga en cuenta que al comparar las letras de las columnas para comprobar la última columna del ciclo, no podemos simplemente usar < o < = porque ' estamos comparando cadenas, y "B"> "AZ" en la comparación de cadenas estándar, por lo que usamos una comparación! =, habiendo incrementado el valor de la columna más alta para dar la primera ID de columna más allá del punto final.
También puede utilizar
$worksheet->cellExists($column.$row);
en el circuito para la prueba de la existencia de una célula antes de acceder a ella usando getCell() (o no) para emular las getIterateOnlyExistingCells iterador() el comportamiento
El los iteradores en realidad son bastante lentos, por lo que es muy probable que estos bucles simples sean más rápidos que los iteradores.
ACTUALIZACIÓN (2015-05-06)
PHPExcel versión 1.8.1 ha introducido un nuevo iterador columna. La fila y iteradores columna también permite especificar un rango de filas o columnas a iterar, y le permiten utilizar prev() y así como el próximo() cuando un bucle a través
columnas de bucle como el rango
foreach (range('A', $Excel->getActiveSheet()->getHighestColumn()) as $column_key) {
}
Wow. No sabía 'range' en absoluto – realtebo
¡Prueba esto! ¡Trabajo!
$limit = 10000;
$value='sua mensagem'
for($i=0,$j='A';$i<$limit;$i++,$j++) {
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue($j.$i, $value);
}
juego en $ valor de lo que desea imprimir.
Bueno, establece en el límite 16.384, si quieres usar todas las colls. Este es un límite de Excel. La variable $ j es (A ... AAAAAA) y $ i es (1 ... 1.048.576), puede usar solo $ j para la letra coll y el número de arreglo: '-> setCellValue ($ j.'1 ', $ value); ' y $ value puede hacer otro bucle o poner datos de una base de datos y/o archivo de datos para rellenar los valores. –
Este breve fragmento proporciona filas de columnas en bucle. Obtiene los índices de la última columna no vacía (y su fila) y los bucles de esos índices, así que tenga en cuenta los valores olvidados en Excel.
Código bucles de las filas de throught de la columna A, a continuación, las filas de la columna 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
}
}
}
Este método recursivo fue diseñado le permite obtener las "letras" de las columnas, cualquiera que sea el número de columnas que tienen, de "a" 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;
}
Así puede recorrer las columnas de una matriz PHP en número de índice y convertirlo en una cadena de letras y utilizarlo en los métodos PHPExcel, como "setCellValue" ... Pero las soluciones anteriores son seguramente más rápidas si puede usar ellos !
PHPExcel ya tiene un método auxiliar para esto llamado PHPExcel_Cell :: stringFromColumnIndex() – dctucker
Sí, con una limitación de 3 letras. https://github.com/PHPOffice/PHPExcel/blob/1.8/Classes/PHPExcel/Cell.php línea 790 –
Creo que la limitación de tres letras está relacionada con limitaciones prácticas, como el número máximo de columnas en una hoja de cálculo de Excel (16,384). Tres letras A-Z pueden cubrir ese rango y más. ¿Puede identificar un caso de uso donde se requiere un nombre de columna de cuatro letras? – dctucker
Ésta es la solución para el método getColumnLetter del último mensaje, que le permite obtener las "letras" de las columnas, cualquiera que sea el número de columnas que tienen
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. Problema de memoria PHPExcel
- 2. Cómo exportar datos a un archivo Excel utilizando PHPExcel
- 3. sum of array column
- 4. hibernate column uniqueness question
- 5. JTable column spanning
- 6. MySQL Update Column +1?
- 7. PHPExcel leyendo pasado $ highestRow
- 8. MATLAB expression column indexing
- 9. Ignorar celdas vacías PHPExcel
- 10. rutina SQLite drop column
- 11. ALTER COLUMN en sqlite
- 12. Dynamic generate column mvvm
- 13. error PHPExcel en Codeigniter
- 14. para loop vs while loop vs foreach loop PHP
- 15. PHPExcel saca ceros como celdas en blanco
- 16. EJB3 - @Column (insertable = "false") pregunta
- 17. PHPExcel genera salida totalmente sincronizada
- 18. Oracle get column data size
- 19. Integración PHPExcel en Zend Framework
- 20. Zend Framework MySQL Update Column
- 21. NHibernate inconsistent sql column alias
- 22. PostgreSQL Big Text Column Performance
- 23. formatos de celda en phpexcel
- 24. PHPExcel write-on-the-fly?
- 25. PHPExcel clonar .xlsm con macros
- 26. jQGrid Column Chooser Modal Overlay
- 27. MySQL column name standards/conventions
- 28. MySQL Table with TEXT column
- 29. PHPExcel no exportará a CSV
- 30. PHPExcel y envoltura de texto
yo estaba tratando de obtener un valor numérico valor para columnas No estaba al tanto de la característica de incremento de caracteres de PHP. Gracias por la solución y este consejo! – Hazar
$ lastColumn = $ worksheet-> getHighestColumn(); está regresando B.y B es la última columna completa, por favor ayuda. – Bugfixer
Bueno, si 'B' es la última columna completa, ¿qué esperas que devuelva' getHighestColumn() '? Eso es lo que se supone que debe hacer –