用PHPExcel导出导入Excel
thinkPHP5.0框架
查询数据库调用Excel方法
public function exportlist(){
$orderModel = new OrderModel();
if($start_time = $this->request->param('start_time','')){
$orderModel->where(function($query) use($start_time) {
$query->where('created_at','>=',$start_time);
});
}
if($end_time = $this->request->param('end_time','')){
$orderModel->where(function($query) use($end_time) {
$query->where('created_at','<=',$end_time);
});
}
$expTitle = '详细营销单'.date('Y-m-d');
//数据库的字段, '名字', '宽度
$expCellName = [
['rec_code','推荐人',15],
['pro_code','产品',15],
['price','金额',8],
['sell_code','营销人',15],
['created_at','日期',20],
];
$expTableData = $orderModel->order('id','desc')->select()->toArray();
if($expTableData){
$this->exportListExcel($expTitle,$expCellName,$expTableData);
}
}
Excel导出方法
public function exportListExcel($expTitle,$expCellName,$expTableData){
$xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称
$fileName = $xlsTitle;
$cellNum = count($expCellName);
$dataNum = count($expTableData);
Loader::import('PHPExcel.Classes.PHPExcel');
Loader::import('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');
Loader::import('PHPExcel.Classes.PHPExcel.Reader.Excel5');
$objPHPExcel = new \PHPExcel();
// 居中
$objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal('center');
$objPHPExcel->getDefaultStyle()->getAlignment()->setVertical('center');
$cellName = array('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','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');
// $objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合并单元格
// $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.' Export time:'.date('Y-m-d H:i:s'));
for($i=0;$i<$cellNum;$i++){
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'1', $expCellName[$i][1]);
$objPHPExcel->getActiveSheet(0)->getColumnDimension($cellName[$i])->setWidth($expCellName[$i][2]);
}
// Miscellaneous glyphs, UTF-8
for($i=0;$i<$dataNum;$i++){
for($j=0;$j<$cellNum;$j++){
$objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+2), $expTableData[$i][$expCellName[$j][0]]);
}
}
header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');
header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新窗口打印inline本窗口打印
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}
PHP导入Excel
public function excel(){
if($this->request->isPost()){
if (!empty($_FILES)) {
if(!in_array(cmf_get_file_extension($_FILES['file']['name']),['xlsx','xls'])){
$this->error('请上传Excel格式的文件!', '');
}
$uploader = new Upload();
$uploader->setFileType('file');
$result = $uploader->upload();
if ($result) {
Loader::import('PHPExcel.Classes.PHPExcel');
Loader::import('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');
Loader::import('PHPExcel.Classes.PHPExcel.Reader.Excel5');
$filename = ROOT_PATH .'public'. $result['preview_url']; //文件路径
$extension = cmf_get_file_extension($result['name']); //文件扩展名
if ($extension == 'xlsx') {
$objReader = \PHPExcel_IOFactory::createReader('Excel2007');
$objPHPExcel = $objReader->load($filename, $encode = 'utf-8'); //加载文件内容,编码utf-8
} else if ($extension == 'xls') {
$objReader = \PHPExcel_IOFactory::createReader('Excel5');
$objPHPExcel = $objReader->load($filename, $encode = 'utf-8'); //加载文件内容,编码utf-8
} else {
$this->error('请上传Excel格式的文件!', '');
}
//$excel_array = $objPHPExcel->getsheet(0)->toArray(); //转换为数组格式
$sheet =$objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();//取得总行数
//$highestColumn =$sheet->getHighestColumn(); //取得总列数
for($i=2;$i<=$highestRow;$i++){
if($value = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue()){
if(!Db::name('sell')->where('sell_code',$value)->find()){
$data[] = ['sell_code'=>$value];
}
}
}
if (Db::name('sell')->insertAll ($data)) {
$this->success('导入数据成功!', url('AdminSell/index'));
} else {
$this->error('导入数据失败!', '');
}
} else {
$this->error($uploader->getError(), '');
}
}
}
}
还有一种比较简单,快捷的方法, 不需要因为额外的文件或者composer, 就是直接输出excel文件.
只需要一个方法(适合菜鸟使用)
/**
* Author 963087326@qq.com
* 导出excel
* @param array $data 导出数据
* @param array $a excel表头
* @param string $b 导出的文件名
* @return file
*/
function excel($data,$a,$b=null){
header("Content-type:application/octet-stream");
header("Accept-Ranges:bytes");
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment;filename=".$b.".xls");
header("Pragma: no-cache");
header("Expires: 0"); //$a=['第一列','第二列','第三列'];
foreach ($a as $k => $v) {
$a[$k]=iconv("UTF-8", "GB2312//IGNORE",$v);
}
//输出表头
echo implode(' ',$a)."\n";
foreach ($data as $key => $value) {
$arr = array();
foreach ($value as $kk => $vv) {
if(empty($vv) || $vv=='无' ){
$vv='--';
}
$j=iconv("UTF-8", "GB2312//IGNORE",$vv);
$arr[]= trim($j);
}
//输出数据
echo implode(' ',$arr)."\n";
}
//$b=[1,2,3];
}
用PHPExcel导出导入Excel的更多相关文章
- PHPExcel导出导入excel、csv等格式数据
<?php if(!defined('BASEPATH')) exit('No direct script access allowed'); //物资发料单明细 class Read_writ ...
- .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)
.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构) public cl ...
- php利用PHPExcel类导出导入Excel用法
PHPExcel类是php一个excel表格处理插件了,下面我来给大家介绍利用PHPExcel类来导入与导出excel表格的应用方法,有需要了解的朋友不防参考参考(PHPExcel自己百度下载这里不介 ...
- php 导出导入excel
首先需要去官网https://github.com/PHPOffice/PHPExcel/下载PHPExcel,下载后只需要Classes目录下的文件即可. 链接: https://pan.baidu ...
- 【tp5.1】通过PHPExcel实现导入excel表格
1.上github下载PHPExcel,链接:https://github.com/PHPOffice/PHPExcel 2.下载解压后,将Classes改名为PHPExcel如图 3.将文件夹复制到 ...
- PHPExcel导出导入
便于记忆 这里写一个PHPexcel导出的demo 我们构造一个数据 $letter = array('A','B','D','E'); //sheet索引 $date = array( ar ...
- DevExpress XtraGrid 数据导出导入Excel
// <summary> /// 导出按钮 /// </summary> /// <param name="sender"></param ...
- C# winform 导出导入Excel/Doc 完整实例教程[网上看到的]
还真没做过winform的导出导入,今天上网百度了一下.结果--- 所以还是我自己写个吧.之前做过web的,半搬半做就OK. 1添加引用:Aspose.Cells.dll(我们就叫工具包吧,可以从网上 ...
- asp.net core导出导入excel
使用NPOI导入导出excel,已经封装好Action可以直接调用 导出 效果图 使用方法 定义导出实体 class Student { public int Id { get; set; } pub ...
随机推荐
- jQuery之标签操作和返回顶部、登录验证、全选反选、克隆示例
一.样式操作 1.JQ中的样式类 somenode.addClass();// 添加指定的CSS类名. somenode.removeClass();// 移除指定的CSS类名. somenode.h ...
- Souvenir Shop 解题报告
Souvenir Shop 魔幻题目,这谁搞得到啊... 考场上完全sb了写了个线段树合并,想必我是个复杂度分析都没学过的入门级选手 发现这个网格图dag它的出度最多只有2 如果按照先走朝上的一条边进 ...
- 如何取消Paypal自动付款功能
在国外在线服务消费肯定会常遇到PayPal的支付方式,有些人可能PayPal有些余额可能会用这个工具来支付,但付款后,可能服务因为不满意而退掉,但第二年却自动续约了?但明明服务已退掉,这该怎么处理呢? ...
- Gym - 101350G Snake Rana(容器原理)
Old Macdonald wants to build a new hen house for his hens. He buys a new rectangular area of size N ...
- Java计算文件MD5值(支持大文件)
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.securit ...
- ACM-ICPC 2018 徐州赛区网络预赛 G Trace(思维+set)
https://nanti.jisuanke.com/t/31459 题意 n个矩阵,不存在包含,矩阵左下角都在(0,0),给右上角坐标,后来的矩阵会覆盖前面的矩阵,求矩阵周长. 分析 set按照x或 ...
- 尝试去读SQLMAP源码(一)
本人python 小菜比 一枚.拜读业界典范~~ 阅读sqlmap 的版本是1.1.6,目前应该是最新版. sqlmap.py 脚本中 72~83 def modulePath(): "&q ...
- redux知识点
1.关于传参 点击跳转 两种 动态路由 url 但是取值需要自己处理 关于动态跳转(js执行跳转) 关于异步加载组件 创建loadable app.js中 在 要加载的异步组件中 (这样接收参数不 ...
- poj 2155 matrix 二维线段树 线段树套线段树
题意 一个$n*n$矩阵,初始全为0,每次翻转一个子矩阵,然后单点查找 题解 任意一种能维护二维平面的数据结构都可以 我这里写的是二维线段树,因为四分树的写法复杂度可能会退化,因此考虑用树套树实现二维 ...
- TCP-IP详解笔记5
TCP-IP详解笔记5 ICMPv4和ICMPv6: Internet控制报文协议 Internet控制报文协议(Internet Control Message Protocol, ICMP)与IP ...