1.类库下载

composer require phpoffice/phpexcel

2.导入

public function import(){if(request()->isPost()){$result = ['status'=>false, 'msg'=>'操作失败'];$file = request()->file('file');$file_name = $file->getInfo()['name'];//文件名称$file_size = $file->getInfo()['size'];//文件大小$file_extension = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));$file_path = 'static/uploads/files/';// 移动到框架应用根目录/public/uploads/ 目录下$info = $file->move($file_path);if($info){//获取文件所在目录名$new_path = $file_path.$info->getSaveName();$objPHPExcel = new \PHPExcel();$objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel); //设置保存版本格式//实例化PHPExcel类if ($file_extension == 'xlsx'){$objReader=new \PHPExcel_Reader_Excel2007();} else if ($file_extension == 'xls') {$objReader = new \PHPExcel_Writer_Excel5();} $objPHPExcel = $objReader->load($new_path,$encode='utf-8');//获取excel文件$sheet = $objPHPExcel->getSheet(0); //激活当前的表$highestRow = $sheet->getHighestRow(); // 取得总行数$highestColumn = $sheet->getHighestColumn(); // 取得总列数$a=0;$abModel = new abModel();//将表格里面的数据循环到数组中for($i=2;$i<=$highestRow;$i++){//*为什么$i=2? (因为Excel表格第一行应该是标题,从第二行开始,才是我们要的数据。)$Channel = new Channel();$data[$a]['pro_code'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue();//产品编码$data[$a]['cardno'] = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();//卡号$data[$a]['cardkey'] = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();//卡密$data[$a]['validity'] = gmdate("Y-m-d H:i:s", \PHPExcel_Shared_Date::ExcelToPHP($objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue()));//有效期$a++;}//往数据库添加数据if(!empty($data)){$res = $abModel->insertAll($data);if($res){return ['status'=>true, 'msg'=>'操作成功!共导入'.$a.'条数据'];}}return $result;}else{return ['status'=>false, 'msg'=>$file->getError()];}}}

3、导出
3.1 导出CSV文件

public function exportOrderCsv(){$post = json_decode(input("param.where"), true);$ids = input("param.ids");$where = [];if(!empty($ids)){$ids = explode(',', $ids);$where[] = ['id', 'in', $ids];}$csv = new Csv();$list = Db::table('h_sw_orders')->field('large_order,sub_order,pro_code,pro_name,company_id,pro_attribute,mobile,rece_mobile,rece_name,rece_address,ctime,logistics_company,logistics_orderno,quantity,point,money,channel_name,status,deliver_status,cancel_remarks,remarks')->where($where)->select();foreach ($list as $key => $value) {if($value['status'] != 1){$list[$key]['point'] = 0;$list[$key]['money'] = 0;}}$title = array('大订单号','子订单号','商品编码','产品名称','所属公司','商品销售属性','兑换手机号','收货手机号','收货人姓名','收货地址','下单时间','物流公司','物流单号','商品数量','积分值','面值','渠道名称','订单状态','货物状态','撤单备注','备注','成本价');$fileName = date("Y-m-d H:i:s", time());$csv->put_csv($list, $title, $fileName);}

Csv文件

<?php
namespace think;
class Csv
{//导出csv文件public function put_csv($list, $title, $fileName = ''){$file_name = "exam".time().".csv";if(!empty($fileName)){$file_name = $fileName.".csv";}header('Content-Type: application/vnd.ms-excel');header('Content-Disposition: attachment;filename='.$file_name );header('Cache-Control: max-age=0');$file = fopen('php://output',"a");$limit = 1000;$calc = 0;//行数foreach ($title as $v){$tit[] = iconv('UTF-8', 'GB2312//IGNORE',$v);}fputcsv($file,$tit);foreach ($list as $v){$calc++;if($limit == $calc){ob_flush();flush();$calc = 0;}file_put_contents('$v.txt', $v);foreach($v as $t){if(is_numeric($t)){$tarr[] = iconv('UTF-8', 'GB2312//IGNORE',$t)."\t";}else{$tarr[] = iconv('UTF-8', 'GB2312//IGNORE',$t);}}fputcsv($file,$tarr);unset($tarr);}unset($list);fclose($file);exit();}// csv导入,此格式每次最多可以处理1000条数据(我觉得这个是不对的,他规定的是读取一行的最大长度)//$filename  文件路径public function input_csv($filename) {$csv_file = $handle = fopen($filename,'r');//只读方式打开,将文件指针指向文件头]$result_arr = array ();$i = 0;//函数从文件指针中读入一行并解析 CSV 字段(一维数组)while($data_line = fgetcsv($csv_file,1000)) {//跳过第一行标题读取if ($i == 0) {$GLOBALS ['csv_key_name_arr'] = $data_line;//将标题存储起来$i ++;continue;}//读取内容foreach($GLOBALS['csv_key_name_arr'] as $csv_key_num => $csv_key_name ) {$csv_key_name = iconv('gbk','utf-8', $csv_key_name);//标题if(!empty($data_line[$csv_key_num]) && $data_line[$csv_key_num]!='') {/*$result_arr[$i][$csv_key_name] = '';}else {*/$value = iconv('gbk','utf-8', $data_line[$csv_key_num]);//标题对应的内容$result_arr[$i][$csv_key_name] = $value;}}$i++;}fclose($handle); // 关闭指针return $result_arr;}}

3.2 导出Excel

public function exportPayOrder(){$where=input("param.where");$list=[];$ok=$this->where($map)->order("id desc")->select();foreach($ok as $k=>$v){$list[$k]['id']=$v['id'];$list[$k]['payment_no']='&nbsp;'.$v['payment_no'];$list[$k]['user']=(new User)->where(['id'=>$v['uid']])->value("user");$list[$k]['pro_name']=(new Channel)->where(['id'=>$v['channel_id']])->value("name");}$title=['ID','支付单号','用户名','产品名称'];return daochu_excel($list,$title,'支付单数据'.date("Y-m-d"));}
/*** @param array $data 要导出的数据* @param array $title excel表格的表头* @param string $filename 文件名*/
function daochu_excel($data=array(),$title=array(),$filename='报表'){//导出excel表格set_time_limit(0);ini_set("memory_limit", "1024M");//处理中文文件名ob_end_clean();Header('content-Type:application/vnd.ms-excel;charset=utf-8');header("Content-Disposition:attachment;filename=export_data.xls");//处理中文文件名$ua = $_SERVER["HTTP_USER_AGENT"];$encoded_filename = urlencode($filename);$encoded_filename = str_replace("+", "%20", $encoded_filename);if (preg_match("/MSIE/", $ua) || preg_match("/LCTE/", $ua) || $ua == 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko') {header('Content-Disposition: attachment; filename="' . $encoded_filename . '.xls"');}else {header('Content-Disposition: attachment; filename="' . $filename . '.xls"');}header ( "Content-type:application/vnd.ms-excel" );$html = "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>";$html.="<html xmlns='http://www.w3.org/1999/xhtml'>";$html.="<meta http-equiv='Content-type' content='text/html;charset=UTF-8' /><head><title>".$filename."</title>";$html.="<style>td{text-align:center;font-size:12px;font-family:Arial, Helvetica, sans-serif;border:#1C7A80 1px solid;color:#152122;";$html.="width:auto;}table,tr{border-style:none;}.title{background:#7DDCF0;color:#FFFFFF;font-weight:bold;}</style>";$html.="</head><body><table width='100%' border='1'><tr>";foreach($title as $k=>$v){$html .= " <td class='title' style='text-align:center;'>".$v."</td>";}   $html .= "</tr>";    foreach ($data as $key =>$value) {$html .= "<tr>";foreach($value as $aa){$html .= "<td>".$aa."</td>";}$html .= "</tr>";}$html .= "</table></body></html>";echo $html;exit;
}

thinkphp5 excel导入导出相关推荐

  1. 注解+反射优雅的实现Excel导入导出(通用版)

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/youzi1394046585/ article/details/86670203 日常在做后 ...

  2. java超级简单到爆的Excel导入导出(easypoi)

    场景: 在日常工作中,excel导入导出,是十分常见的,有两种主流的技术,一种是jxl,另一种是poi,而easypoi就是对poi进行了封装,使得导入导出变得更加的简单,阿里巴巴也有封装的工具名叫E ...

  3. 一个基于POI的通用excel导入导出工具类的简单实现及使用方法

    前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...

  4. easyexcel 设置标题_EasyExcel,让 excel 导入导出更加简单

    做积极的人,而不是积极废人! 来源:jianshu.com/p/8f3defdc76d4EasyExcelGitHub上的官方说明快速开始maven仓库地址导入导出总结 EasyExcel 在做exc ...

  5. excel winform 导入 导出_强大的 Excel 导入导出工具 hutool

    " 最近项目上需要用到 Excel 的导入导出功能,想着之前使用的都有点麻烦,所以结合多方资料,终于找到了这个还算不错的 Excel 处理工具,一起来看" 今日安利好物名为 Hut ...

  6. easypoi 多sheet导入_程序员接私活利器 玩转excel导入导出

    为什么会写Easypoi 以前的以前(岁月真TMD的快)我虽然写了不少代码但还是很少写poi,然后跳到一家公司之后就和业务人员聊上了,来这个需要个报表,这个报表样式是这样的,这个表头是这样的,就这样我 ...

  7. SpringBoot集成EasyPoi实现Excel导入导出

    作者介绍: 本人Java特工,代号:Cris Li : 中文名:克瑞斯理 简书地址: 消失的码农 - 简书 CSDN地址: https://blog.csdn.net/jianli95 个人纯洁版博客 ...

  8. SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了!

    在我们平时工作中经常会遇到要操作Excel的功能,比如导出个用户信息或者订单信息的Excel报表.你肯定听说过POI这个东西,可以实现.但是POI实现的API确实很麻烦,它需要写那种逐行解析的代码(类 ...

  9. 【飞秋】ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码

    最近闲了,花点几天时间将项目中常用的一些类.方法做了一下总结,希望对大家有用. 实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回fa ...

  10. Excel导入导出帮助类

    /// <summary>     /// Excel导入导出帮助类     /// 记得引入 NPOI     /// 下载地址   http://npoi.codeplex.com/r ...

最新文章

  1. java lifo 队列_1.8 Java 队列 Queue、双端队列 Deque - Java 知识总结与学习
  2. 【Android】换肤技术讲解
  3. python编程 入门到实践-Python编程入门到实践(二)
  4. 【KVM系列07】使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照
  5. Spring IOC (DI-依赖注入)
  6. 电商千万级交易的金手指:分布式事务管理
  7. 如何修改DynEd的学生记录服务器,DynEd教师管理端操作文档..docx
  8. Redis - 数据持久化
  9. c#: using Microsoft.Office.Interop.Excel 异常
  10. 移除collection中元素的注意事项(应用collection.remove移除元素造成的错误)
  11. 网页设计中一些小功能
  12. uni-app image组件当显示不出图片时显示默认图片
  13. Userland中debian系统打开chromium
  14. 虚拟中3DMax2018打开报错
  15. Pytorch - Illegal instruction
  16. 20岁跟对人,30岁做对事(三)
  17. html显示在最上面,怎样把div显示在html的最上面?
  18. finalcut剪切快捷键_Final Cut Pro 中的键盘快捷键
  19. 软件项目管理与素质拓展-2.3项目管理是残缺的美
  20. ad中使用智能粘贴_AD10 复制问题(复制方法和智能粘贴 拼版)

热门文章

  1. Java中的IO流基础(1)
  2. JST日本压着端子XH系列线对板连接器PCB封装库(2.5mm间距)
  3. 混沌工程(Chaos Engineering) 到底是什么?
  4. MES系统供应商评估报告-- Gartner出品
  5. python研究背景与意义_课题研究的背景和意义
  6. lwj_C#_集合stack栈和queue队列
  7. deepfacelab训练多久_DeepFaceLab进阶:H128,DF,SAE模型有何不同?哪个最好?
  8. 谈谈我对网站的个人规划
  9. Sovit3D三维可视化开发工具动画定义新功能
  10. 小程序计算当前定位与店铺距离