用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 ...
随机推荐
- beam 的异常处理 Error Handling Elements in Apache Beam Pipelines
Error Handling Elements in Apache Beam Pipelines Vallery LanceyFollow Mar 15 I have noticed a defici ...
- 51nod1812树的双直径(换根树DP)
传送门:http://www.51nod.com/Challenge/Problem.html#!#problemId=1812 题解:头一次写换根树DP. 求两条不相交的直径乘积最大,所以可以这样考 ...
- Ubuntu16.04 安装g++6
https://blog.csdn.net/qq_34877350/article/details/81182022 1.安装gcc-6: sudo apt-get update && ...
- 打怪升级之路—Security+认证通关攻略(401还是501)
我花了一个月才把题目过完一遍的(这一个月都上班,下班抽空做几页),这里面走了很多弯路,我把备考过程整理出来希望对大家有帮助. 我是在2019年1月完成的Security+考试,离安全牛课堂直播培训结束 ...
- MySQL_关于索引空间的的一些记录
一.清理普通索引占用的空间 问:对表中存在的k列(非主键)的普通索引执行以下重建操作,有什么影响? alter table T drop index k; alter table T add inde ...
- 腾讯云服务器tomcat端口无法访问
第一种情况: 如题:https://console.cloud.tencent.com/cvm/securitygroup 需要去这个地址设置安全组. 说实话,一句mmp不知当讲不当讲.使用说明这块太 ...
- React 记录(4)
React文档:https://www.reactjscn.com/docs/components-and-props.html 慢慢学习:对照教程文档,逐句猜解,截图 React官网:https:/ ...
- Linux运维(首页)
系统学习,以此见证学习历程 Linux运维基础 安装vmware+centos Linux基础 Linux的一些问题 Ubuntu遇到的bug linux_网易云音乐安装 linux_添加图标 遇到的 ...
- 设置redis服务开机自启动
今天周一,一大早来公司开完会,就听到开发的同学说本地项目起不来了,叫我查下原因.想了下,他们本地项目只跟我们公司的一台内网服务器有关,那台服务器他们要用到的呢,也就只有mysql和redis这两个服务 ...
- ssh远程登陆脚本(带跳板机)
mac自带的终端不太好用,被推荐了一个iterm2的终端替代工具,确实比自带的终端好用不少.下面记录下通过脚本一键远程登录的过程: 下载地址:http://m4.pc6.com/xuh3/iTerm2 ...