第一步:安装,使用composer安装扩展。composer require phpoffice/phpexcel

第二步:封装<?php

namespace ExcelService;

use think\Db;

use think\Exception;

use think\Loader;

use think\Log;

use PHPExcel_IOFactory;

use PHPExcel;

use PHPExcel_Worksheet_Drawing;

class ExcelService

{

/**

* TP5 Excel专用类库

* $excel=new Excel();

* $table_name="member"; // 数组则视为结果 字符串则视为表名

* $field=["id"=>"序号","guid"=>"项目代码","name"=>"项目名称"];

* $map=["status"=>1]; // 表名时 条件

* $map2=["status"=>-1]; // 表名时 条件

* $excel->setExcelName("下载装修项目")

* ->createSheet($table_name,$field,$map)

* ->createSheet($table_name,$field,$map2)

* ->downloadExcel();

*

*/

protected $objPHPExcel;

public $xlsReader;

public static $instance;

protected $sheetNum=0;

protected $error;

protected $columnWidth;

protected $rowHeight=20;

protected $excelName;

protected $sheetTitle;

protected $isLoad=false;

//如果你的字段列数超过26字母 会报错

protected $letterArray=["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"];

/**

* 项目初始化

* Excel constructor.

*/

public function __construct()

{

$this->objPHPExcel= new PHPExcel();

if(!$this->isLoad){

//新建时删除默认页面

$this->objPHPExcel->disconnectWorksheets();

}

}

/**

* 静态初始化方法

* Power: Mikkle

* Email:776329498@qq.com

* @return static

*/

public static function instance()

{

if (is_null(self::$instance)) {

self::$instance = new static();

}

return self::$instance;

}

/**

* Power: Mikkle

* Email:776329498@qq.com

* @param string $path

* @return static

* @throws Exception

* @throws \PHPExcel_Reader_Exception

*/

static public function loadExcel($path="/test.xls",$ext =''){

if (is_null(self::$instance)) {

self::$instance = new static();

}

$excel = self::$instance;

try {

try {

if ($ext == "csv") {

$xlsReader = \PHPExcel_IOFactory::createReader('CSV')->setDelimiter(',')->setEnclosure('"')->setSheetIndex(0);

$xlsReader->setReadDataOnly(true); //

$xlsReader->setLoadSheetsOnly(true);

$xlsReader->setInputEncoding('GBK');

$excel->xlsReader=$xlsReader->load($path);

}else{

$xlsReader = \PHPExcel_IOFactory::createReader("Excel2007");

$xlsReader->setReadDataOnly(true); //

$xlsReader->setLoadSheetsOnly(true);

$excel->xlsReader=$xlsReader->load($path);

}

} catch (Exception $e) {

$xlsReader = \PHPExcel_IOFactory::createReader("Excel5");

$xlsReader->setReadDataOnly(true); //

$xlsReader->setLoadSheetsOnly(true);

$excel->xlsReader=$xlsReader->load($path);

}

} catch (Exception $e) {

throw new Exception("读取EXCEL失败");

}

return $excel;

}

public function getSheetByName($name){

if (isset($this->xlsReader)){

return $this->xlsReader->getSheetByName($name);

}else{

return false;

}

}

public function getSheetNames(){

if (isset($this->xlsReader)){

return $this->xlsReader->getSheetNames();

}else{

return false;

}

}

/**

* Power: Mikkle

* Email:776329498@qq.com

* @return mixed

*/

public function getExcelObject(){

return $this->xlsReader;

}

public function getAllSheets(){

if (isset($this->xlsReader)){

return $this->xlsReader->getAllSheets();

}else{

return false;

}

}

public function getSheetCount(){

if (isset($this->xlsReader)){

return $this->xlsReader->getSheetCount();

}else{

return false;

}

}

public function getSheetArrayByIndex($index=0){

if (isset($this->xlsReader)){

return $this->xlsReader->getSheet($index)->toArray();

}else{

return false;

}

}

/**

* 设置下载的Excel名称

* Power: Mikkle

* Email:776329498@qq.com

* @param $name

* @return $this

*/

public function setExcelName($name){

$this->excelName=$name;

return $this;

}

public function setSheetTitle($name)

{

$this->sheetTitle=$name;

return $this;

}

public function getSheetTitle()

{

return $this->sheetTitle ? $this->sheetTitle : "";

}

/**

* 返回EXCEL名称

* Power: Mikkle

* Email:776329498@qq.com

* @return string

*/

public function getExcelName()

{

return $this->excelName ? $this->excelName : "新建的数据表格";

}

/**

* 创建

* @param  string|array $table = string 的时候则为表名  = array 的时候 则为结果集

* @param  array  $field 要导出的字段

* @param  array  $map   查询参数

* @return this

*/

public function createSheet($table,$field=[],$map=[]){

if (empty($table) ||empty($field)|| !is_array($field)){

$this->error="生成Excel的[table]或[field]参数不正确";

throw new Exception("生成Excel的[table]或[field]参数不正确");

return $this;

}

$sheet_num = $this->getNewSheetNum();

$objPHPExcel=$this->objPHPExcel;

$objPHPExcel->createSheet($sheet_num);

$objPHPExcel->setActiveSheetIndex($sheet_num);

$sheet=$objPHPExcel->getActiveSheet();

if ($this->getSheetTitle()) {

$objPHPExcel->getActiveSheet()->setTitle($this->getSheetTitle());

}

//设置默认行高

$sheet->getDefaultRowDimension()->setRowHeight($this->rowHeight);

$titleStyleArray = [

'font' => [

'bold' => true

],

'alignment' => [

'horizontal' => \PHPExcel_Style_Alignment::HORIZONTAL_CENTER

]

];

$field_title=array_values($field);

$letter_array = $this->letterArray;

foreach($field_title as $item=>$value){

if(isset($this->columnWidth)){

if(is_array($this->columnWidth) && count($field)==count($this->columnWidth)){

$sheet->getColumnDimension($letter_array[$item])->setWidth($this->columnWidth[$item]);

}elseif(is_integer($this->columnWidth)){

$sheet->getColumnDimension($letter_array[$item])->setWidth($this->columnWidth);

}else{

$sheet->getColumnDimension($letter_array[$item])->setAutoSize(true);

}

}else{

$sheet->getColumnDimension($letter_array[$item])->setAutoSize(true);

}

//标题加粗

$sheet->getStyle($letter_array[$item]."1")->getFont()->setBold(true);

$sheet->setCellValue($letter_array[$item]."1",$value);

}

// p($table);

if (is_string($table)) {

$list = Db::table($table)->field($field)->where($map)->select();

}else if(is_array($table)){

$list = $table;

}else{

throw new Exception("Table错误:支持数组或数据表名称");

return $this;

}

if ($list){

foreach($list as $item=>$value ){

$value=array_values($value);

foreach($value as $i=>$v){

$sheet->setCellValue($letter_array[$i].($item+2),$value[$i]);

}

}

}

$color='FFFF0000';

$width = count($field_title)+1;

$rows = count($list)+1;

//边框样式

$styleArray = [

'borders' => [

'allborders' => [

//  'style' => \PHPExcel_Style_Border::BORDER_THICK,//边框是粗的

'style' => \PHPExcel_Style_Border::BORDER_THIN,//细边框

//       'color' => array('argb' => $color),

],

],

];

$objPHPExcel->getActiveSheet()->getStyle("A1:{$this->letterArray[ $width ]}{$rows}")->applyFromArray($styleArray);

return $this;

}

/**

* 下载当前的EXCEL

* Power: Mikkle

* Email:776329498@qq.com

* @param string $save_name

* @throws \PHPExcel_Reader_Exception

*/

public function downloadExcel($save_name=""){

ob_start();

//最后通过浏览器输出

$save_name=$this->getExcelName();

$save_name = $save_name ? "$save_name.xls" : "导出信息.xls";

header('Content-Type: application/vnd.ms-excel; charset=utf-8');

header("Content-Disposition: attachment;filename=$save_name");

header('Cache-Control: max-age=0');

$objWriter = \PHPExcel_IOFactory::createWriter($this->objPHPExcel, 'Excel5');

$objWriter->save('php://output');

ob_end_flush();//输出全部内容到浏览器

die();

}

/**

* 保存当前的EXCEL

* Power: Mikkle

* Email:776329498@qq.com

* @param string $save_path

* @throws \PHPExcel_Reader_Exception

*/

public function saveExcel($save_path=""){

$objWriter = \PHPExcel_IOFactory::createWriter($this->objPHPExcel, 'Excel5');

$save_name=$this->getExcelName();

$save_name = $save_name ? "$save_name.xls" : "demo.xls";

$save_path=$save_path?$save_path:ROOT_PATH.'runtime/excel/'.$save_name;

if(!is_dir(dirname ($save_path))){

mkdir(dirname ($save_path),0755,true);

}

$objWriter->save($save_path);

die();

}

/**

* 获取新的Sheet编号

* Power: Mikkle

* Email:776329498@qq.com

* @return int

*/

protected function getNewSheetNum(){

$sheet_num=$this->sheetNum;

$this->sheetNum=$sheet_num+1;

return $sheet_num;

}

/**

* 设置行宽 未设置时候默认为自动

* Power: Mikkle

* Email:776329498@qq.com

* @param $width

* @return $this

*/

public function setColumnWidth($width){

if(is_integer($width)||is_array($width)){

$this->columnWidth=$width;

}

return $this;

}

/**

* 设置默认行高

* Power: Mikkle

* Email:776329498@qq.com

* @param $height

* @return $this

*/

public function setRowHeight($height){

if(is_numeric($height)){

$this->rowHeight=$height;

}

return $this;

}

/**

* 魔术方法 有不存在的操作的时候执行

* @access public

* @param string $method 方法名

* @param array $args 参数

* @return mixed

*/

public function __call($method, $args)

{

call_user_func_array([$this->objPHPExcel, $method], $args);

}

}

