PHPExcel - 合并单元格的动态行高

标签 php phpexcel

经过大量试验和错误后,我似乎仍然无法找到使合并的单元格具有 AutoFit 高度的解决方法。

我已经尝试了一种基于我在这个网站上找到的一些 VBA 代码的方法:https://groups.google.com/forum/?fromgroups=#!topic/microsoft.public.excel.programming/pcvg7o5sKhA

以下代码粘贴文本,换行,并将单元格 (A1) 的宽度更改为我想要的合并单元格的总宽度。然后,它合并单元格并将 A 列设置回原始宽度。 $note 是任何长文本字符串。 $vAlignTop 是一个数组,用于设置文本与单元格顶部的对齐方式。

$totalWidth = 67.44; //width of columns A-H

$objPHPExcel->getActiveSheet()->setCellValue('A1', $note);
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth($totalWidth);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true);
$objPHPExcel->getActiveSheet()->getStyle('A1:H1')->applyFromArray($vAlignTop);
$objPHPExcel->getActiveSheet()->mergeCells('A1:H1');
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(8.43); //original width of column A

当我在 excel 中手动完成这些相同的步骤时,我得到了我想要的结果,但上面代码的输出始终是默认的 12.75 行高。

有人有什么想法吗?我真的不介意必须对列宽进行硬编码,我只希望高度能够响应文本。

提前致谢。

最佳答案

自动高度不适用于合并的单元格。我认为这是 Excel 而不是 PHPExcel 的问题。如果你想这样做,你必须使用变通方法。这是我的...

我有一个函数,它接受文本,在换行符 ('\n') 上拆分成行,并根据每行的字符数(fiddle 因子)计算“适合”文本所需的行数。

function getRowcount($text, $width=55) {
    $rc = 0;
    $line = explode("\n", $text);
    foreach($line as $source) {
        $rc += intval((strlen($source) / $width) +1);
    }
    return $rc;
}

对于我的报告,通过反复试验得出的 fiddle 因子是 55。然后我在我的代码中使用上述函数...

$purpose = $survey["purpose"];
$numrows = getRowcount($purpose);
$objPHPExcel->getActiveSheet()->setCellValue('B'.$xlrow, 'Report Purpose');
$objPHPExcel->getActiveSheet()->getStyle('B'.$xlrow)->applyFromArray($fmt_cover_bold);
$objPHPExcel->getActiveSheet()->setCellValue('C'.$xlrow, $purpose);
$objPHPExcel->getActiveSheet()->getRowDimension($xlrow)->setRowHeight($numrows * 12.75 + 2.25);
$objPHPExcel->getActiveSheet()->mergeCells('C'.$xlrow.':E'.$xlrow);
$objPHPExcel->getActiveSheet()->getStyle('C'.$xlrow.':E'.$xlrow)->applyFromArray($fmt_normal_wrap);
$xlrow++;

我添加 2.25 只是为了让这个单元格和下一个单元格之间有一点分隔。

关于PHPExcel - 合并单元格的动态行高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13313048/

相关文章:

php - 查询不能在 PHP 中运行,但可以直接在 MySQL 中运行

php - mysql:使用 SET 还是很多列?

Mysql:取决于不同事件的表的值总和

php - 无法在 PHP Excel 中创建多个工作表

php - MYSQL中时间戳和普通日期的日期差异

php - 为什么null可以写成反斜杠?

benchmarking - PHPExcel 的最低内存缓存方法

php - 更改 PHPExcel 中单元格边框的大小

php - Bluesnap 现场付款与订阅

php - 使用 PHPExcel 以文本格式读取数字