第一步:安装excel,使用composer安装,我的是在window下,直接cmd切换到项目下面,输入

composer require phpoffice/phpexcel,然后就等待安装完成。如下图:

第二步:引入相关类

<?php
namespace app\admin\controller;
use app\admin\model\Bingli;
use app\admin\model\Moneyinfo;
use think\Controller;
use think\Validate;
use think\facade\Request;
use think\facade\Db;
use think\facade\Session;
use think\facade\View;
use PHPExcel_IOFactory;   //这个是三方类class Binglii extends Base
{ /** 批量导入数据详情*/public function upAgent(){if(Request::param('html') == false){            // 获取表单上传文件$file = request()->file('file');if(empty($file)){return json(['info'=>'请选择上传文件!','status'=>0]);}// 移动到框架应用根目录/public/upload/ 目录下,并修改文件名为时间戳$savename = \think\facade\Filesystem::putFile('excel', $file, 'time');// 文件名称$info = explode('/', $savename);                     $file = public_path().'public/upload/excel/'.$info['excel'];//2022-08-25  补充,最近发现老是报错PHPExcel_IOFactory找不到,于是单独引入文件require_once '../vendor/phpoffice/phpexcel/Classes/PHPExcel.php';require_once '../vendor/phpoffice/phpexcel/Classes/PHPExcel/IOFactory.php';//导入 $objPHPExcel = PHPExcel_IOFactory::load($file); //获取sheet表格数目//$objReader = PHPExcel_IOFactory::createReader('Excel5');//$objPHPExcel = $objReader->load($file,$encode='utf-8');$sheetCount = $objPHPExcel->getSheetCount(); //默认选中sheet0表$sheetSelected = 0;$objPHPExcel->setActiveSheetIndex($sheetSelected); //获取表格行数$rowCount = $objPHPExcel->getActiveSheet()->getHighestRow(); //获取表格列数$columnCount = $objPHPExcel->getActiveSheet()->getHighestColumn();$dataArr = array();/* 循环读取每个单元格的数据 */for ($i = 2; $i <= $rowCount; $i++) {$data['mi_num'] = $objPHPExcel->getActiveSheet()->getCell("D3")->getValue();   $data['mi_time'] = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getFormattedValue(); // getFormattedValue 获取本来的格式$data['mi_chargeItems'] = $objPHPExcel->getActiveSheet()->getCell("E".$i)->getValue();$data['mi_unit'] = $objPHPExcel->getActiveSheet()->getCell("M".$i)->getValue();$data['mi_quantity'] = $objPHPExcel->getActiveSheet()->getCell("O".$i)->getValue();$data['mi_unitPrice'] = $objPHPExcel->getActiveSheet()->getCell("R".$i)->getValue();$data['mi_money'] = $objPHPExcel->getActiveSheet()->getCell("V".$i)->getValue();$data['mi_payCode'] = $objPHPExcel->getActiveSheet()->getCell("X".$i)->getValue();$data['mi_cityCode'] = $objPHPExcel->getActiveSheet()->getCell("AD".$i)->getValue();$res[] = $data;  //数据赋值到数组}$lennum = 400; // 400条数据插入一次//记录一共插入了多少条数据$insertCount = 0;$count = count($res);  //总共多少条数据          $limit = ceil($count/$lennum);  //需要执行多少次插入数据的操作for($i = 1;$i <= $limit; $i++){$offset = ($i-1)*$lennum; //当前是第几次遍历,第一条数据是哪一条//从数组的第几条开始本次数据插入$datac = array_slice($res,$offset,$lennum);//模型可以插入大批量的数据$moneyinfo = new Moneyinfo();$result = $moneyinfo->saveAll($datac); $insertCount = count($result) + $insertCount;}//删除excel文件unlink($file);if($insertCount > 0){return json(['info'=>'文件上传成功,已经导入'.$insertCount.'条数据','status'=>1]); }else{return json(['info'=>'导入第'.$insertCount.'条失败','status'=>0]);  }             }}//数据导出public function downCsvB(){//2022-08-25  补充,最近发现老是报错PHPExcel_IOFactory找不到,于是单独引入文件require_once '../vendor/phpoffice/phpexcel/Classes/PHPExcel.php';require_once '../vendor/phpoffice/phpexcel/Classes/PHPExcel/IOFactory.php';//实例化PHPExcel类$objPHPExcel = new \PHPExcel();//激活当前的sheet表$objPHPExcel->setActiveSheetIndex(0);//数据$info = Request::param();        $id = $info['id'];$map1[] = ['bl_num','=',$id];$map2[] = ['mi_num','=',$id];$map3[] = ['mi_num','=',$id];$data1 = Db::table('zdb_bingli')->field('bl_name,bl_depart,bl_bed,bl_socialSecNum,bl_socialSecPayment,bl_balance,bl_admissionTime,bl_dischargeTime')->where($map1)->find();//引入model$moneyinfoModel = new Moneyinfo();$data = $moneyinfoModel->tab1('','',$id);$maxTime = Db::table('zdb_moneyinfo')->where($map3)->order('mi_time asc')->limit(0,1)->value('mi_time');$minTime = Db::table('zdb_moneyinfo')->where($map3)->order('mi_time desc')->limit(0,1)->value('mi_time');$totalm = Db::table('zdb_moneyinfo')->where($map2)->sum('mi_money'); //总金额$totalm = round($totalm,2);  //四舍五入$time1 = empty($maxTime) ? $data1['bl_admissionTime'] : $maxTime;  //时间段       $time2 = empty($minTime) ? $data1['bl_dischargeTime'] : $minTime;  //时间段 //设置表格头(即excel表格的第一行)// 合并 单元格$objPHPExcel->getActiveSheet()->mergeCells('A1:H1');$objPHPExcel->getActiveSheet()->mergeCells('E2:F2');$objPHPExcel->getActiveSheet()->mergeCells('C3:G3');$objPHPExcel->getActiveSheet(0)->SetCellValue('A1', 'xxxxxxxxxxx费用明细清单');      $objPHPExcel->getActiveSheet(0)->SetCellValue('A2', '姓名:'.$data1['bl_name']);$objPHPExcel->getActiveSheet(0)->SetCellValue('B2', '病区:');        $objPHPExcel->getActiveSheet(0)->SetCellValue('C2', $data1['bl_depart']);$objPHPExcel->getActiveSheet(0)->SetCellValue('E2', '社保号:'.$data1['bl_socialSecNum']);$objPHPExcel->getActiveSheet(0)->SetCellValue('H2', '床号:'.$data1['bl_bed']);$objPHPExcel->getActiveSheet(0)->SetCellValue('A3', '住院号:'.$id);$objPHPExcel->getActiveSheet(0)->SetCellValue('B3', '时间段:');$objPHPExcel->getActiveSheet(0)->SetCellValue('C3', date('Y/m/d H:i',$time1) .'至'. date('Y/m/d H:i',$time2));$objPHPExcel->getActiveSheet(0)->SetCellValue('H3', '病人签字:');//表头$objPHPExcel->getActiveSheet(0)->SetCellValue('A4','业务日期')->SetCellValue('B4','收费项目')->SetCellValue('C4','单位')->SetCellValue('D4','数量')->SetCellValue('E4','单价')->SetCellValue('F4','金额')->SetCellValue('G4','收费项目编码')->SetCellValue('H4','国家编码');$styleThinBlackBorder = array('borders' => array('allborders' => array( //设置全部边框'style' => \PHPExcel_Style_Border::BORDER_THIN //粗的是thick),),);      //边框设置$objPHPExcel->setActiveSheetIndex(0)->getStyle('A4:H4')->applyFromArray($styleThinBlackBorder);//循环刚取出来的数组,将数据逐一添加到excel表格。$num = 4;for ($i = 0; $i < count($data); $i++) {$objPHPExcel->getActiveSheet()->SetCellValue('A'.($i + 5),date('Y-m-d H:i',$data[$i]['mi_time']));$objPHPExcel->getActiveSheet()->SetCellValue('B'.($i + 5),$data[$i]['mi_chargeItems']);$objPHPExcel->getActiveSheet()->SetCellValue('C'.($i + 5),$data[$i]['mi_unit']);$objPHPExcel->getActiveSheet()->SetCellValue('D'.($i + 5),$data[$i]['mi_quantity']);$objPHPExcel->getActiveSheet()->SetCellValue('E'.($i + 5),$data[$i]['mi_unitPrice']);$objPHPExcel->getActiveSheet()->SetCellValue('F'.($i + 5),$data[$i]['mi_money']);$objPHPExcel->getActiveSheet()->SetCellValue('G'.($i + 5),' '.$data[$i]['mi_payCode']);$objPHPExcel->getActiveSheet()->SetCellValue('H'.($i + 5),' '.$data[$i]['mi_cityCode']);$num++;//边框设置$objPHPExcel->setActiveSheetIndex(0)->getStyle('A'.($i + 5).':H'.($i + 5))->applyFromArray($styleThinBlackBorder);}        // 合并 单元格$objPHPExcel->getActiveSheet()->mergeCells('C'.($num+2).':D'.($num+2));$objPHPExcel->getActiveSheet()->mergeCells('E'.($num+2).':F'.($num+2));$objPHPExcel->getActiveSheet(0)->SetCellValue('E'.($num+1), '合计');      $objPHPExcel->getActiveSheet(0)->SetCellValue('F'.($num+1), $totalm);$objPHPExcel->getActiveSheet(0)->SetCellValue('B'.($num+2), '交款:'.($totalm - $data1['bl_socialSecPayment']));$objPHPExcel->getActiveSheet(0)->SetCellValue('C'.($num+2), '入院总费用:'.$totalm);$objPHPExcel->getActiveSheet(0)->SetCellValue('E'.($num+2), '结算报销:'.$data1['bl_socialSecPayment']);$objPHPExcel->getActiveSheet(0)->SetCellValue('G'.($num+2), '余额:'.$data1['bl_balance']);$objPHPExcel->getActiveSheet(0)->SetCellValue('A'.($num+3), '制表人:'.$this->uname);// 水平居中$objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->setActiveSheetIndex(0)->getStyle('A4:H4')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);        //右对齐$objPHPExcel->setActiveSheetIndex(0)->getStyle('B2')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);$objPHPExcel->setActiveSheetIndex(0)->getStyle('B2')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);$objPHPExcel->setActiveSheetIndex(0)->getStyle('B3')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);$objPHPExcel->setActiveSheetIndex(0)->getStyle('E'.($num+2).':G'.($num+2))->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);//设置单元格宽度$objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('A')->setWidth(20);$objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('B')->setWidth(25);$objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('C')->setWidth(10);$objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('D')->setWidth(10);$objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('E')->setWidth(10);$objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('F')->setWidth(10);$objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('G')->setWidth(20);$objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('H')->setWidth(28);// 设置行高度$objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(15); //设置默认行高$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(20); //第一行行高$objPHPExcel->getActiveSheet()->getRowDimension(($num+1))->setRowHeight(20);$objPHPExcel->getActiveSheet()->getRowDimension(($num+2))->setRowHeight(20);$objPHPExcel->getActiveSheet()->getRowDimension(($num+3))->setRowHeight(20);// 字体大小和样式//$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(9);//第一行是否加粗  $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);$styleThinBlackBorderTB = array('borders' => array('top' => array( // 设置顶部边框'style' => \PHPExcel_Style_Border::BORDER_THIN //粗的是thick),'bottom' => array( //设置底部边框'style' => \PHPExcel_Style_Border::BORDER_THIN //粗的是thick),),);// 边框$objPHPExcel->setActiveSheetIndex(0)->getStyle('A'.($num+2).':H'.($num+2))->applyFromArray($styleThinBlackBorderTB);       // 设置垂直居中$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);//设置保存的Excel表格名称$filename = 'user'.date('Ymd_his').'.xls';//设置当前激活的sheet表格名称$objPHPExcel->getActiveSheet()->setTitle('user');iconv("utf-8", "gb2312", $filename);  //解决乱码的问题ob_end_clean();  //解决乱码核心//设置浏览器窗口下载表格header("Content-Type: application/force-download");header("Content-Type: application/octet-stream");header("Content-Type: application/download");header('Content-Disposition:inline;filename="' . $filename . '"');        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');  //生成excel文件//下载文件在浏览器窗口$objWriter->save('php://output');       exit();}
}

第三步:Model类

<?phpnamespace app\admin\model;use think\Model;/*** @mixin think\Model*/
class Moneyinfo extends Model
{public function tab1($startTime = 0,$endTime = 0,$mi_num = 0,$mi_chargeItems = null){//查询条件if(!empty($startTime) && !empty($endTime)){ //时间$startTime = strtotime($startTime);$endTime = strtotime($endTime);$map[] = ['mi_time','between',[$startTime,$endTime]];             }//查询条件if(!empty($mi_chargeItems)){ //项目$map[] = ['mi_chargeItems','like','%'.$mi_chargeItems.'%'];}$map[] = ['mi_num','=',$mi_num];//查询  Moneyinfo 是数据表名$res = Moneyinfo::field("mi_num,mi_time,mi_chargeItems,mi_unit,mi_quantity,mi_unitPrice,mi_money,mi_payCode,mi_cityCode")->where($map)->select()->toArray();//echo Moneyinfo::getLastSql();//返回数据return $res;}
}

关于getBottom不生效,看了一下源代码,改了一下

原写法:$objPHPExcel->getActiveSheet()->getStyle('A1')->getBorders()->getBottom()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN)

正确写法参考上面数据导出的底部边框。

导出的数据结构如下:

thinkphp6 + phpexcel 导入导出数据,设置特殊表格相关推荐

  1. php 导入表格数据,PHPExcel 导入Excel数据的方法

    这篇文章主要介绍了关于PHPExcel 导入Excel数据的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 一:使用composer下载 phpoffice/phpexcel 或者 ...

  2. 【PHP】【组件使用】【phpexcel】【phpexcel导入导出】

    [PHP][组件使用][phpexcel][phpexcel导入导出] 一.前提 PHP 7.3 tp3.2 tp5版本及以上的可能需要修改 二.phpexcel包引入 composer requir ...

  3. 百度指数常见php框架,怎么导出数据到excel表格-如何将百度指数数据导出到Excel表格...

    如何将百度指数数据导出到Excel表格 第一步:打开CAD.CAD命令行输入"Li"."选择对象"选需要提取坐标的多段线.回车. 第二步:将CAD文本框中的数据 ...

  4. mysql数据库导出后乱码问题_MySQL导入导出数据出现乱码的解决办法

    在mysql导入导出数据时经常出现中文乱码的问题,大多是因类导入导出时编码设置不一致所引起的.本文介绍了不同平台下的编码转换方法,供大家参考. 在linux系统中默认的是utf8编码,而windows ...

  5. mysql命令导入导出数据_mysql命令行导入和导出数据

    MySQL中导出CSV格式数据的SQL语句样本如下: select * from test_info into outfile '/tmp/test.csv' fields terminated by ...

  6. 如何导出数据到Excel表格

    开发工具与关键技术:Visual Studio.MVC 作者:幻奏 撰写时间:2019.5.5 我们在日常的生活中常常会看到很多的数据,有时,我们不一定只是在项目里面看到数据,可能我们还要在其他的地方 ...

  7. oracle导出数据视频教程,Oracle导入导出数据的几种方式

    oracle导入导出数据 1.导出dmp格式文件 --备份某几张表 !!!! exp smsc/smsc file=/data/oracle_bak/dmp/bakup0209_2.dmp table ...

  8. oracle 数据导入 mysql_oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)...

    这篇文章主要介绍了oracle导入导出数据的二种方法,利用PL/SQL Developer工具导出和利用cmd的操作命令导出的出方法,大家参考使用吧 方法一:利用PL/SQL Developer工具导 ...

  9. oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)

    这篇文章主要介绍了oracle导入导出数据的二种方法,利用PL/SQL Developer工具导出和利用cmd的操作命令导出的出方法,大家参考使用吧 方法一:利用PL/SQL Developer工具导 ...

