我正在尝试自动调整工作表的列大小。 我正在编写文件,最后我尝试调整所有列的大小。
// 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/