第三步:使用

1.导出数据到表格$excel=new ExcelService();

$table_name="mk_material_list_edit";

$field=["id"=>"序号","guid"=>"项目代码","name"=>"项目名称"];

$map=["status"=>1];

$map2=["status"=>-1];

$excel->setExcelName("下载装修项目")

->createSheet("装修项目",$table_name,$field,$map)

->createSheet("已删除装修项目",$table_name,$field,$map2)

->downloadExcel();

2.上传文件后导入数据,并解析数据结果$getExcelObject=Excel::loadExcel("test.xls");

$sheetName=$getExcelObject->getSheetNames();

dump($sheetName);

$sheet = $getExcelObject->getSheetByName($sheetName[0])->toArray();

dump($sheet);

think php excel,在thinkphp6中使用Excel相关推荐

  1. excel匹配_python中实现excel的高级筛选

    一 Excel里的高级筛选功能,着实令人惊叹,VBA里实现起来也相对简单,就是手动操作的代码化,设置好三项参数,便可以随取随用,效果稳准快. 二 在python 中实现同样的目的,更为直白爽快,不信你 ...

  2. php自带excel,基于php中使用excel的简单介绍_PHP

    在工作中需要处理多语言的翻译问题,翻译都是写在excel表格里面.为了处理方便我就保留中文和英文两列. 这样需要将这些数据从excel中取出来,然乎保存在excel的数组中,通过使用循环数组将相应的数 ...

  3. 计算机右键无法新建excel,右键新建中没有excel怎么删除_右键新建中没有excel怎么办...

    [www.gpsvo.com--电脑安全] 在电脑中,想要点击鼠标右键新建一个excel表格时,却没有这个程序,怎么办?下面随小编一起来看看吧. 右键新建中没有excel的解决方法1 同时按下wind ...

  4. vue 导入excel解析_VUE中导入excel文件

    实现的效果如下图 安装依赖 npm install xlsx --save 引入 import XLSX from 'xlsx' Vue.prototype.XLSX = XLSX 结构 v-mode ...

  5. java 向word中添加excel附件并向excel单元格中加入图片并压缩图片并根据图片动态控制单元格高度宽度

    word中加入excel附件 excel单元格中插入图片 word freemarker Excel poi 制作, jxl 插入图片 压缩图片/宽高,动态控制单元格高度与宽度 1.word 需要模板 ...

  6. 清华大学赵志磊--基于thinkPHP6框架的Excel表格导入和导出

    1.Excel表格导出 先上大图:(可放大查看,当作壁纸再好不过,超高清壁纸) 正题: 首先.thinkPHP6框架内在admin应用下,自定义文件夹,存放公共类,里面封装公共方法. 命名空间写好,记 ...

  7. Excel VBA参考文献中人名与年份格式转换

    一.用途 将Excel中含有人名与年份的字符串转换为指定格式.要求输入格式中作者的姓必须大于1个字符,名必须为1个字符. [案例]某不规则的参考文献字符串 Wang, H X, Ng, T B, 20 ...

  8. R语言使用broom包将回归模型(线性回归、逻辑回归、比例风险回归)的结果整理成dataframe并导出到excel等文件中:基于mtcars和colon数据集

    R语言使用broom包将回归模型(线性回归.逻辑回归.比例风险回归)的结果整理成dataframe并导出到excel等文件中:基于mtcars和colon数据集 目录

  9. python中读写excel的扩展库_Python读写Excel文件第三方库汇总,你想要的都在这儿!...

    常见库简介 xlrd xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件. http://xlrd.readthedocs.io/en/latest/ 1.xlrd ...

