https://packagist.org/packages/phpoffice/phpexcel

使用:

composer require phpoffice/phpexcel

控制器引入

//引入phpoffice
use PHPExcel;
use PHPExcel_IOFactory;

导出代码:

//execl模板下载
public function template_download()
{
$objExcel = new PHPExcel();
$objWriter = \PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');
$objActSheet = $objExcel->getActiveSheet(0);
$objActSheet->setTitle('会员批量导入模板'); //设置excel的标题
$objActSheet->setCellValue('A1', '用户id');
$objActSheet->setCellValue('B1', '昵称');
$objActSheet->setCellValue('C1', '手机号'); $baseRow = 2; //数据从N-1行开始往下输出 这里是避免头信息被覆盖
//默认数据
$explame_data = array(
array(
'user_id' => '1',
'nickname' => '小明',
'phone' => '15012345678',
),
); foreach ($explame_data as $key => $value) {
$i = $baseRow + $key;
$objExcel->getActiveSheet()->setCellValue('A' . $i, $value['user_id']);
$objExcel->getActiveSheet()->setCellValue('B' . $i, $value['nickname']);
$objExcel->getActiveSheet()->setCellValue('C' . $i, $value['phone']);
} $objExcel->setActiveSheetIndex(0);
//4、输出
$objExcel->setActiveSheetIndex();
header('Content-Type: applicationnd.ms-excel');
$time = date('Y-m-d');
header("Content-Disposition: attachment;filename=会员批量导入模板" . $time . ".xls");
header('Cache-Control: max-age=0');
$objWriter->save('php://output');
}

导入代码:

    public function import_batch_send()
{
header("content-type:text/html;charset=utf-8"); //上传excel文件
$file = request()->file('file');
//将文件保存到public/uploads目录下面
$info = $file->validate(['size' => 1048576, 'ext' => 'xls,xlsx'])->move('./uploads');
if ($info) {
//获取上传到后台的文件名
$fileName = $info->getSaveName();
//获取文件路径
$filePath = Env::get('root_path') . 'public' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $fileName;
//获取文件后缀
$suffix = $info->getExtension();
//判断哪种类型
if ($suffix == "xlsx") {
$reader = \PHPExcel_IOFactory::createReader('Excel2007');
} else {
$reader = PHPExcel_IOFactory::createReader('Excel5');
}
} else {
return json(['status' => '1', 'message' => '文件过大或格式不正确导致上传失败-_-!']);
}
//载入excel文件
$excel = $reader->load($filePath, $encode = 'utf-8');
//读取第一张表
$sheet = $excel->getSheet(0);
//获取总行数
$row_num = $sheet->getHighestRow();
//获取总列数
$col_num = $sheet->getHighestColumn(); $import_data = []; //数组形式获取表格数据
for ($i = 2; $i <= $row_num; $i++) {
            $import_data[$i]['nickname']  = $sheet->getCell("B" . $i)->getValue();
$import_data[$i]['phone'] = $sheet->getCell("C" . $i)->getValue();
} if (empty($import_data)) {
return json(['status' => '1', 'message' => '数据解析失败']);
} //校验手机号是否重复
$phone_array = array_column($import_data, 'phone');
$phone_ids = implode(',', $phone_array);
$result_phone = db('user')
->field('phone')
->where('phone', 'in', $phone_ids)
->select();
if (!empty($result_phone)) {
$result_phone_array = array_column($result_phone, 'phone');
$result_phone_ids = implode(',', $result_phone_array);
return json(['status' => '3', 'message' => '数据重复', 'result' => $result_phone_ids]);
} //将数据保存到数据库
$res = db('user')->insertAll($import_data);
if ($res) {
return json(['status' => '2', 'message' => '导入成功']);
} else {
return json(['status' => '1', 'message' => '提交失败,请刷新重试']);
}
}
附征前端代码

<!DOCTYPE html>
<html>
<head>
<title>导入</title>
</head>
<body>
<form action="{:url('xxxx')}" enctype="multipart/form-data" method="post" >
上传文件:<input type="file" name="excel">
<input type='hidden' name="competition_id" value="{$competition_id}"/>
<input type='hidden' name="group_id" value="{$group_id}"/>
<input type="submit" value="提交文件">
</form>
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
</body>
</html>

