phpExcel列大小问题

时间:2012-04-01 15:12:19

标签: php phpexcel

我想确保在phpExcel生成的工作簿中没有切断任何值。要做到这一点,我打电话

  $oCurrentSheet->getColumnDimension($aCurrentCoords['x'])->setAutoSize(true);

每次我写一个单元格。 这似乎不起作用:许多列最终都很小。

有谁知道如何确保输出的excel工作簿中的每一列都根据其内容确定大小?

1 个答案:

答案 0 :(得分:12)

每次写单元格时都不要这样做......这是一种不必要的开销。每列只做一次。

请注意,保存时它仍然很昂贵,因为PHPExcel然后遍历该列中的每个单元格,根据该单元格的内容计算出必要的宽度,同时考虑公式计算和格式,并使用任何最大大小该列中的单元格。即使这样,它也不是一个完美的解决方案:默认行为是估计,计算要显示的字符数,并使用基于字体的通用乘数(Arial,Verdana of Calibri)和一点点填充。为了更准确的计算,您可以更改用于计算的方法,然后代码使用GD构建ttf边界框并将单元格大小基于该框的尺寸。这是一个更准确的计算,但速度要慢得多。

您可以使用以下方式更改计算方法:

PHPExcel_Shared_Font::setAutoSizeMethod($method);
保存前

,其中$ method是以下之一:

PHPExcel_Shared_Font::AUTOSIZE_METHOD_APPROX
PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT

这仍然不是一个完美的解决方案,但它是PHPExcel可以做的最佳计算。

另一种方法是在保存之前直接自己调用工作表的calculateColumnWidths()方法...然后遍历每个列的维度,将值增加5%,以便在保存之前尝试确保整个列适合。