php表格⾃动适应页⾯,PHPExcel⾃动调整列宽
如果列设置为AutoSize,则PHPExcel将尝试根据列的计算值(所有公式的结果)以及格式掩码(例如,千位分隔符)添加的任何其他字符来计算列宽。
默认情况下,这是⼀个estimated宽度:基于使⽤GD,可以使⽤更加精确的计算⽅法,GD也可以处理粗体和斜体等字体样式的特征; 但这是⼀个更⼤的开销,所以它默认closures。 您可以使⽤更精确的计算
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);
但是,autosize不适⽤于所有Writer格式…例如CSV。 你没有提到你正在使⽤的作家。
但是您还需要确定列来设置维度:
foreach(range('B','G') as $columnID) { $objPHPExcel->getActiveSheet()->getColumnDimension($columnID) -
>setAutoSize(true); }
$objPHPExcel->getActiveSheet()->getColumnDimension()需要⼀个列ID。
$objPHPExcel->getActiveSheet()->getColumnDimensions()将返回所有定义的列维度logging的数组; 但是除⾮明确创build了列维度logging(可能通过加载模板或⼿动调⽤getColumnDimension() ),否则它将不存在(内存保存)。
如果您需要在多个⼯作表上执⾏此操作,并且在每个⼯作表中都有多个列,则可以通过以下⽅法遍历所有这些表单:
表格网站php源码// 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); } }
这⾥有⼀个基于@Mark Ba k er的更灵活的变体:
foreach (range('A', $phpExcelObject->getActiveSheet()->getHighestDataColumn()) as $col) { $phpExcelObject-
>getActiveSheet() ->getColumnDimension($col) ->setAutoSize(true); }
希望这可以帮助 ;)
这是如何使⽤⼯作表中的所有列的⽰例:
$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 ); }
for ($i = 'A'; $i != $objPHPExcel->getActiveSheet()->getHighestColumn(); $i++) { $objPHPExcel->getActiveSheet()-
>getColumnDimension($i)->setAutoSize(TRUE); }
此代码⽚段将⾃动调整所有⼯作表中包含数据的所有列。 没有必要使⽤activeSheet getter和setter。
// 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 <= PHPExcel_Cell::columnIndexFromString($sheet->getHighestDataColumn()); $col++) { $sheet->getColumnDimensionByColumn($col)->setAutoSize(true); } }
如果您尝试迭代for ($col = 2; $col <= 'AC'; ++ $col){...}或foreach(range('A','AC') as $col) {...}它将适⽤于从A到Z的列,但它⽆法通过Z(例如在'A'到'AC'之间的迭代)。
为了迭代通过'Z',你需要将列转换为整数,增量,⽐较,并再次获取它作为string:
$MAX_COL = $sheet->getHighestDataColumn(); $MAX_COL_INDEX = PHPExcel_Cell::columnIndexFromString($MAX_COL); for($index=0 ; $index <= $MAX_COL_INDEX ; $index++){ $col = PHPExcel_Cell::stringFromColumnIndex($index); // do something, like set the $sheet->getColumnDimension($col)->setAutoSize(TRUE); }
有了这个,你就可以轻松地遍历“Z”列并将autosize设置为每⼀列。
foreach(range('B','G') as $columnID) { $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)-
>setAutoSize(true); }
来得晚,但到处寻后,我创造了⼀个似乎是“唯⼀”的解决scheme。
众所周知,在最后⼀个API版本中有⼀个列迭代器,但不知道如何⾃⼰调整列对象,基本上我创build了⼀个循环,从真正的第⼀列使⽤到最后使⽤的列。
这⾥是:
//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 us
ed 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');
您还需要确定要设置尺⼨的列:
foreach (range('A', $phpExcelObject->getActiveSheet()->getHighestDataColumn()) as $col) { $phpExcelObject -
>getActiveSheet() ->getColumnDimension($col) ->setAutoSize(true); }
$col = 'A'; while(true){ $tempCol = $col++; $objPHPExcel->getActiveSheet()->getColumnDimension($tempCol)-
>setAutoSize(true); if($tempCol == $objPHPExcel->getActiveSheet()->getHighestDataColumn()){ break; } }
对于Spreedsheet + PHP 7,您必须编写⽽不是PHPExcel_Cell::columnIndexFromString ,
\PhpOffice\PhpSpreadsheet\Cell::columnIndexFromString 。 ⽽在循环是⼀个错误,你必须
如果有⼈正在寻这个。
下⾯的分辨率也适⽤于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()或最后⼀个实际的列replace。
这些⽅法做什么:
getHighestColumn($row = null) – 获取最⾼的⼯作表列。
getHighestDataColumn($row = null) – 获取包含数据的最⾼⼯作表列。
getHighestRow($column = null) – 获取最⾼的⼯作表⾏
getHighestDataRow($column = null) – 获取包含数据的最⾼⼯作表⾏。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。