PHPExcel自动调整列宽

标签 php resize size 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();

上面的代码不起作用。不更改列大小以适应文本

更新 我正在使用的编写器 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

最佳答案

如果列设置为 AutoSize,PHPExcel 会尝试根据列的计算值(等等任何公式的结果)以及由格式掩码添加的任何附加字符(例如千位分隔符)来计算列宽。

默认情况下,这是一个估计宽度:有一种更精确的计算方法,基于使用GD,也可以处理粗体和斜体等字体样式特征;但这是一个更大的开销,因此默认情况下它是关闭的。您可以使用

启用更准确的计算
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);

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

但您还需要识别列来设置维度:

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

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

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

关于PHPExcel自动调整列宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16761897/

相关文章:

html - 根据 Angular 4 中的屏幕大小更改内容的显示方式

c++ - 为什么应用程序如此庞大?

php - 为什么有人会使用 printf() 来处理几乎所有事情?

css - 无法让 div 在调整大小时消失

java - 设置 BorderLayout 并调用 PaintComponent()

asp.net - 调整白色图像大小后获得灰色边框

php - 将 MySQL 结果保存在二维数组中 - php

php - 注册后自动记住我

javascript - 如何将 PHP 值传递给 Javascript 并重定向到其他页面?

r - 在 R Shiny 中动态调整 ggplot2 图形的大小