最新文章

  1. 两年JAVA程序员的面试总结
  2. android简单长按,H5实现安卓长按/抬起事件
  3. Jenkins环境搭建(2)-搭建jmeter+ant+jenkins自动化测试环境
  4. Git 常用命令[持续更新...]
  5. Android开发小技巧之商品属性筛选与商品筛选
  6. 计算机一级windows2000,一级BWindows2000操作系统[2]
  7. 一篇文章总结暴力破解方法大全
  8. Vue源码分析 - watcher.js
  9. 运用incremental backup恢复归档GAP的DG-上篇
  10. php lt table gt 分页,帝国CMS 解决自动分页截断amp;lt;divamp;gt;等标签、末页空白问题 - Powered by 随缘小居...
  11. 李永乐2021线代讲义练习题答案
  12. 卫星地图-resolution和scale解析
  13. 5. 视图——Django
  14. 怎样把ICO图标改成圆形的?
  15. zabbix 报警 Lack of free swap space on Zabbix server 处理
  16. IOS系统降级小工具
  17. 第四章第二节数据资产盘点-数据资产盘点方法伦
  18. 最全的IMSI获取手机号段、归属地java代码
  19. python爬虫的基本原理以及scrapy框架的使用
  20. 数字音频总线A2B开发详解二十:ADAU1701做的功放板的音效(26个例程)(第一部分)

热门文章

  1. 常见的电脑自动关机命令
  2. 关于最新三甲医院的入职体检信息(2013.6.3)
  3. HTML <footer> 标签
  4. CSS div footer,网站Footer导航完美自动固定在底部div+css
  5. C++ 使用rand()函数生成随机数
  6. 如何看待高通创新的背后启示
  7. 转:无刷电机的变频器控制原理
  8. 用 CSS3 画心形和搜索放大镜图标
  9. Python英文文本分词(无空格)模块wordninja的使用实例
  10. python基础12----面向对象01