PHPExcel 自动调整列宽度大小

2022-08-30 07:12:13

我正在尝试自动调整工作表列的大小。我正在编写文件,最后我尝试调整所有列的大小。

// 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');


答案 1

如果列设置为“自动调整大小”,PHPExcel 将尝试根据列的计算值(即任何公式的结果)以及由格式掩码添加的任何其他字符(如千位分隔符)来计算列宽。

默认情况下,这是一个宽度:基于使用GD的更准确的计算方法可用,该方法还可以处理粗体和斜体等字体样式功能;但这是一个更大的开销,所以默认情况下它是关闭的。您可以使用以下命令启用更准确的计算estimated

PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);

但是,自动调整大小并不适用于所有编写器格式...例如,CSV。你没有提到你正在使用什么作家。

但是,您还需要标识列以设置维度:

foreach(range('B','G') as $columnID) {
    $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)
        ->setAutoSize(true);
}

$objPHPExcel->getActiveSheet()->getColumnDimension()需要列 ID。

$objPHPExcel->getActiveSheet()->getColumnDimensions()将返回所有已定义列维度记录的数组;但是,除非已显式创建了列维度记录(可能通过加载模板或手动调用),否则它将不存在(节省内存)。getColumnDimension()


答案 2

如果您需要在多个工作表上执行此操作,并且每个工作表中的多个列,以下是循环访问所有这些工作表的方法:

// 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);
    }
}

推荐