;
View Code
$objPHPExcel = new PHPExcel(); //实例化PHPExcel类库,相当于新建一个Excel表
$objSheet = $objPHPExcel->getActiveSheet(); //获取当前活动sheet
$objSheet->setTitle('sheet的名字'); //给当前的活动sheet起个名称
3.页面设置
//设置打印 页面 方向与大小(此为横向)
$objSheet->getStyle('A6:G6')->applyFromArray($styleThinBlackBorderOutline);
//方向
$objSheet->getPageSetup()->setOrientation(\PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
//大小
$objSheet->getPageSetup()->setPaperSize(\PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
$objSheet->setCellValue('A1','XXXXXX'); //设置单元格的值
$objPHPExcel->getActiveSheet()->setCellValue('C9', "=SUM(A9:B9)");
$objSheet->getStyle('A1')->getFont()->setName('宋体')->setSize(16)->setBold(true); //设置单元格的字体,字体大小,是否加粗
$objSheet->mergeCells('A1:G1'); //合并单元格
$objSheet->unmergeCells('A1:H1'); //拆分单元格
$objSheet->setCellValue('A1',"咨询有限公司\n联系人:王小姐\nTEL:8888888\n"); //单元格内容自动根据要求换行,必须要用双引号
$objSheet->getStyle('A1')->getAlignment()->setWrapText(true); //长度不够显示的时候 是否自动换行
$objSheet->getStyle('B')->getAlignment()->setWrapText(true); //长度不够显示的时候 是否自动换行
$objSheet->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //水平居中
$objSheet->getStyle('A1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); //垂直居中
$objSheet->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); //向右居中
$objSheet->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY); //向左居中
$objSheet->getStyle('A6:G6')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('FF808080');
//设置单元格背景颜色
$styleThinBlackBorderOutline = array( //设置单元格边框
'borders' => array(
'allborders' => array( //设置全部边框
'style' => \PHPExcel_Style_Border::BORDER_THIN, //粗的是thick,BORDER_THIN,BORDER_MEDIUM和BORDER_THICK。
'color' => array ('argb' => '000000'),
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setVisible(false); // 隐藏D列
1)设置单元格宽与高
$objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(20); #设置单元格默认行高
$objPHPExcel->getActiveSheet()->getRowDimension('9')->setRowHeight(20); #设置行高
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20); #设置单元格宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true); #设置单元格自适应宽度
$objSheet->getDefaultStyle()->getAlignment()->setWrapText(true); //长度不够显示的时候 是否自动换行
2)设置不同的数据
$objPHPExcel->getActiveSheet()->getCell('C2')->setValueExplicit('861391327543258', PHPExcel_Cell_DataType::TYPE_NUMERIC);
// 日期
$objPHPExcel->getActiveSheet()->setCellValue('G2', '2008-12-31');
$objPHPExcel->getActiveSheet()->getStyle('G2')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);
// 时间戳
$time = gmmktime(0,0,0,12,31,2008); // int(1230681600)
$objPHPExcel->getActiveSheet()->setCellValue('G3', PHPExcel_Shared_Date::PHPToExcel($time));
$objPHPExcel->getActiveSheet()->getStyle('G3')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);
// url
$objPHPExcel->getActiveSheet()->setCellValue('G11', 'blog.c1gstudio.com');
$objPHPExcel->getActiveSheet()->getCell('G11')->getHyperlink()->setUrl('http://blog.c1gstudio.com');
// 另一个sheet
$objPHPExcel->getActiveSheet()->setCellValue('G12', 'sheetb');
$objPHPExcel->getActiveSheet()->getCell('G12')->getHyperlink()->setUrl("sheet://'sheetb'!A1");
3)设置行的折叠与展开
//后续再研究
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setOutlineLevel(1);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setVisible(false);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setOutlineLevel(1);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setVisible(false);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setCollapsed(true);
4)整体填充数据
4 phpexcel设置所有单元格为默认的水平垂直居中
$objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getDefaultStyle()->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
5 phpexcel 设置excel单元格宽高
$objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(20); #设置单元格行高
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20); #设置单元格宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true); #设置单元格自适应宽度
参考:https://blog.csdn.net/PhperX/article/details/109742316
//下面的两种写法都可以,E1与A2代表excel的表格位置。
$objPHPExcel->getActiveSheet()->getComment('A1') ->getText()->createTextRun('批注内容');
$objPHPExcel->setActiveSheetIndex(0)->getComment( 'A2')->getText()->createTextRun('批注内容' );
//重点来了:
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
//createWriter()的第二个参数必须是 Excel2007 才可以,Excel5不支持。
导出后的带批注excel文件:
// 保护工作表
$objPHPExcel->getActiveSheet()->getProtection()->setPassword('PHPExcel');
$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
$objPHPExcel->getActiveSheet()->getProtection()->setSort(true);
$objPHPExcel->getActiveSheet()->getProtection()->setInsertRows(true);
$objPHPExcel->getActiveSheet()->getProtection()->setFormatCells(true);
10.PHPExcel报错:'break' not in the 'loop' or 'switch' context
ThinkPHP\Library\Vendor\phpexcel\PHPExcel\Calculation LINE: 581
直接删除581行的 'break'即可!
12.导出excel文件后打不开,提示“文件格式或文件扩展名无效,请确定文件未损坏,并且文件扩展名与文件的格式匹配”
来自:https://www.cnblogs.com/imustun/p/9156851.html
1.发送header()头之前,不知道又啥特殊字符输出(可能是BOM,也可能是其他),导致php报错!然后将报错内容输出到了Excel
2.极大可能是:文件BOM头问题,生成的Excel文件头部添加了BOM头!
解决方案:
1.在输出Excel前,缓冲区中处理BOM头(可能是其他字符)
ob_end_clean();
ob_start();
在header()函数调用之前,清楚之前的错误输出!
ob_get_contents() --- 返回输出缓冲区的内容
ob_flush() --- 冲刷出(送出)输出缓冲区中的内容
ob_clean() --- 清空(擦掉)输出缓冲区
ob_end_flush() --- 冲刷出(送出)输出缓冲区内容并关闭缓冲
ob_end_clean() --- 清空(擦除)缓冲区并关闭输出缓冲
flush() --- 刷新输出缓冲
2.有人第一步过后,问题未解决。通过ob_get_contents()查看导出内容,并未发现BOM头。
再就是应用了框架,返回的静态页输出成了excel文件。
试了以上方法后,还是没有问题,最后查看导出的文件内容,意识到是跳转到静态页导致的。
加上 exit($contents); 后问题解决。
}]);
ob_clean();
flush();
readfile($path);
ob_clean();
flush();这个是关键。用了这两函数,图片正常打开,文字也不乱码。
phpexcel 合并单元格后的动态行高
思路参考:https://www.it1352.com/1745868.html,如下所示:
You can also do it like this
Merge cells you want, for example: A7:C7
Copy context of it to one cell for instance Z7
Set the width of the merged cells to Z7
Apply Wrap Text to the Z7
Make Z7 not visible
$objActSheet->getColumnDimension('A')->setWidth(26);
for($i=1;$i<14;$i++){
$objActSheet->getColumnDimension($col_name[$i])->setWidth(17);
$objActSheet->getColumnDimension('Z')->setWidth(43);
$objActSheet->getStyle('A:Z')->getAlignment()->setWrapText(true); //Adaptive line feed
......
$objActSheet->setCellValue('Z'.$current_row,$val);
$objActSheet->getColumnDimension('Z')->setVisible(false);
......
PHPExcel 如何只获取 1 个单元格值
$objPHPExcel->getActiveSheet()->getCell('B8')->getValue();
// Get cell B8
$objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 8)->getValue();
// Get cell B8
$objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 8)->getCalculatedValue();