导入Excel基本思路:

  1. 接收前端传过来的Excel文件
  2. 将Excel文件转化为一个数组
  3. 将数组导入到数据库

从百度下载一个PHPExcel类:https://github.com/PHPOffice/PHPExcel

用IOFactory.php类

//导入Excelpublic function importExcel(){require_once ROOT_PATH . 'PHPExcel/Classes/PHPExcel/IOFactory.php';//导入PHPExcel文件中的IOFactory.php类$file = request()->file('file');//获取文件,file是请求的参数名$info = $file->move(ROOT_PATH . 'public' . DS . 'excel');//move将文件移动到项目文件的xxxif($info){$excel_path = $info->getSaveName();  //获取上传文件名
//            $excel_suffix = $info->getExtension(); //获取上传文件后缀$file_name = ROOT_PATH . 'public' . DS . 'excel' . DS . $excel_path;   //上传文件的地址$obj_PHPExcel = \PHPExcel_IOFactory::load($file_name);  //加载文件内容
//            echo "<pre>";$excel_array=$obj_PHPExcel->getsheet(0)->toArray();   //转换为数组格式array_shift($excel_array);  //删除第一个数组(标题);$arr  = reset($excel_array); //获取字段名unset($excel_array[0]); //删除字段名,剩下的都是存储到数据库的数据了!!$data = [];for($i = 0;$i < count($excel_array);$i++){foreach ($arr as $key => $value){$data[$i][$value] = $excel_array[$i+1][$key];//使数组的键值就是数据表的字段名}}$res = GoodsModel::getInstance()->insertAll($data);var_dump($res);}}

导出Excel:

方法一:用PHPExcel.php类

//导出Excelpublic function exportExcel2(){// 引入phpexcel核心类文件require_once ROOT_PATH . 'PHPExcel/Classes/PHPExcel.php';//实例化excel类$objPHPExcel = new \PHPExcel();// 操作第一个工作表$objPHPExcel->setActiveSheetIndex(0);// 设置sheet名$objPHPExcel->getActiveSheet()->setTitle('xx列表');// 设置表格宽度$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20);$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(20);$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(20);// 列名表头文字加粗$objPHPExcel->getActiveSheet()->getStyle('A1:J1')->getFont()->setBold(true);// 列表头文字居中$objPHPExcel->getActiveSheet()->getStyle('A1:J1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);// 列名赋值$objPHPExcel->getActiveSheet()->setCellValue('A1', '货品名称');$objPHPExcel->getActiveSheet()->setCellValue('B1', '规格型号');$objPHPExcel->getActiveSheet()->setCellValue('C1', '包装单位');$objPHPExcel->getActiveSheet()->setCellValue('D1', '规格单位');$objPHPExcel->getActiveSheet()->setCellValue('E1', '包装规格');$objPHPExcel->getActiveSheet()->setCellValue('F1', '标准售价(元)');$field = ['name', 'spec_model', 'pack_unit', 'spec_unit','pack_spec', 'price'];//第二行列字段内容$res = GoodsModel::getInstance()->field($field)->where(['company_id'=>$this->company_id])->limit(2)//限制条数->select();// 数据起始行$row_num = 2;// 向每行单元格插入数据foreach($res as $value){// 设置所有垂直居中$objPHPExcel->getActiveSheet()->getStyle('A' . $row_num . ':' . 'J' . $row_num)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);// 设置价格为数字格式$objPHPExcel->getActiveSheet()->getStyle('F' . $row_num)->getNumberFormat()->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_NUMBER_00);// 居中$objPHPExcel->getActiveSheet()->getStyle('A' . $row_num . ':' . 'F' . $row_num)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);// 设置单元格数值$objPHPExcel->getActiveSheet()->setCellValue('A' . $row_num, $value['name']);$objPHPExcel->getActiveSheet()->setCellValue('B' . $row_num, $value['spec_model']);$objPHPExcel->getActiveSheet()->setCellValue('C' . $row_num, $value['pack_unit']);$objPHPExcel->getActiveSheet()->setCellValue('D' . $row_num, $value['spec_unit']);$objPHPExcel->getActiveSheet()->setCellValue('E' . $row_num, $value['pack_spec']);$objPHPExcel->getActiveSheet()->setCellValue('F' . $row_num, $value['price']);
//            $objPHPExcel->getActiveSheet()->setCellValue('F' . $row_num, $value['state'] ? '√' : '×');
//            $objPHPExcel->getActiveSheet()->setCellValue('G' . $row_num, date('Y-m-d h:i:s',$value['statetime']));$row_num++;}$outputFileName = 'goods_' . time() . '.xls';//导出的文件名$xlsWriter = new \PHPExcel_Writer_Excel5($objPHPExcel);header("Content-Type: application/force-download");//告诉浏览器强制下载header("Content-Type: application/octet-stream");header("Content-Type: application/download");header('Content-Disposition:inline;filename="' . $outputFileName . '"');//attachment作为附件下载,inline在线下载,filename设置文件名header("Content-Transfer-Encoding: binary");header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");//设置浏览器响应缓存header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");header("Cache-Control: must-revalidate, post-check=0, pre-check=0");header("Pragma: no-cache");$xlsWriter->save("php://output");echo file_get_contents($outputFileName);}