public function imports()
{
set_time_limit(0);
if ($file = request()->file('excel')) {
$data1 = $this->request->post();
$info = $file->validate(['ext' => 'xls,xlsx,csv'])->move('../public/uploads/files/');
if ($info) {
$filename = $info->getFilename();
$exts = explode('.', $filename)[1];
$file_root = ROOT_PATH . '/public/uploads/files/' . date('Ymd') . '/' . $filename;
header("content-type:text/html; charset=utf-8");
$file_root = iconv('utf-8', 'gbk', $file_root);
if (file_exists($file_root)) {//如果文件存在
if ($exts == 'xls') {
$PHPReader = new \PHPExcel_Reader_Excel5();
} else if ($exts == 'xlsx') {
$PHPReader = new \PHPExcel_Reader_Excel2007();
}
$PHPExcel = $PHPReader->load($file_root);
$sheet = $PHPExcel->getActiveSheet(0);//获得sheet
$highestRow = $sheet->getHighestRow(); // 取得共有数据数
$data = $sheet->toArray();
$limit = 2;
$rows = ceil($highestRow / $limit);
for ($r = 0; $r < $rows; $r++) {
$start = $r * $limit;
for ($i = $start; $i < $limit + $start; $i++) {
if ($i == 0 && $r == 0) {
//第一行不导入
continue;
}
if ($data[$i][0] == '') {
continue;
}
$betrayal = Db::name('competition_buy_log')
->where('competition_id', $data['competition_id'])
->max('betrayal');
if ($betrayal) {
++$betrayal;
} else {
$betrayal = 1;
}
// 导入人员
$order_no = get_order_sn('DRSH');
$add["order_sn"]=$order_no;
$add["betrayal"]=$betrayal;
$add["competition_id"]=$data1['competition_id'];
$add["group_id"]=$data1['group_id'];
// 代表队
$delegation = $data[$i][0];
$add['delegation'] = $delegation;
$add['pay_money'] = 0;
$add['is_pay'] =1;
$add['coach_name'] = $data[$i][1];
$add['coach_mobile'] =$data[$i][2];
$add['coach_email'] =$data[$i][3];
$add['is_Import'] =1;
$add['user_name'] =$data[$i][4];
$add['mobile'] =$data[$i][5];
$add['card_num'] =$data[$i][6];
$user_info = Db::name('user')->where("mobile",$data[$i][5])->find();
if($user_info){
$add['uid']=$user_info['id'];
CompetitionBuyLog::insert($add);
}
}
}
} else {
// $this->error("文件不存在");
return array("resultcode" => -5, "resultmsg" => "文件不存在", "data" => null);
}
} else {
return array("resultcode" => -5, "resultmsg" => "文件不存在", "data" => null);
}
unset($info);
unlink($file_root);
$this->success('导入成功');
die;
} else {
$this->error('上传失败,请上传指定格式的文件');
}

}

