Я'м пытаясь авторазмер столбцов моего листа. Я'м пишу в файл и в конце я пытаюсь изменить все мои столбцы.
// 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();
Приведенный выше код не'т работу. Не't изменить размер столбца, чтобы соответствовать текст
Обновление
Писатель Я'м через $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
Если столбец имеет значение свойства AutoSize, PHPExcel попытки рассчитать ширину столбца на основе рассчитанных значений столбца (так на результат любой формулы), и каких-либо дополнительных символов, добавленных в формате маски, такие как разделители тысяч.
По умолчанию это оценивается
ширина: более точный метод расчета, основанных на использовании GD, который может также обрабатывать шрифт стиля, такими как полужирное и курсивное начертание; но это гораздо больший нагрузку, поэтому она выключена по умолчанию. Вы можете дать более точный расчет, используя
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);
Однако, авторазмер не'т распространяется на все форматы писатель... например в CSV. Вы Don'т отметить, что писатель вы're, используя.
Но вы также должны указать столбцы, в комплект размеры:
foreach(range('B','G') as $columnID) {
$objPHPExcel->getActiveSheet()->getColumnDimension($columnID)
->setAutoSize(true);
}
$objPHPExcel->getActiveSheet()->getColumnDimension()
принимает идентификатор столбца.
$objPHPExcel->getActiveSheet()->getColumnDimensions()
возвращает массив всех определенных столбцов параметров записи; но если столбец размер записи был явно создан (возможно, путем загрузки шаблона или вручную звоню getColumnDimension ()`), то он выиграл'т существуют (экономия памяти).
Если вам нужно, чтобы сделать это на нескольких листах, и несколько столбцов в каждом листе, вот как можно перебрать все из них:
// Auto size columns for each worksheet
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
$objPHPExcel->setActiveSheetIndex($objPHPExcel->getIndex($worksheet));
$sheet = $objPHPExcel->getActiveSheet();
$cellIterator = $sheet->getRowIterator()->current()->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(true);
/** @var PHPExcel_Cell $cell */
foreach ($cellIterator as $cell) {
$sheet->getColumnDimension($cell->getColumn())->setAutoSize(true);
}
}
Здесь более гибкий вариант, основанный на @Марк Бейкер пост:
foreach (range('A', $phpExcelObject->getActiveSheet()->getHighestDataColumn()) as $col) {
$phpExcelObject->getActiveSheet()
->getColumnDimension($col)
->setAutoSize(true);
}
Надеюсь, что это помогает ;)
for ($i = 'A'; $i != $objPHPExcel->getActiveSheet()->getHighestColumn(); $i++) {
$objPHPExcel->getActiveSheet()->getColumnDimension($i)->setAutoSize(TRUE);
}
Это пример, как использовать все столбцы из таблицы:
$sheet = $PHPExcel->getActiveSheet();
$cellIterator = $sheet->getRowIterator()->current()->getCellIterator();
$cellIterator->setIterateOnlyExistingCells( true );
/** @var PHPExcel_Cell $cell */
foreach( $cellIterator as $cell ) {
$sheet->getColumnDimension( $cell->getColumn() )->setAutoSize( true );
}
Этот фрагмент кода будет автоматически размер всех столбцов, которые содержат данные во всех листах. Нет необходимости использовать объект activesheet геттер и сеттер.
// In my case this line didn't make much of a difference
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);
// Iterating all the sheets
/** @var PHPExcel_Worksheet $sheet */
foreach ($objPHPExcel->getAllSheets() as $sheet) {
// Iterating through all the columns
// The after Z column problem is solved by using numeric columns; thanks to the columnIndexFromString method
for ($col = 0; $col <= PHPExcel_Cell::columnIndexFromString($sheet->getHighestDataColumn()); $col++) {
$sheet->getColumnDimensionByColumn($col)->setAutoSize(true);
}
}
для phpspreadsheet:
$sheet = $spreadsheet->getActiveSheet(); // $spreadsheet is instance of PhpOffice\PhpSpreadsheet\Spreadsheet
foreach (
range(
1,
Coordinate::columnIndexFromString($sheet->getHighestColumn(1))
) as $column
) {
$sheet
->getColumnDimension(Coordinate::stringFromColumnIndex($column))
->setAutoSize(true);
}
foreach(range('B','G') as $columnID)
{
$objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
}
В случае, если кто-то ищет этого.
Разрешение ниже, также работает на PHPSpreadsheet, их новая версия PHPExcel.
// assuming $spreadsheet is instance of PhpOffice\PhpSpreadsheet\Spreadsheet
// assuming $worksheet = $spreadsheet->getActiveSheet();
foreach(range('A',$worksheet->getHighestColumn()) as $column) {
$spreadsheet->getColumnDimension($column)->setAutoSize(true);
}
Примечание:
getHighestColumn()
можно заменитьgetHighestDataColumn()
или последний фактический столбец.
Что эти методы:
getHighestColumn($строки = значение null)
- получить высокий листе столбец.
getHighestDataColumn($строки = значение null)
- получить высокий листе столбец, который содержит данные.
getHighestRow($столбец = значение null)
- получить высокий листе строки
getHighestDataRow($столбец = значение null)
- получить высокие строки таблицы, которая содержит данные.
Если вы пытаетесь перебрать с для ($кол = 2; $коль <= 'АС'; ++ $кол){...}
, или `по каждому элементу(диапазон('Это','АС') как $кол) { ... } это будет работать для столбцов от A до Z, но это не передать з (Исх. чередовать 'Это' до 'АС').
Для того, чтобы перебрать посадочный 'з', нужно преобразовать столбец на число, инкремент, сравнить, и сделать его как строку:
$MAX_COL = $sheet->getHighestDataColumn();
$MAX_COL_INDEX = PHPExcel_Cell::columnIndexFromString($MAX_COL);
for($index=0 ; $index <= $MAX_COL_INDEX ; $index++){
$col = PHPExcel_Cell::stringFromColumnIndex($index);
// do something, like set the column width...
$sheet->getColumnDimension($col)->setAutoSize(TRUE);
}
При этом, вы легко перебирать пройти 'з' столбец и установите свойство AutoSize в каждом столбце.
вы также должны указать столбцы, в комплект размеры:
foreach (range('A', $phpExcelObject->getActiveSheet()->getHighestDataColumn()) as $col) {
$phpExcelObject
->getActiveSheet()
->getColumnDimension($col)
->setAutoSize(true);
}
Пришел поздно, но, после долгих поисков, я'ве создали решение, которое, кажется, чтобы быть "один и".
Быть известно, что есть итератор колонке на последней версии API, но не зная, как atuoadjust объекта колонна это сам, в основном я'вэ создал цикл, чтобы перейти от реальной первом столбце В последней используется один.
Вот он идет:
//Just before saving de Excel document, you do this:
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);
//We get the util used space on worksheet. Change getActiveSheet to setActiveSheetIndex(0) to choose the sheet you want to autosize. Iterate thorugh'em if needed.
//We remove all digits from this string, which cames in a form of "A1:G24".
//Exploding via ":" to get a 2 position array being 0 fisrt used column and 1, the last used column.
$cols = explode(":", trim(preg_replace('/\d+/u', '', $objPHPExcel->getActiveSheet()->calculateWorksheetDimension())));
$col = $cols[0]; //first util column with data
$end = ++$cols[1]; //last util column with data +1, to use it inside the WHILE loop. Else, is not going to use last util range column.
while($col != $end){
$objPHPExcel->getActiveSheet()->getColumnDimension($col)->setAutoSize(true);
$col++;
}
//Saving.
$objWriter->save('php://output');
$col = 'A';
while(true){
$tempCol = $col++;
$objPHPExcel->getActiveSheet()->getColumnDimension($tempCol)->setAutoSize(true);
if($tempCol == $objPHPExcel->getActiveSheet()->getHighestDataColumn()){
break;
}
}
Для Spreedsheet + на PHP 7, Вы должны написать вместо PHPExcel_Cell::columnIndexFromString
, \PhpOffice\PhpSpreadsheet\клетка::columnIndexFromString
. И в петлю-это ошибка, там вы должны <
не работать с <=
. В противном случае, он принимает столбец слишком много в петлю.
Ланг-РНР // Авторазмер столбцов для всех таблиц по каждому элементу ($objPHPExcel->getWorksheetIterator() как $лист) { по каждому элементу ($листе->getColumnIterator() как $столбец) { $лист ->колонки&getColumnDimension($ГТ;getColumnIndex()) ->setAutoSize(истина); } }