Как настроить ширину ячеек, чтобы они не вырезали слова в Spreadsheet_Excel_Writer - PullRequest
1 голос
/ 22 декабря 2010

Я пытаюсь создать лист Excel, используя Spreadsheet_Excel_Writer, который поставляется с Pear.
Лист создан, и все в порядке, за исключением того, что Мои слова обрезаются, а ячейки не изменяют свою ширину для размещения целых слов. Я пытаюсь открыть его с помощью Office 2007.
Какие значения мне для этого нужно поместить в объект Spreadsheet_Excel_Writer_Format?

Ответы [ 3 ]

4 голосов
/ 22 декабря 2010

Я не верю, что вы можете сделать это с S_E_W. Было бы неплохо, если бы он имел эквивалент «автоподгонки» Excel для ширины / высоты столбца / строки, но это не так - вы можете установить для столбца только определенную ширину с помощью $worksheet->setColumn().

Возможно, вы захотите изучить переход на PHPExcel . Он все еще находится в активной разработке и поддерживает новейшие форматы файлов Excel, а также более полный API. S_E_W, по сути, мертв в воде, и теперь его следует считать ненужным.

0 голосов
/ 17 мая 2016

У меня есть решение для этого.

$columns = 'NOMBRE,APELLIDO,CEDULA';
$arrayColumns = array('NOMBRE','APELLIDO','CEDULA');
$format = $report->workbook->addFormat(array('Align' => 'left', 'size' => 10, 'Color' => 0));
    $col = 2;
    $row = 5;

                foreach($arrayColumns as $columnName){
                    $report->worksheet->write($row, $col, $columnName, $format);
                    $arrayColumnsWidth[$col] = strlen($columnName);
                    $col++;
}


$sql = "SELECT $columns 
                    FROM table" ;   
            $objConnectionSQL->prepareSql($sql);
            $rs = $objConnectionSQL->executeQuery();


$row++;//it brings me to the next row
            while ($data = $objConnectionSQL->getRows($rs)) {
                $col = 2;
                foreach($arrayColumns as $columnName){
                    $report->worksheet->write($row, $col, $data[$columnName], $format);
                    if($arrayColumnsWidth[$col] < strlen($data[$columnName])){
                        $arrayColumnsWidth[$col] = strlen($data[$columnName]);
                    }
                $col++;
                }
                $row++;
            }

foreach($arrayColumnsWidth as $keyCol => $valWidth){
                $this->worksheet->setColumn($keyCol,$keyCol,floor($valWidth));
        }

Поначалу это немного сложно, но сейчас я могу сделать динамическую ширину для каждого столбца. Надеюсь, это кому-нибудь поможет.

0 голосов
/ 23 января 2012

Мне также нужно было автоматически установить высоту строки в Spreadsheet_Excel_Writer. Очевидно, имеет значение установить флаг "Worksheet::protect ( string $password )" в начале (без автоподбора для высот) или в самом конце (с автоподбором для высот) листа.

...