方法二:直接用头部信息输出excel格式文件,内容以表格形式展示 。这种方法可能会导致excel文件格式和扩展名不一致,文件无法用于导入,如果只是导出看看数据可用这种方法。推荐方法一

  1. 把数据从数据库中查询出来
  2. 把查询出来的数据拼接到table标签中
  3. 调用设置好的header(头域)函数
//导出Excelpublic function exportExcel($action,$id = []){switch ($action){case 'HP':$comment = ['货品名称','规格型号','包装单位','规格单位','包装规格','标准售价(元)'];//第一行标题内容$field = ['name', 'spec_model', 'pack_unit', 'spec_unit','pack_spec', 'price'];//第二行列字段内容if($id){//查询指定的几条数据$res = GoodsModel::getInstance()->field($field)->where(['company_id'=>$this->company_id,'id'=>['in',$id]])->select();}else{//查询所有数据$res = GoodsModel::getInstance()->field($field)->where(['company_id'=>$this->company_id])
//                        ->limit(2)//限制条数->select();}break;default:$this->displayByError('行动有误,撤退!!');}$strTable ='<table width="500" border="1">';$strTable .= '<tr>';//第一行的标题foreach ($comment as $key => $value){$strTable .= '<td style="text-align:left;font-size:16px;" width="*">'.$value.'</td>'."\r\n";}$strTable .= '</tr>';//第二行的列字段$strTable .= '<tr>';foreach ($field as $key => $value){$strTable .= '<td style="text-align:left;font-size:14px;" width="*">'.$value.'</td>'."\r\n";}$strTable .= '</tr>';//第三行开始是导入数据库的数据$strTable .= '<tr>';for ($i = 0;$i < count($res);$i++){for ($j = 0; $j < count($field);$j++){$strTable .= '<td style="text-align:left;font-size:12px;" rowspan="*">'.$res[$i][$field[$j]].'</td>'."\r\n";}$strTable .= '</tr>';}$strTable .='</table>';unset($res);$this->downloadExcel($strTable,'GoodsExcel');exit();}/*** 导出excel需要设置的header* @param $strTable  /表格内容* @param $filename /文件名*/function downloadExcel($strTable,$filename){header("Content-type: application/vnd.ms-excel");//将查询结果导出到Excelheader("Content-Type: application/force-download");//告诉浏览器强制下载header("Content-Disposition: attachment; filename=".$filename."_".date('Y-m-d').".xls");//attachment作为附件下载,inline在线下载,filename设置文件名header('Expires:0');//浏览器不会响应缓存header('Pragma:public');//Public指示响应可被任何缓存区缓存。echo '<html><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'.$strTable.'</html>';}

导出Excel参考文献:https://blog.csdn.net/qq_41211900/article/details/81068901

