Я пытаюсь автоматически изменить размер столбцов на моем листе. Я пишу файл и, в конце концов, пытаюсь изменить размер всех своих столбцов.
// Add some data
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('B1', 'test1111111111111111111111')
->setCellValue('C1', 'test1111111111111')
->setCellValue('D1', 'test1111111')
->setCellValue('E1', 'test11111')
->setCellValue('F1', 'test1')
->setCellValue('G1', 'test1');
foreach($objPHPExcel->getActiveSheet()->getColumnDimension() as $col) {
$col->setAutoSize(true);
}
$objPHPExcel->getActiveSheet()->calculateColumnWidths();
Приведенный выше код не работает. Не меняет размер столбца под текст
ОБНОВЛЕНИЕ
Автор, который я использую$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
Если вам нужно сделать это на нескольких листах и в нескольких столбцах на каждом листе, вот как вы можете перебирать все из них:
источник
$worksheet->getColumnIterator()
для упрощения. Обратитесь к моему ответуВот более гибкий вариант, основанный на публикации @Mark Baker:
Надеюсь это поможет ;)
источник
range('A', 'AB')
вернет только один элемент с именем «A». Так что использованиеrange()
в этом случае НЕ является хорошей идеей!$sheet->getColumnIterator()
источник
$i <= $objPHPExcel->getActiveSheet()->getHighestColumn()
иначе размер последней колонки неЭто пример использования всех столбцов на листе:
источник
Этот фрагмент кода автоматически изменит размер всех столбцов, содержащих данные, на всех листах. Нет необходимости использовать геттер и сеттер activeSheet.
источник
для phpspreadsheet:
источник
foreach (range('A', $sheet->getHighestDataColumn()) as $column) {$sheet->getColumnDimension($column)->setAutoSize(true);}
На случай, если кто-то это искал.
Приведенное ниже разрешение также работает с
PHPSpreadsheet
их новой версией PHPExcel.Что делают эти методы:
getHighestColumn($row = null)
- Получите самый высокий столбец рабочего листа.getHighestDataColumn($row = null)
- Получите самый высокий столбец рабочего листа, содержащий данные.getHighestRow($column = null)
- Получить самую высокую строку рабочего листаgetHighestDataRow($column = null)
- Получить самую высокую строку рабочего листа, содержащую данные.источник
источник
Если вы попытаетесь выполнить итерацию с
for ($col = 2; $col <= 'AC'; ++ $col){...}
или сforeach(range('A','AC') as $col) {...}
ним, он будет работать для столбцов от A до Z, но он не сможет передать Z (например, итерация между «A» и «AC»).Чтобы повторить проход Z, вам нужно преобразовать столбец в целое число, увеличить, сравнить и снова получить его как строку:
Благодаря этому вы легко перебираете столбец «Z» и устанавливаете автоматический размер для каждого столбца.
источник
Приходите поздно, но после поисков я нашел решение, которое кажется "единственным".
Зная, что в последних версиях API есть итератор столбца, но не зная, как самостоятельно настроить объект столбца, я создал цикл для перехода от реального первого использованного столбца к действительно последнему использованному.
Вот оно:
источник
источник
вам также необходимо указать столбцы для установки размеров:
источник
источник
Для Spreedsheet + PHP 7, вы должны написать вместо
PHPExcel_Cell::columnIndexFromString
,\PhpOffice\PhpSpreadsheet\Cell::columnIndexFromString
. А в шлейфе ошибка, там<
работать не надо<=
. В противном случае он слишком увлечет столбик в петлю.источник
Все эти ответы отстой ... не используйте range (), он не будет работать за пределами столбца Z.
Просто используйте:
Сделайте это после того, как вы записали свои данные, чтобы итератор столбцов знал, сколько столбцов нужно перебирать.
источник