PHPExcel单元格将较小的集合字体合并为适合具有固定宽度和高度的合并单元格

时间:2014-04-04 17:50:25

标签: php phpexcel

我使用 PHPExcel 为订单生成Excel文件。

我有一些 约束

  • 单元格合并
  • 单元格垂直对齐,水平对齐
  • 文字包装在多行
  • 文字需要适合合并单元格: 如果太长 以使 设置更小的字体 ,但保留文字换行

我已经完成了前3个但我无法达到最后的要求。

示例:

我有什么

enter image description here

我需要什么

enter image description here

由于其他单元格的宽度和高度,行和列是标准宽度和高度,无法更改。客户端设计......

我试过了:

    $this->excel->getActiveSheet()->mergeCells('A28:C32');      
    $this->excel->getActiveSheet()->getStyle('A28')->getAlignment()->applyFromArray(
        array(
            'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
            'vertical'   => PHPExcel_Style_Alignment::VERTICAL_CENTER,
            'rotation'   => 0,
            'wrap'       => true
        )
    )->setShrinkToFit(true);    

以及上述任何其他组合:

            $this->excel->getActiveSheet()->mergeCells('A28:C32');
            $this->excel->getActiveSheet()->getStyle('A28:C32')->getAlignment()->applyFromArray(
        array(
            'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
            'vertical'   => PHPExcel_Style_Alignment::VERTICAL_CENTER,
            'rotation'   => 0,
            'wrap'       => true
        )
     )->setShrinkToFit(true);

             //or this
             $this->excel->getActiveSheet()->mergeCells('A28:C32')->getAlignment()->setWrapText(true)->setShrinkToFit(true);

我知道

             $this->excel->getActiveSheet()->getStyle("A1")->getFont()->setSize(10);

但是 只有当文本不适合合并的单元格 时,我才需要更小的文本。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

我找到的唯一解决方案是实际计算行数并相应地设置字体。

如果字符串的行数 合并单元格的行数(在我的情况下为5),则设置字体小。

  if (substr_count($return_to, "\n") <= 4){ //count 5 lines or less -> font = 10

      $this->excel->getActiveSheet()->getStyle("A28")->getFont()->setSize(10);

  }else{ //count more than 5 lines -> font = 9

      $this->excel->getActiveSheet()->getStyle("A28")->getFont()->setSize(9);

  }