【问题标题】:phpExcel column size issuesphpExcel 列大小问题
【发布时间】:2012-04-15 11:12:15
【问题描述】:

我想确保 phpExcel 生成的工作簿中没有任何值被截断。为此,我打电话给

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

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

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

【问题讨论】:

    标签: php phpexcel


    【解决方案1】:

    不要在每次编写单元格时都这样做……这是不必要的开销。每列只执行一次。

    请注意,保存时它仍然很昂贵,因为 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% 以尝试确保整个列适合,然后再保存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多