php 读取和下载execl
最近用到php 对excel 的操作 下来 小弟为大家 先贴一下自己的代码 有什么补充的 大神们请指点下。感激不尽。
我用的是yii2 yii2中有类 phpexcel
先说说下载吧。 首先下载一个文件是不能 用异步去的 比如ajax 去访问这个方法的是不会下载的 。
//首先你的引入PHPExcel //下载代码 $fileName = '测试excel'; $excel = new \PHPExcel(); $excelSheet = $excel->setActiveSheetIndex(0); $excel->getActiveSheet()->setCellValue('A1', '第一列标题'); $excel->getActiveSheet()->setCellValue('B1', '第二列标题'); $excel->getActiveSheet()->setCellValue('C1', '第三列标题'); $excel->getActiveSheet()->setCellValue('D1', '第四列标题'); // $result 是一个数组。 这是在确定 如果有4列的情况下 //setCellValueExplicit 也是设置值 我测试的结果是在excel 表格中不会吧数子转化 会直接以文本的格式输出 . foreach( $result as $key=> $value){ $num = $key+2; //num 从=2 开始。 key=0 $excel->getActiveSheet()->setCellValue('A' . $num, $value['值1']); $excel->getActiveSheet()->setCellValue('B' . $num, $value['值2']); $excel->getActiveSheet()->setCellValueExplicit('C' . $num, $value['值3']); $excel->getActiveSheet()->setCellValueExplicit('D' . $num, $value['值4']); } /** * 比如不确定有几列 可以做双循环。 先循环 有多少行 在设置每一列的值 * $column 表示有多少列 * 我这个方法没自己测过 但大致思路是不错的感觉 如有问题大家积极反馈。 */ foreach( $result as $key=> $value ){ $num = $key+2; //由于key=0 num 从=2 开始。num =1是设置第一列的值 for( $i='A';$i<=leng($column);$i++){ //A2,B2,C2,D2 A3,B3,C3,D3 .... 个人觉得效果会是这样。 $excel->getActiveSheet()->setCellValue( $i . $num, $value['值1']); } } header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="' . time() . '.xlsx'); header('Cache-Control: max-age=0'); $objWriter = \PHPExcel_IOFactory::createWriter($excel, 'Excel2007'); $objWriter->save('php://output'); exit;
》》》接下来看 如何读取表格
$excelRead = new \PHPExcel_Reader_Excel2007(); //canRead 是否能读取文件 不能读取则返回false if (!$excelRead->canRead($file)) { $excelRead = new \PHPExcel_Reader_Excel5(); if (!$excelRead->canRead($file)) { return ['error'=>'不能读取文件']; } } //从文件加载PHPExcel $file 是上传的文件 或者要读取的文件 $phpExcel = $excelRead->load($file); $curSheet = $phpExcel->getSheet(0); //最大行数 $rowCount = $curSheet->getHighestRow(); //最大列数 $columnCount = $curSheet->getHighestColumn(); //把读取到的数据放到一个数组中 for ($row = 2; $row <= $rowCount; $row++) { $value = []; for ($col = 'A'; $col <= $colCount; $col++) { $tmp = $col . $row; //excel 坐标 A2B2 A3B3 A4B4 A5B5 A6B6.... $value['自定义'] = trim($curSheet->getCell($tmp)->getValue()); //获取对应的值。 } $data[] = $value; } unset($file); //这里你可以删除临时文件。 return $data;