Ширину столбца авто размер PHPExcel

Я'м пытаясь авторазмер столбцов моего листа. Я'м пишу в файл и в конце я пытаюсь изменить все мои столбцы.

// 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 ()`), то он выиграл'т существуют (экономия памяти).

Комментарии (7)

Если вам нужно, чтобы сделать это на нескольких листах, и несколько столбцов в каждом листе, вот как можно перебрать все из них:

// 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);
    }
}
Комментарии (3)

Здесь более гибкий вариант, основанный на @Марк Бейкер пост:

foreach (range('A', $phpExcelObject->getActiveSheet()->getHighestDataColumn()) as $col) {
        $phpExcelObject->getActiveSheet()
                ->getColumnDimension($col)
                ->setAutoSize(true);
    } 

Надеюсь, что это помогает ;)

Комментарии (3)
for ($i = 'A'; $i !=  $objPHPExcel->getActiveSheet()->getHighestColumn(); $i++) {
    $objPHPExcel->getActiveSheet()->getColumnDimension($i)->setAutoSize(TRUE);
}
Комментарии (2)

Это пример, как использовать все столбцы из таблицы:

$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 );
}
Комментарии (1)

Этот фрагмент кода будет автоматически размер всех столбцов, которые содержат данные во всех листах. Нет необходимости использовать объект 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 getHighestDataColumn()); $col++) {
        $sheet->getColumnDimensionByColumn($col)->setAutoSize(true);
    }
}
Комментарии (0)

для 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);
}
Комментарии (1)
foreach(range('B','G') as $columnID)
{
    $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
}
Комментарии (0)

В случае, если кто-то ищет этого.

Разрешение ниже, также работает на 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) - получить высокие строки таблицы, которая содержит данные.

Комментарии (0)

Если вы пытаетесь перебрать с для ($кол = 2; $коль <= &#39;АС&#39;; ++ $кол){...}, или `по каждому элементу(диапазон('Это','АС') как $кол) { ... } это будет работать для столбцов от A до Z, но это не передать з (Исх. чередовать 'Это' до 'АС').

Для того, чтобы перебрать посадочный 'з', нужно преобразовать столбец на число, инкремент, сравнить, и сделать его как строку:

$MAX_COL = $sheet->getHighestDataColumn();
$MAX_COL_INDEX = PHPExcel_Cell::columnIndexFromString($MAX_COL);
    for($index=0 ; $index getColumnDimension($col)->setAutoSize(TRUE);
}

При этом, вы легко перебирать пройти 'з' столбец и установите свойство AutoSize в каждом столбце.

Комментарии (0)

вы также должны указать столбцы, в комплект размеры:

foreach (range('A', $phpExcelObject->getActiveSheet()->getHighestDataColumn()) as $col) {
$phpExcelObject
        ->getActiveSheet()
        ->getColumnDimension($col)
        ->setAutoSize(true);
}
Комментарии (0)

Пришел поздно, но, после долгих поисков, я'ве создали решение, которое, кажется, чтобы быть "один и".

Быть известно, что есть итератор колонке на последней версии 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');
Комментарии (0)
$col = 'A';
while(true){
    $tempCol = $col++;
    $objPHPExcel->getActiveSheet()->getColumnDimension($tempCol)->setAutoSize(true);
    if($tempCol == $objPHPExcel->getActiveSheet()->getHighestDataColumn()){
        break;
    }
}
Комментарии (1)

Для Spreedsheet + на PHP 7, Вы должны написать вместо PHPExcel_Cell::columnIndexFromString, \PhpOffice\PhpSpreadsheet\клетка::columnIndexFromString. И в петлю-это ошибка, там вы должны < не работать с <=. В противном случае, он принимает столбец слишком много в петлю.

Комментарии (0)

Ланг-РНР // Авторазмер столбцов для всех таблиц по каждому элементу ($objPHPExcel->getWorksheetIterator() как $лист) { по каждому элементу ($листе->getColumnIterator() как $столбец) { $лист ->колонки&getColumnDimension($ГТ;getColumnIndex()) ->setAutoSize(истина); } }

Комментарии (0)