phpoffice php操作excel表格的导入和导出的更多相关文章

  1. php操作excel表格的导入和导出

    前言:对于excel大家肯定熟悉不过了的,那么我们在日常的业务中应该是有对这些文件的导入导出操作的 类的下载:composer require phpoffice/phpexcel,其中Classes ...

  2. vue项目使用js-xlsx进行excel表格的导入和导出方法的简单原型封装

    前提:已经安装好 file-saver xlsx和 script-loader,如未安装,请查看 https://www.cnblogs.com/luyuefeng/p/8031597.html 新建 ...

  3. qt 操作excel表格

     自己编写的一个Qt C++类,用于操作excel表格,在Qt中操作excel需在.pro中增加CONFIG+=qaxcontainer配置. 1.打开Excel:objExcel = new QAx ...

  4. Python 利用Python操作excel表格之openyxl介绍Part2

    利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436) ## 绘图 c = LineChart()    ...

  5. Python 利用Python操作excel表格之openyxl介绍Part1

    利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436),免费获取以下性能监控工具(类似Nmon精简版) ...

  6. 【转】python操作excel表格(xlrd/xlwt)

    [转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异, ...

  7. Python 利用Python操作excel表格之xlwt介绍

    利用Python操作excel表格之xlwt介绍   by:授客 QQ:1033553122 直接上代码   案例1 #!/usr/bin/env python # -*- coding:utf-8 ...

  8. 用NPOI、C#操作Excel表格生成班级成绩单

    在C#中利用NPOI操作Excel表格非常方便,几乎上支持所有的Excel表格本身所有的功能,如字体设置.颜色设置.单元格合并.数值计算.页眉页脚等等. 这里准备使用NPOI生成一个班级成绩单Exce ...

  9. python - 操作excel表格

    说明:由于公司oa暂缺,人事妹子在做考勤的时候,需要通过几个excel表格去交叉比对员工是否有旷工或迟到,工作量大而且容易出错. 这时候it屌丝的机会来啦,花了一天时间给妹子撸了一个自动化脚本. 1. ...

  10. 转载:python操作excel表格(xlrd/xlwt)

    python操作excel表格(xlrd/xlwt)   最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而 ...

随机推荐

  1. 华盛顿大学-分布式系统课设-lab0

    前言 无意间发现一个华盛顿大学分布式系统的课程实验,感觉课程组设计得非常用心.不同于一般实验仅仅给出若干测试样例并判断程序的输出是否正确,实验中的验证环节通过DFS搜索来遍历分布式系统可能的状态,以此 ...

  2. datawhale-leetcode打卡 第013-025题

    搜索旋转排序数组(leetcode-033) 这道题非常简单,基本送分,之前做的代码还能用上 class Solution: def search(self, nums: List[int], tar ...

  3. PKUWC2025 游记

    哈哈哈哈哈,我糖完了,哈哈哈哈哈. Day \(-998244353\) 被波波抓到机房充军集训去了,听到了很多新奇的算法,然后拼尽全力仍难以 \(AC\)--然后被各种巨佬疯狂单调队列. Day \ ...

  4. SpringBoot实现HandlerInterceptor拦截器的接口没有需要重写的方法也不报错是怎么回事

    以前实现HandlerInterceptor接口,总会提示需要实现3个方法(preHandle.postHandle.afterCompletion).现在没有出现提示.原因:这是Java8的新特性- ...

  5. LCP 06. 拿硬币

    地址:https://leetcode-cn.com/problems/na-ying-bi/ <?php /** * Class Solution * 桌上有 n 堆力扣币,每堆的数量保存在数 ...

  6. (附体验地址)大模型知识引擎:AI 助手能否助力销售技能提升?

    体验地址:https://lke.cloud.tencent.com/webim_exp/#/chat/FAIMcM 腾讯云的大模型知识引擎本身定位于为企业客户及合作伙伴提供服务,因此我在探索如何最佳 ...

  7. 【记录】C-文件输入输出

    写在开头   摸鱼摸得昏天黑地,是该炸一炸鱼的本愿了~ 以前总觉得笔记没什么重要的,但有时事到临头,又十分渴求简明的提纲来唤起记忆/提供重学的门路.于是就有了以下的产物,也希望能抑制一下无效摸鱼的堕落 ...

  8. js回忆录(2) -- 逻辑表达式,条件语句

    之所以要把逻辑表达式和条件语句放一块写一下,完全是因为二者的联系太过紧密,逻辑运算产生布尔值的结果,而条件语句则根据布尔值决定走那个分支. 逻辑与: &&, 首先逻辑与有逻辑与运算功能 ...

  9. ant-design-pro 自定义表单 rules规则

    表单输入 <ProFormText name="id" label={intl.formatMessage({ id: 'pages.secret.form.id' })} ...

  10. SQL INSERT批量插入方式

    1.常规INSERT写法   INSERT INTO ... VALUES (...); INSERT INTO 表名( `字段1`, `字段2`) VALUES ('字段1的值', '字段2的值') ...