首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHPExcel自动调整列宽

PHPExcel自动调整列宽
EN

Stack Overflow用户
提问于 2013-05-27 01:34:00
回答 17查看 235.6K关注 0票数 120

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

代码语言:javascript
复制
// 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');的编写器

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2013-05-27 01:46:38

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

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

代码语言:javascript
复制
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);

但是,自动调整大小并不适用于所有Writer格式...例如CSV。你没有提到你使用的是哪个作者。

但您还需要确定用于设置维度的列:

代码语言:javascript
复制
foreach(range('B','G') as $columnID) {
    $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)
        ->setAutoSize(true);
}

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

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

票数 223
EN

Stack Overflow用户

发布于 2014-10-06 18:58:36

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

代码语言:javascript
复制
// 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);
    }
}
票数 61
EN

Stack Overflow用户

发布于 2014-07-07 20:19:51

这里是一个基于@Mark Baker帖子的更灵活的变体:

代码语言:javascript
复制
foreach (range('A', $phpExcelObject->getActiveSheet()->getHighestDataColumn()) as $col) {
        $phpExcelObject->getActiveSheet()
                ->getColumnDimension($col)
                ->setAutoSize(true);
    } 

希望这能有所帮助;)

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16761897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档