最新文章

  1. mysql单列索引和多列索引_mysql 单列索引与多列索引
  2. 2012_01_26
  3. TouTiao开源项目 分析笔记10 实现通用普通文章片段页面
  4. HTML引入JS、CSS的各种方法
  5. WEB Service 下实现大数据量的传输
  6. POJ 3553 Light Switching Game 博弈论 nim积 sg函数
  7. android 8.0应用内安装包,Android 8.0 下载安装进入【安装未知应用】页面,两步简化一步...
  8. CString 类型和引用
  9. hive partition 分区详解一
  10. oauth2授权码模式——微信第三方登录原理
  11. 【小米盒子3】刷机Android TV+电视家做极简电视
  12. python的计算_python计算smoothed PSSM(二)
  13. python中oserror_[python] 解决OSError: Address already in use
  14. 官方文档-Linux服务器集群系统(一)
  15. R语者小case之——从KEGG原始网页批量生成通路的基因表格
  16. Java回炉学习(三)
  17. oracle异地接管,群集的接管和故障恢复 - Oracle® ZFS Storage Appliance 管理指南,发行版 OS8.6.0...
  18. 如何评估项目的开发时间
  19. python36.dll 0xc000005_使用python运行时出现0xc000005错误
  20. 记录设计模式之抽象工厂模式

热门文章

  1. ubuntu18找不到wifi适配器
  2. golang.org/x/lint安装失败
  3. mysql 连接失败的日志(或者输出)结果分析
  4. Elipse 、Idea配置 Java-Code-Formatter
  5. 双向链表的增、删、查、改、python实现,超详细讲解
  6. Mac如何设置Vamare Fusion虚拟集的vmnet-8网卡
  7. 在DataTable和DataView中查找指定记录
  8. 将下载都是大写字母的网页里面的html转换为小写的简单方式
  9. [机器学习-Sklearn]函数sklearn.feature_extraction.DictVectorizer理解与总结
  10. python2.7安装教程选哪个版本运行ride_RobotFramework-RIDE环境搭建二:Robot Framework-RIDE安装过程以及踩雷点...