php_excel07-如何根据单元格数据增加单元格的高度(xls)

san*_*eep 6 php phpexcel

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

所以我只是整合了php_excel2007.我正在使用一个预定义格式的模板.

这里的问题是单元格数据可能会动态变化.如果数据远大于单元格高度,那么数据就会崩溃.

无论如何,根据细胞的含量增加细胞的高度(在XLX中不是xlsx)?

Mar*_*ker 5

唯一的方法是在上一个关于此主题的问题的答案中描述:将行高设置为自动调整,以及要包装的单元格对齐.无论您使用Excel5 Writer还是Excel2007 Writer,这都应该以相同的方式工作.

$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');
Run Code Online (Sandbox Code Playgroud)

编辑

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


san*_*eep 1

<?php\nerror_reporting(E_ALL);\nrequire_once ROOT.\'/PHPExcel.php\';\n\nfunction down($details)\n{\n    // Create new PHPExcel object\n    $objPHPExcel = new PHPExcel();\n    $objReader = PHPExcel_IOFactory::createReader(\'Excel5\');\n    $objPHPExcel = $objReader->load(ROOT."/templates/project_report1.xls");\n\n    // Set properties\n    $p_i=5;$alpa="B";$row_no=5;$mil="";$d_cel="B";\n    $objPHPExcel->setActiveSheetIndex()\n                ->setCellValue(\'K1\', $details[\'report_details\'][\'cur_time\']);\n    $objPHPExcel->setActiveSheetIndex()\n                ->setCellValue(\'C2\', \'REPORT START DATE:\'.$details[\'report_details\'][\'start_date\'])\n                ->setCellValue(\'H2\', $details[\'report_details\'][\'details\'])\n                ->setCellValue(\'C3\', \'SHOWING:\'.$details[\'report_details\'][\'showing\']);\n    foreach($details as $p_name=>$date){\n        //thisis to display date at the top \n        foreach($date as $p1=>$m_name1){\n            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($d_cel.\'4\', $p1);$d_cel++;//to display date in the top\n        }\n        break;\n    }\n\n    foreach($details as $p_name=>$date){\n        if($p_name=="report_details")break;\n        $objPHPExcel->setActiveSheetIndex(0)->setCellValue(\'A\'.$p_i, $p_name);\n        $objPHPExcel->getActiveSheet(0)->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle(\'A5\'), \'A\'.$p_i );\n        $objPHPExcel->setActiveSheetIndex(0)->getStyle(\'A\'.$p_i)->getAlignment()->setWrapText(true);    \n\n        foreach($date as $p=>$m_name){\n            $mil=$tic=$st=" ";\n\n            foreach($m_name as $name=>$val){\n\n            if($name=="milestone")\n            foreach($val as $in_det=>$det){\n                if($det && isset($det[\'start_date\']))\n                    $mil.=$det[\'name\']."\\n".$det[\'start_date\']."\\n";\n                else\n                    $mil.=$det[\'name\'];\n            }\n            if($name=="ticket")\n                foreach($val as $in_det=>$det){                             \n                    if($det)\n                        $tic.=$det[\'name\']." ".$det[\'start_date\']."\\n";\n                }\n            if($name=="task")\n                foreach($val as $in_det=>$det){\n                    if($det)\n                        $st.=$det[\'name\']." ".$det[\'start_date\']."\\n";\n                }\n            }\n            $summary=$mil.$tic.$st;\n            $objPHPExcel->getActiveSheet(0)->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle(\'B5\'), $alpa.$p_i );\n            $objPHPExcel->getActiveSheet(0)->getRowDimension($p_i)->setRowHeight();\n            $objPHPExcel->getActiveSheet(0)->getStyle(\'A\'.$p_i.\':\'.\'M\'.$p_i)->getAlignment()->setWrapText(true);\n            $objPHPExcel->setActiveSheetIndex(0)->getStyle($alpa.$p_i)->getFont()->setSize(5);\n            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($alpa.$p_i, $summary);\n            $alpa++;\n        }\n        $alpa="B";\n        $p_i++;\n    }\n    $objPHPExcel->setActiveSheetIndex(0);\n    $objPHPExcel->getActiveSheet()->setTitle(\'Report\');\n    // Set active sheet index to the first sheet, so Excel opens this as the first sheet\n\n    // Redirect output to a client\xe2\x80\x99s web browser (Excel2007)\n    header(\'Content-Type: application/vnd.ms-excel\');\n    header(\'Content-Disposition: attachment;filename="project_report.xls"\');\n    header(\'Cache-Control: max-age=0\');\n\n    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, \'Excel5\');\n    $objWriter->save(\'php://output\');\n    exit;\n}\n?>\n
Run Code Online (Sandbox Code Playgroud)\n