用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 ...
随机推荐
- Java多线程处理某个线程超时的问题
ExecutorService exec = Executors.newFixedThreadPool(4); List<Future<Integer>> futures = ...
- C#嵌入动态链接库到可执行文件
C#嵌入动态链接库到可执行文件 将需要被集成的程序集放在项目的lib文件夹中,引用路径从解决方案开始,以“.”连接. 如图(解决方案名称为莫非): 核心代码: AppDomain.CurrentDom ...
- 打印并输出 log/日志到文件(C++)
#include <stdarg.h> #define MAX_LEN 1024 bool debug_mode; // 使用方法同 printf void lprintf(const c ...
- 安装python caffe过程中遇到的一些问题以及对应的解决方案
关于系统环境: Ubuntu 16.04 LTS cuda 8.0 cudnn 6.5 Anaconda3 编译pycaffe之前需要配置文件Makefile.config ## Refer to h ...
- Mac 终端美化方法
美化终端,主要是主题,字体,命令行提示3个方面. 主题 使用的主题是Solarized Dark主题. 安装主题: git clone git://github.com/altercation/sol ...
- 第十五节:Expression表达式目录树(与委托的区别、自行拼接、总结几类实例间的拷贝)
一. 基本介绍 回忆: 最早接触到表达式目录树(Expression)可能要追溯到几年前使用EF早期的时候,发现where方法里的参数是Expression<Func<T,bool> ...
- HTML(八)HTML meta标签&base标签
HTML meta元素 标签(meta-information)用于提供页面有关的元数据,除了提供文档字符集.使用语言.作者等基本信息外,还涉及对关键词和网页等级的设定.通过设置不同的属性,元数据可以 ...
- 轴对称 Navier-Stokes 方程组的点态正则性准则 II
在 [Wei, Dongyi. Regularity criterion to the axially symmetric Navier-Stokes equations. J. Math. Anal ...
- JavaScript生成斐波那契数列
常规写法 https://cn.bing.com/search?q=js+fibonacci+sequence&pc=MOZI&form=MOZSBR //Fibonacci func ...
- 定期清理WordPress的文章修订版本
当WordPress编辑或修改文章时会自动保存生成一个修订版本,默认是每分钟1次.方便恢复早先撰写的版本.不过时间一长就会产生大量的冗余数据,加重服务器负担,拖慢数据加载.当所有发布的文章都已更新到最 ...