php_excel07-如何基于单元数据(xls)使单元高度增长

php_excel07-如何基于单元数据(xls)使单元高度增长,php,phpexcel,Php,Phpexcel,在我的应用程序中,我需要以预定义的格式导出到xls文件 所以我刚刚集成了php\u excel2007。我使用一个预定义格式的模板 问题在于,单元格数据可能会动态变化。如果数据远大于单元格高度,则数据正在塌陷 因此,是否有必要根据单元格的内容(XLX而不是xlsx)增加单元格的高度?唯一的方法是按照您之前关于此主题的问题中所述:将行高设置为自动调整,将单元格对齐设置为换行。无论您使用的是Excel5编写器还是Excel2007编写器,其工作方式都应该相同 $objPHPExcel = new P

在我的应用程序中,我需要以预定义的格式导出到
xls
文件

所以我刚刚集成了
php\u excel2007
。我使用一个预定义格式的模板

问题在于,单元格数据可能会动态变化。如果数据远大于单元格高度,则数据正在塌陷


因此,是否有必要根据单元格的内容(XLX而不是xlsx)增加单元格的高度?

唯一的方法是按照您之前关于此主题的问题中所述:将行高设置为自动调整,将单元格对齐设置为换行。无论您使用的是Excel5编写器还是Excel2007编写器,其工作方式都应该相同

$objPHPExcel = new PHPExcel();

// Set some long string values in some cells
$objPHPExcel->getActiveSheet()->getCell('A1')->setValue("This is a large block of text,\ncomprising several lines,\nthat will be set to autofit.");
$objPHPExcel->getActiveSheet()->getCell('A2')->setValue("This is a large block of text that will NOT be set to autofit.");
$objPHPExcel->getActiveSheet()->getCell('B1')->setValue("This is another large block of text without any line breaks, that will be set to autofit.");
$objPHPExcel->getActiveSheet()->getCell('A3')->setValue("This is another large block of text,\ncomprising several lines,\nthat will be set to autofit.");
$objPHPExcel->getActiveSheet()->getCell('A4')->setValue("This is another large block of text without any line breaks, that will be set to autofit but not wrap.");
// Fix the column width to a reasonable size
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(30);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(30);
//  Set text wrap for cells A1 and B1. This forces the text to wrap, but doesn't adjust the height of the row
$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true);
$objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setWrapText(true);
// Set rows 1, 3 and 4 to autofit the height to the size of text
$objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(-1);
$objPHPExcel->getActiveSheet()->getRowDimension(3)->setRowHeight(-1);
$objPHPExcel->getActiveSheet()->getRowDimension(4)->setRowHeight(-1);

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('testAutoHeight.xls');
编辑


在代码示例中添加注释,以解释每个调用的方法实际执行的操作

将rowheight设置为-1以生成自动高度(基于单元格数据)

<?php
error_reporting(E_ALL);
require_once ROOT.'/PHPExcel.php';

function down($details)
{
    // Create new PHPExcel object
    $objPHPExcel = new PHPExcel();
    $objReader = PHPExcel_IOFactory::createReader('Excel5');
    $objPHPExcel = $objReader->load(ROOT."/templates/project_report1.xls");

    // Set properties
    $p_i=5;$alpa="B";$row_no=5;$mil="";$d_cel="B";
    $objPHPExcel->setActiveSheetIndex()
                ->setCellValue('K1', $details['report_details']['cur_time']);
    $objPHPExcel->setActiveSheetIndex()
                ->setCellValue('C2', 'REPORT START DATE:'.$details['report_details']['start_date'])
                ->setCellValue('H2', $details['report_details']['details'])
                ->setCellValue('C3', 'SHOWING:'.$details['report_details']['showing']);
    foreach($details as $p_name=>$date){
        //thisis to display date at the top 
        foreach($date as $p1=>$m_name1){
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($d_cel.'4', $p1);$d_cel++;//to display date in the top
        }
        break;
    }

    foreach($details as $p_name=>$date){
        if($p_name=="report_details")break;
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A'.$p_i, $p_name);
        $objPHPExcel->getActiveSheet(0)->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle('A5'), 'A'.$p_i );
        $objPHPExcel->setActiveSheetIndex(0)->getStyle('A'.$p_i)->getAlignment()->setWrapText(true);    

        foreach($date as $p=>$m_name){
            $mil=$tic=$st=" ";

            foreach($m_name as $name=>$val){

            if($name=="milestone")
            foreach($val as $in_det=>$det){
                if($det && isset($det['start_date']))
                    $mil.=$det['name']."\n".$det['start_date']."\n";
                else
                    $mil.=$det['name'];
            }
            if($name=="ticket")
                foreach($val as $in_det=>$det){                             
                    if($det)
                        $tic.=$det['name']." ".$det['start_date']."\n";
                }
            if($name=="task")
                foreach($val as $in_det=>$det){
                    if($det)
                        $st.=$det['name']." ".$det['start_date']."\n";
                }
            }
            $summary=$mil.$tic.$st;
            $objPHPExcel->getActiveSheet(0)->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle('B5'), $alpa.$p_i );
            $objPHPExcel->getActiveSheet(0)->getRowDimension($p_i)->setRowHeight();
            $objPHPExcel->getActiveSheet(0)->getStyle('A'.$p_i.':'.'M'.$p_i)->getAlignment()->setWrapText(true);
            $objPHPExcel->setActiveSheetIndex(0)->getStyle($alpa.$p_i)->getFont()->setSize(5);
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($alpa.$p_i, $summary);
            $alpa++;
        }
        $alpa="B";
        $p_i++;
    }
    $objPHPExcel->setActiveSheetIndex(0);
    $objPHPExcel->getActiveSheet()->setTitle('Report');
    // Set active sheet index to the first sheet, so Excel opens this as the first sheet

    // Redirect output to a client’s web browser (Excel2007)
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="project_report.xls"');
    header('Cache-Control: max-age=0');

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output');
    exit;
}
?>

非常有效,易于实现。谢谢。对不起,我试过了,但是没有效果。行的高度不适应文本内容的高度:(@AndreiDiaconescu-我引用的代码有效,如果您不这么认为,请提供详细信息…..“它不起作用”作为错误报告是不可接受的函数调用$objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(-1);不起作用;我现在正在使用最新版本的PhpExcel进行测试;它不会调整行的高度以适应文本的高度。我提到我是针对XLS而不是XLSX进行测试的。只需突出显示使单元格高度根据单元格数据增长的代码会很有用……我已经尝试过了,但如果我在LibreOffice Calc中打开文件,t行高未设置。知道可能有什么问题吗?这里有一个链接,指向抱歉,我尝试了此操作,但没有效果。行高与文本内容高度不匹配:(@AndreiDiaconescu-我引用的代码有效,如果您不这样认为,请提供详细信息…“它无效”不可接受为错误报告函数调用$objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(-1);不起作用;我现在正在用最新版本的PhpExcel测试它;它不会调整行的高度以适应文本的高度。我提到我测试XLS而不是xlsx。您是否设置了文本换行?您的单元格内容中是否有新行?只需指定单行代码不会导致在没有广告的情况下调整行高度传统设置
// auto-size on row 1

$objWorksheet->getRowDimension('1')->setRowHeight(-1);