phpexcel 一些基本设置总结
phpexcel 网页可能暂时无法连接,或者它已永久性地移动到了新网址 ERR_INVALID_RESPONSE |
|
使用fromArray填充数据fromArray定义在 C:\wamp\www\email_notice_qpy\Include\Library\Vendor\PHPExcel\PHPExcel\Worksheet.php中 如果想要修改起始单元格位置,可以使用startCell参数,注意,实参要跟形参一一对应 |
下载excel时不想要刷新页面function httpPost(URL, PARAMS, target="") { var temp = document.createElement("form"); temp.action = URL; temp.target = target; // temp.target = "_blank"; temp.method = "post"; temp.style.display = "none"; for (var x in PARAMS) { var opt = document.createElement("textarea"); opt.name = PARAMS[x]['name']; opt.value = PARAMS[x]['value']; temp.appendChild(opt); } document.body.appendChild(temp); temp.submit(); return temp; } function export_data(){ if(!$("#s_product_id").val()){ alert("Product can't be null!"); return false; } url = "{:U('Admin/Ppa/export_excel/')}"; conversion_data=$("#convart_data_form_id").serializeArray(); httpPost(url, conversion_data, target="") }
|
读取excel<?php namespace Admin\Controller; use Think\Controller; class EngageController extends Controller { public function read_excel(){ header("Content-type: text/html; charset=utf-8"); // ob_clean(); // ob_start(); // set_time_limit(1000000); // ini_set('memory_limit','-1'); set_time_limit(0);//设置不超时 @ini_set('memory_limit', '512M');//设置PHP能使用的内存大小 /** PHPExcel_IOFactory */ vendor('PHPExcel.PHPExcel','','.php'); vendor('PHPExcel.PHPExcel.IOFactory','','.php'); // require_once './PHPExcel/IOFactory.php'; $filename = './Uploads/VPU_PPA_model.xlsx'; // Check prerequisites if (!file_exists($filename)) { exit("not found $filename.\n"); } $reader = \PHPExcel_IOFactory::createReader('Excel2007'); //设置以Excel5格式(Excel97-2003工作簿) $PHPExcel = $reader->load($filename); // 载入excel文件 echo "sheetCount: ".$PHPExcel->getSheetCount(); $sheet = $PHPExcel->getSheet(0); // 读取第一個工作表 $highestRow = $sheet->getHighestRow(); // 取得总行数 $highestColumm = $sheet->getHighestColumn(); // 取得总列数 $str = ''; $str .= '<table border="1" cellspacing="0" bordercolor="#eeeeee" cellpadding="5" width="100%">'; //按照excel表格格式输出A-Z列 $str .= '<tr>'; $str .= '<td></td>'; for($column = 'A'; $column <= $highestColumm; $column++){ $str .= '<td>' .$column. '</td>'; } $str .= '</tr>'; //按照excel表格的格式从1开始累计 for ($row = 1; $row <= $highestRow; $row++){//行数是以第1行开始 $str .= '<tr>'; $str .= '<td>' .$row. '</td>'; //输出excel表格的内容 for($column = 'A'; $column <= $highestColumm; $column++){ $str .= '<td>' .$sheet->getCell($column.$row)->getValue(). '</td>'; } $str .= '</tr>'; } $str .= '<table>'; echo $str; } } ?>
|
|
1.实例化$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);
|
2.单元格相关$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'); 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); #设置单元格自适应宽度 |
6.冻结标题、固定某一行//第一种方式 $objSheet->freezePane('A1'); $objSheet->freezePane('A2'); //第二种方式 $objSheet->freezePaneByColumnAndRow(8,4);
|
|
7.添加批注参考: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文件:
|
|
8.保护工作表// 保护工作表 $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); |
|
9.php7环境下使用PHPExcel导出表格报错:网页可能暂时无法连接,或者它已永久性地移动到了新网址解决方法: 把 \PHPExcel\Calculation\Functions.php 第574行的break注释掉 |
|
10.PHPExcel报错:'break' not in the 'loop' or 'switch' contextThinkPHP\Library\Vendor\phpexcel\PHPExcel\Calculation LINE: 581 直接删除581行的 'break'即可! |
|
11.PHPExcel exception: “Could not close zip file … ”报错报错原因: 1.确认保存文件的目录是否存在,有没有写错。 2.权限问题。缺少对于保存的目录的写权限。 3.文件被其他应用程序占用。 4.保存的文件名如果有中文的话注意编码问题。 5.磁盘容量满了。 6.如果保存为xlsx的格式无法成功的话,可以尝试保存成xls格式。 |
|
12.导出excel文件后打不开,提示“文件格式或文件扩展名无效,请确定文件未损坏,并且文件扩展名与文件的格式匹配”来自:https://www.cnblogs.com/imustun/p/9156851.html 原因: 1.发送header()头之前,不知道又啥特殊字符输出(可能是BOM,也可能是其他),导致php报错!然后将报错内容输出到了Excel 解决方案: 1.在输出Excel前,缓冲区中处理BOM头(可能是其他字符)
参考:https://blog.csdn.net/liu857279611/article/details/51534450
2.有人第一步过后,问题未解决。通过ob_get_contents()查看导出内容,并未发现BOM头。 再就是应用了框架,返回的静态页输出成了excel文件。 试了以上方法后,还是没有问题,最后查看导出的文件内容,意识到是跳转到静态页导致的。 加上 exit($contents); 后问题解决。 |
13.php 文件下载 出现下载文件内容乱码损坏的解决方法参考:https://www.jb51.net/article/97441.htm public function download(){ $upload=M('upload'); $data=$upload->find($_GET['id']); if(empty($data)){ header('HTTP/1.0 404 Not Found'); header('Location: .'); }else{ $path='./public/Uploads/'.$data['savename']; header("Content-Type:".$data['type']); header('Content-Disposition: attachment; filename="'.$data['name'].'"'); header('Content-Length:'.$data['size']); ob_clean(); flush(); readfile($path); } } ob_clean(); |
14.Class 'ZipArchive' not found1)查看php是否安装了zip拓展 php -m 2)安装zip模块 sudo apt-get install php7.0-zip (可以先查看php版本) |
|
phpexcel 合并单元格后的动态行高思路参考:https://www.it1352.com/1745868.html,如下所示: You can also do it like this
脚本实现: $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();
|
|
参考:https://blog.csdn.net/zyj_15067066062/article/details/81485781
https://blog.csdn.net/lampsunny/article/details/79012173