PHP导入Excel和导出Excel相关推荐

  1. .Net NPOI 根据excel模板导出excel、直接生成excel

    一.根据Excel模板导出excel 1.导入NPOI.dll  2.DAL中添加类ExportExcel.cs using NPOI.SS.UserModel; using System; usin ...

  2. php excelreader 中文,如何解决php excel reader导出excel中文乱码?

    解决php excel reader导出excel中文乱码的方法:1.如果不使用dump函数,可以通过修改[_defaultEncoding]变量解决问题:2.如果使用dump函数导出excel,需要 ...

  3. asp.net中使用excel类导出Excel文件,并导出到web客户端中遇到的问题

    asp.net中使用excel类导出Excel文件,并导出到web客户端中遇到错误: 检索Com类工厂中CLSID为{000245-0000-0000-C000-000000000046}的组件失败, ...

  4. 使用EasyPoi利用excel模板导出excel表格下载

    前言:使用excel模板导出excel的好处在于可以事先在模板上定义颜色.格式等,适用于模板设计得比较灵活复杂的场景 一.添加jar包 <dependency><groupId> ...

  5. laravel 框架maatwebsite/excel拓展导出excel增加sheets分页功能

    laravel的maatwebsite/excel是一个功能很强大的插件,但是文档相对简单了点 怎么引入插件就不写了,composer地址:maatwebsite/excel - Packagist ...

  6. springboot+poi开发excel导出 加载Excel模板导出 Excel批量导出详解

    提到Excel导出功能,可能很多人都使用springmvc框架做过,笔者今天要给大家分享的是基于springBoot开发Excel复杂模板导出功能(所谓复杂模板指在模板里的特定表头里有不同的单元格合并 ...

  7. js导出EXCEL js导出EXCEL

    参考一:http://wenku.baidu.com/view/7b81f3eb6294dd88d0d26b57.html 参考二: js导出EXCEL js导出EXCEL <html> ...

  8. java 根据excel模板导出excel

    java 根据excel模板导出excel 由于项目需求,最近做了一个需要根据查询接口导出excel表格数据的需求 pom依赖: <dependency><groupId>or ...

  9. java 分析excel模板,java 根据excel模板导出excel

    java 根据excel模板导出excel 由于项目需求,最近做了一个需要根据查询接口导出excel表格数据的需求 pom依赖: org.apache.poi poi 3.16 org.apache. ...

最新文章

  1. 荣耀预装linux安装包,关于华为机子没有预装应用商店讨论
  2. 白洋组公众号-植物微生组33天受邀原创-诚邀同行分享经验
  3. 史上最正确的achemy安装方法
  4. 火星今天飞抵西非国家寻找埃博拉疫情
  5. linux下定时清理磁盘日志步骤
  6. angr学习笔记(8)(文件内容符号化)
  7. 【模型解读】从2D卷积到3D卷积,都有什么不一样
  8. AcWing算法提高课 Level-3 第二章 搜索
  9. 一图揭示:营销的目的、策略、战略
  10. 单像素骨架提取算法c语言实现,【图像】骨架提取与分水岭算法
  11. 不想被时代抛弃,就别远离一线
  12. Spring : lombok : 注解@Slf4j
  13. 使用开源ASR框架在Mono和.NET C#中进行语音识别
  14. 远离魔咒,见微知著,打造崭新的罗浮宫
  15. 手动玩转虚拟地址到物理地址转化
  16. Python :h5py 如何对dataset进行重新赋值?
  17. 美国计算机专业大学排名前30,美国计算机专业研究生大学排名TOP30
  18. php redis 传递闭包,有向图传递闭包 - osc_wff1160a的个人空间 - OSCHINA - 中文开源技术交流社区...
  19. 异构网络-元图、知识图谱
  20. Keil5-MDK 使用编译步骤及异常与修改(生成axf文件和bin文件)

热门文章

  1. Spring+CXF之集成
  2. 检索数据_15_将空值转成其它值
  3. Qt学习笔记之路径问题(window与linux下)
  4. [译]Go如何优雅的处理异常
  5. 使用 Debian 从 0 开始搭建 hexo 博客
  6. Node工程-构建优秀的Session机制
  7. 27.CSS3文本效果
  8. Python 中使用 for、while 循环打印杨辉三角练习(列表索引练习)。
  9. 互联网 DBA 需要做那些事(转)
  10. 快速生成NHibernate的映射文件和映射类的利器 —— codesmith软件