phpspreadsheet-工具类 导入导出(整合优化,非原创,抄一抄,加了一些自己的东西)
1. composer require phpoffice/phpspreadsheet
2. 看最下面的两个demo  (使用框架 : tp5.1 , laravel也能用,改改不就行了..)

 <?php
namespace app\common\utils; use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\IOFactory; /**
* phpoffice-phpspreadsheet-工具类
*/
class PhpOffice{ /**
* @title 导出表格
* @param arr:要导出excel表的数据,接受一个二维数组
* @param fileName:excel表的表名
* @param headAr:excel表的表头,接受一个一维数组
* @param keyAr:$arr中对应表头的键的数组,接受一个一维数组
*/
public function exportExcel($fileName='表格', $arr=[], $headAr=[], $keyAr=[]){
$count = count($headAr)-1;//计算所需表头数量 $spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet(); //设置列
$rowAr=self::setRowAr($count);
foreach ($rowAr as $k => $v) {
if($k>$count) break;
$sheet->setCellValue($v.'1',$headAr[$k]);
} //写入值
foreach ($arr as $k => $v) {
foreach ($rowAr as $ke => $ve){
if($ke>$count) break;
$sheet->setCellValue($ve.($k+2),$v[$keyAr[$ke]]);
$spreadsheet->getActiveSheet()->getColumnDimension($ve)->setWidth(10); //固定列宽
}
}
//冻结首行
$spreadsheet->getActiveSheet()->freezePaneByColumnAndRow(0,2); //在输出Excel前,缓冲区中处理BOM头
ob_end_clean();
ob_start(); header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$fileName.date('_Ymd_Hi',time()).'.xlsx"');
header('Cache-Control: max-age=0');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output'); //删除清空:
$spreadsheet->disconnectWorksheets();
unset($spreadsheet);
exit;
} //导入
public function importExcel(){
set_time_limit(0); //文件上传导入
// $fileController=new FileController();
$res=self::uploadFileImport();
$data=$res['data'];
//手动输入路径
// $data='muban/muban.xlsx'; //修正路径
$filename=str_replace('/uploads', 'uploads',$data);
//进行读取
$spreadsheet = IOFactory::load($filename);
$sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
return $sheetData;
} //文件上传,导入文件专用,数据不入库
public function uploadFileImport(){
// 获取表单上传文件
$file = \request()->file('file');
$return = array('status' => 1, 'info' => '上传成功', 'data' => []);
// 移动到框架应用根目录/public/uploads/ 目录下
if($file){
$savePath = '/uploads/importExcel';
$info = $file->move(ROOT_PATH . 'public' . DS .$savePath);
$md5 = $info->hash('md5');
$sha1= $info->hash('sha1');
$saveName=strtr($info->getSaveName(),'\\','/');
return self::setResAr(1,'上传成功',$savePath.'/'.$saveName);
}
return self::setResAr(0,'上传失败');
} //设置列一维数组(最多701列)
public function setRowAr($count=26){
$indData='A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z';
$indData=explode(',',$indData);
$curCount=26;
for ($i=0; $i <26 ; $i++) {
for ($j=0; $j <26 ; $j++) {
if($curCount>=$count) return $indData;
$indData[]=$indData[$i].$indData[$j];
$curCount++;
}
}
return $indData;
} //设置返回结果格式
public function setResAr($code=0,$msg='',$data=array()){
return ['code'=>$code,'msg'=>$msg,'data'=>$data];
} // 如何实现..
// //定义好命名空间
// use app\common\utils\PhpOffice;
// use think\Db; // class Demo{
// //导出demo-实现
// public function exportDemo(){
// //获取数据
// $data=Db::name('config')->select();
// //获取表头(自行定义)
// $sql="select COLUMN_NAME as name,column_comment as val from INFORMATION_SCHEMA.Columns where table_name='表名'";
// $arr=Db::query($sql); // $headAr=[];
// $keyAr=[];
// foreach ($arr as $k => $v) {
// $headAr[]=$v['val'];
// $keyAr[]=$v['name'];
// }
// $phpOffice = new PhpOffice();
// $phpOffice->exportExcel('导出表格',$data,$headAr,$keyAr);
// } // //导入demo-实现
// public function importDemo(){
// $phpOffice = new PhpOffice();
// $data=$phpOffice->importExcel();
// dump($data);
// //自行foreach进行数据处理..
// //..
// }
// }
// }
 <?php
