我试图自动调整我的工作表的列的大小。 我正在写文件,最后我试图调整所有列的大小。
// 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');
。
如果一个列被设置为自动尺寸,PHPExcel会尝试根据该列的计算值(所以是任何公式的结果),以及任何由格式掩码(如千位分隔符)添加的额外字符来计算列的宽度。
默认情况下,这是一个 "估计 "的宽度:有一个更精确的计算方法,基于使用GD,它也可以处理字体样式特征,如粗体和斜体;但这是一个更大的开销,所以默认情况下是关闭的。你可以用以下方法启用更精确的计算
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()
),否则它不会存在(节省内存)。
这是如何使用工作表中所有列的例子:
$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 );
}