在我的应用程序中,我需要以xls预定义的格式导出到文件.
所以我只是整合了php_excel2007.我正在使用一个预定义格式的模板.
这里的问题是单元格数据可能会动态变化.如果数据远大于单元格高度,那么数据就会崩溃.
无论如何,根据细胞的含量增加细胞的高度(在XLX中不是xlsx)?
唯一的方法是在上一个关于此主题的问题的答案中描述:将行高设置为自动调整,以及要包装的单元格对齐.无论您使用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)
编辑
在代码示例中添加了注释,以解释每个被调用方法实际执行的操作
<?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?>\nRun Code Online (Sandbox Code Playgroud)\n