//定义好命名空间
use app\common\utils\PhpOffice;
use think\Db; class Demo{ //导出demo-实现
public function exportDemo(){
//获取数据
$data=Db::name('config')->select();
//获取表头(自行定义)
$sql="select COLUMN_NAME as name,column_comment as val from INFORMATION_SCHEMA.Columns where table_name='表名'";
$arr=Db::query($sql); $headAr=[];
$keyAr=[];
foreach ($arr as $k => $v) {
$headAr[]=$v['val'];
$keyAr[]=$v['name'];
}
$phpOffice = new PhpOffice();
$phpOffice->exportExcel('导出表格',$data,$headAr,$keyAr);
} //导入demo-实现
public function importDemo(){
$phpOffice = new PhpOffice();
$data=$phpOffice->importExcel();
dump($data);
//自行foreach进行数据处理..
//..
}
}
?>

tp5.1 phpspreadsheet- 工具类 导入导出(整合优化,非原创,抄一抄,加了一些自己的东西,)的更多相关文章

  1. java工具类POI导出word

    1.新建一个word,里面填写内容,如: 2.导出wordjava类 /** * POI导出word测试 * @throws Exception */ @RequestMapping(value=&q ...

  2. 【工具】导入导出 Excel

    文章目录 前言 当前支持的功能 方法api 配置 如何使用(Demo) 实现思路(该工具类可正确的一个大前提) 后记 前言 之前写的项目中,有个需求,需要导出导入Excel表格: 本来很简单的一件事, ...

  3. 工具类--Excel 导出poi

    实现功能 --批量导出excel 文件,配置一个sheet多少条数据,根据查询数据量的多少确定生成几个sheet页. pom 文件导入ExcelUtils工具包,依赖于poi包. <!-- ht ...

  4. 使用hutool工具类进行导出

    引入依赖为: <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</ ...

  5. java excel大数据量导入导出与优化

    package com.hundsun.ta.utils; import java.io.File; import java.io.FileOutputStream; import java.io.I ...

  6. Lucene第二篇【抽取工具类、索引库优化、分词器、高亮、摘要、排序、多条件搜索】

    对Lucene代码优化 我们再次看回我们上一篇快速入门写过的代码,我来截取一些有代表性的: 以下代码在把数据填充到索引库,和从索引库查询数据的时候,都出现了.是重复代码! Directory dire ...

  7. java最全的获取某个接口或者某个类所有对应的所有实现类和继承类的工具类--反射动态获取、非动态获取、按照路径获取等总结

    我们直接上代码吧,代码中有注释说明. //直接看代码吧 import java.io.File; import java.lang.reflect.Field; import java.net.URL ...

  8. 集合框架-工具类-Collections-其他方法将非同步集合转成同步集合的方法

    集合框架TXT  Collections-其他方法将非同步集合转成同步集合的方法

  9. Java基础学习总结(49)——Excel导入导出工具类

    在项目的pom文件中引入 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifac ...

随机推荐

  1. vue - 过滤器filter的基本使用

    1.全局过滤器 输出: 过滤器可以多次来调用 输出: 2.私有过滤器 <!DOCTYPE html> <html lang="en"> <head&g ...

  2. js 一个不得不注意的浏览器兼容性问题 进制转换

    写几行JS代码 var num = '022'; alert(num+' '+parseInt(num)+' '+parseInt(num,10)); 不同的浏览器将会得到不同的结果在谷歌浏览器下的结 ...

  3. 文献管理工具mendeley登录问题

    mendeley是一个文献管理工具,但是有一个让人诟病的地方是第一次登录,容易出现问题: 1.点击登录按钮后,报出红色警告 这个百度的问题中,经常提到的是这个,去点击红色错误的链接,通常应该是需要fa ...

  4. Linux性能优化从入门到实战:06 CPU篇:快速定位CPU瓶颈

    CPU性能指标      (1)CPU使用率:1) 用户态CPU使用率(包括用户态 user 和低优先级用户态 nice).2) 系统CPU使用率.3) 等待 I/O 的CPU使用率.4) 软中断和硬 ...

  5. javaweb各种框架组合案例(九):springboot+tk.mybatis+通用service

    一.项目结构 二.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...

  6. CF1009F Dominant Indices 长链剖分

    题目传送门 https://codeforces.com/contest/1009/problem/F 题解 长链剖分的板子吧. 令 \(dp[x][i]\) 表示 \(x\) 的子树中的深度为 \( ...

  7. 【leetcode】877. Stone Game

    题目如下: Alex and Lee play a game with piles of stones.  There are an even number of piles arranged in ...

  8. 【leetcode】402. Remove K Digits

    题目如下: 解题思路:我的方法是从头开始遍历num,对于任意一个num[i],在[i+1~len(num)-1]区间内找出离num[i]最近并且小于num[i]的数num[j],如果j-i <= ...

  9. 对webpack的初步研究2

    Entry Points 如“ 入门”中所述,有多种方法可以entry在webpack配置中定义属性.我们会告诉你,你的方法可以配置的entry属性,除了解释为什么它可能对你有用 Single Ent ...

  10. Dubbo学习-8-dubbo启动时检查

    启动时检查的作用如下: (1)Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true& ...