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

PHPExcel-合并单元格的动态行高,php,phpexcel,Php,Phpexcel,经过大量的尝试和错误,我似乎仍然无法找到一个解决办法,使合并的单元格具有自动调整的高度 我尝试了一种基于我在这个网站上找到的一些VBA代码的方法: 下面的代码粘贴文本,将其包装,并将单元格宽度(A1)更改为所需合并单元格的总宽度。然后,它合并单元格并将列A设置回原始宽度$注释是任何长文本字符串$vAlignTop是一个数组,用于设置文本与单元格顶部的对齐方式 $totalWidth = 67.44; //width of columns A-H $objPHPExcel->getActi

经过大量的尝试和错误,我似乎仍然无法找到一个解决办法,使合并的单元格具有自动调整的高度

我尝试了一种基于我在这个网站上找到的一些VBA代码的方法:

下面的代码粘贴文本,将其包装,并将单元格宽度(A1)更改为所需合并单元格的总宽度。然后,它合并单元格并将列A设置回原始宽度$注释是任何长文本字符串$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行高

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


提前感谢。

要为任何行使用设置自动高度:

$_row_number = 10;

$excel->getActiveSheet()->getRowDimension($_row_number)->setRowHeight(-1);

i、 e.将参数设置为-1而不是任何数字。

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

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

在我的报告中,通过反复试验得出的小提琴系数是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只是为了在这个单元格和下一个单元格之间留出一点距离

我想,我找到了更好的解决办法。 当我将数据插入foreach中的合并列时,我通过与strlen()比较来选择行中最长的字符串。在此之后,将最长字符串插入最后一个+1列,并将其设置为隐藏列。 第1行有4列(A-D)的示例


谢谢,但我希望创建一个可行的工作环境,使合并的单元格显示具有自动调整的高度。不幸的是,这种方法对合并的单元格不起作用。这是一个很好的解决方案。谢谢:)
$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++;
$longestContent = "the longest content in row 1";
$mergerColumnsWidth = 24;
$objPHPExcel->getActiveSheet()->setCellValue("E1", $longestContent);
$objPHPExcel->getActiveSheet()->getStyle("E1")->getAlignment()->setWrapText(true);
$objPHPExcel->getActiveSheet()->getColumnDimension("E")->setWidth(mergerColumnsWidth );
$objPHPExcel->getActiveSheet()->getColumnDimension("E")->setVisible(false);