博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
thinkphp-PHP实现Excel导入 导出功能
阅读量:5927 次
发布时间:2019-06-19

本文共 9578 字,大约阅读时间需要 31 分钟。

Excel导出

  //功能:导出题库模板
public function get_contract_ex()     {
ob_get_clean(); header("Content-Typ:text/html;charset=utf-8"); vendor('Excel.PHPExcel'); vendor('Excel.PHPExcel.IOFactory'); //设定缓存模式) $cacheMethod = \PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized; $cacheSettings = array(); \PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings); $objPHPExcel = new \PHPExcel(); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', '题干');//设置列的值 $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B1', '选项A');//设置列的值 $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C1', '选项B');//设置列的值 $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D1', '选项C');//设置列的值 $objPHPExcel->setActiveSheetIndex(0)->setCellValue('E1', '选项D');//设置列的值 $objPHPExcel->setActiveSheetIndex(0)->setCellValue('F1', '答案');//设置列的值 //设置居中 $objPHPExcel->getDefaultStyle() ->getAlignment() ->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER) ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); /*设置字段宽度*/ $objPHPExcel->getActiveSheet(0)->getColumnDimension('A')->setWidth(18); $objPHPExcel->getActiveSheet(0)->getColumnDimension('B')->setWidth(18); $objPHPExcel->getActiveSheet(0)->getColumnDimension('C')->setWidth(18); $objPHPExcel->getActiveSheet(0)->getColumnDimension('D')->setWidth(18); $objPHPExcel->getActiveSheet(0)->getColumnDimension('E')->setWidth(18); $objPHPExcel->getActiveSheet(0)->getColumnDimension('F')->setWidth(18); /*行高*/ $objPHPExcel->getActiveSheet(0)->getRowDimension(1)->setRowHeight(30); $objPHPExcel->getActiveSheet(0)->getDefaultStyle()->getFont()->setName("微软雅黑");//设置默认字体大小和格式 $objPHPExcel->getActiveSheet(0)->getStyle('A1:F1')->getFont()->setBold(true); //字体加粗 //导出多条此处可加foreach循环--开始
$objPHPExcel->setActiveSheetIndex(0) //选择             //Excel的第A列,uid是你查出数组的键值,下面以此类推             ->setCellValue('A2', "中国的首都是")             ->setCellValue('B2', "北京")             ->setCellValue('C2', "上海")             ->setCellValue('D2', "广州")             ->setCellValue('E2', "深圳")             ->setCellValue('F2', "A");
//导出多条此处可加foreach循环--结尾
$objPHPExcel->getActiveSheet(0)->setTitle("题库模板");         /*浏览器输出*/         // $filename = "题库导入模板";         $filename = iconv("utf-8", "gb2312", "题库导入模板");         header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');         header('Content-Disposition: attachment;filename="' . $filename . ".xlsx");         header('Cache-Control: max-age=0');         $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');         $objWriter->save('php://output');     }

Excel导入

 html代码:

 jquery代码:
$('#upload').click(function() {
ajaxFileUpload(); }); function ajaxFileUpload() {
$.ajaxFileUpload({
url: "<{:U('ServiceQuestions/upload_file')}>", //用于文件上传的服务器端请求地址 secureuri: false, //是否需要安全协议,一般设置为false fileElementId: 'file2', //文件上传域的ID dataType: 'text', //返回值类型 一般设置为json success: function(data, status) //服务器成功响应处理函数 {
var str = data; var data_array = data.split(","); if (data_array[0] != 0) {
layer.msg(data_array[1], {
time: 1000 }); } else if (data_array[0] == 0) { //上传成功 layer.msg(data_array[1], {
time: 1000 }); } }, error: function(data, status, e) //服务器响应失败处理函数 {
alert("网络错误"); } }) return false; } 后端php代码:
public function upload_file() {
$excel_type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; $tmp_file = $_FILES ['file-2'] ['tmp_name']; $file_types = explode(".", $_FILES ['file-2'] ['name']); $upload_type = $_FILES['file-2']['type']; $file_type = $file_types [count($file_types) - 1]; if ($file_type != 'xlsx' and $upload_type != $excel_type) {
$res['error'] = '1'; $res['msg'] = '不是Excel文件,请重新上传'; echo implode($res, ','); exit; } else {
//上传文件 $upload_info = $this->uploadOne('tesques'); if (!$upload_info) {
$res['error'] = '1'; $res['msg'] = '上传失败,请刷新重试!'; echo implode($res, ','); exit; } else {
//导入题库 $result = $this->import_contract($upload_info); if ($result) {
unlink('./Upload/' . $upload_info); $res['error'] = '0'; $res['msg'] = '上传成功!'; } else {
$res['error'] = '1'; $res['msg'] = '上传失败,请确认数据格式是否正确!'; } echo implode($res, ','); exit; } } } /** * 单文件上传 * @return [type] [description] */ public function uploadOne($dir) {
$upload = new \Think\Upload();// 实例化上传类 $upload->maxSize = 3145728;// 设置附件上传大小 $upload->exts = array('xlsx');// 设置附件上传类型 $upload->rootPath = './Upload/'; // 设置附件上传根目录 $upload->savePath = $dir . '/'; // 设置附件上传根目录 $upload->autoSub = TRUE; //是否自动生成二级子目录 $upload->subName = array('date', 'Ymd'); //子目录规则 // 上传单个文件 $info = $upload->uploadOne($_FILES['file-2']); if (!$info) {// 上传错误提示错误信息 return false; } else {// 上传成功 获取上传文件信息 return $info['savepath'] . $info['savename']; } } /** * Excel导入数据库表 * @return [type] [description] */ public function import_contract($filedir) {
ob_get_clean(); vendor('Excel.PHPExcel'); vendor('Excel.PHPExcel.IOFactory'); vendor('Excel.PHPExcel.IReader'); $objReader = \PHPExcel_IOFactory::createReader('Excel2007');//use excel2007 for 2007 format $objPHPExcel = $objReader->load('./Upload/' . $filedir); //$filename指定的文件 $sheet = $objPHPExcel->getSheet(0); $highestRow = $sheet->getHighestRow(); // 取得总行数 $highestColumn = $sheet->getHighestColumn(); // 取得总列数 // $sheetCount = $objPHPExcel->getSheetCount();//获取总的sheet数
$data = array();     $now_time = time();     //获取文件中的数据 // $datas = $objPHPExcel->getSheet(0)->toArray();//以数组的形式获取第一个sheet页的数据。与两个for循环的功能相同。
for ($rowIndex = 2; $rowIndex <= $highestRow; $rowIndex++) {  //循环行
for ($colIndex = 'A'; $colIndex <= $highestColumn; $colIndex++) {  //循环列             $addr = $colIndex . $rowIndex;             $cell = $objPHPExcel->getActiveSheet()->getCell($addr)->getValue();//获取某行某列的值             if ($cell instanceof \PHPExcel_RichText) { //富文本转换字符串                 $cell = $cell->__toString();             }             $data[$rowIndex][] = $cell;         }         $data[$rowIndex][] = $now_time;         $datas[] = $data[$rowIndex];     }
//        array_shift($datas);   //删除第一个元素
if ($datas) {
foreach ($datas as $key => $value) {
$add_data['qustion_title'] = $value[0]; //题目内容 $add_data['state'] = $value[5]; // 正确答案 $add_data['create_time'] = $value[6]; //添加时间 $filter_datas = array_filter($add_data, array($this, 'filter_recontreact')); //判断数据是否有null值 if (count($filter_datas)) {
$test = M('test_cont'); $test->startTrans(); $res = $test->add($add_data); if ($res) {
$test->commit(); //选项A $add_data2['0']['test_id'] = $res; //所属题目ID $add_data2['0']['answer_name'] = $value[1]; // 答案内容 $add_data2['0']['create_time'] = $value[6]; //添加时间 $add_data2['0']['state'] = "A"; // //选项B $add_data2['1']['test_id'] = $res; //所属题目ID $add_data2['1']['answer_name'] = $value[2]; // 答案内容 $add_data2['1']['create_time'] = $value[6]; //添加时间 $add_data2['1']['state'] = "B"; //ABCD //选项C $add_data2['2']['test_id'] = $res; //所属题目ID $add_data2['2']['answer_name'] = $value[3]; // 答案内容 $add_data2['2']['create_time'] = $value[6]; //添加时间 $add_data2['2']['state'] = "C"; //ABCD //选项D $add_data2['3']['test_id'] = $res; //所属题目ID $add_data2['3']['answer_name'] = $value[4]; // 答案内容 $add_data2['3']['create_time'] = $value[6]; //添加时间 $add_data2['3']['state'] = "D"; //ABCD $filter_datas2 = array_filter($add_data2, array($this, 'filter_recontreact')); //判断数据是否有null值 if (count($filter_datas2)) {
$res2 = M('test_answer')->addAll($add_data2); if (!$res2) {
$test->rollback(); return false; } } else {
return false; } } else {
$test->rollback(); return false; } } else {
return false; } } return 1; } else {
return false; } }
 

转载于:https://www.cnblogs.com/luzt/p/9390702.html

你可能感兴趣的文章
Syslog服务器配置
查看>>
WinAPI: GetComputerName - 获取计算机名称
查看>>
springCloud--补充:热部署
查看>>
Linux学习日志(三)
查看>>
我的友情链接
查看>>
解决每次Appium启动时的自带apk安装
查看>>
Objective-C之成魔之路【3-数据类型】
查看>>
更改UIView的背景
查看>>
多线程之三-单例模式
查看>>
唠唠 RDS 那些事 ——发布虚拟机
查看>>
极好的数据库学习资料
查看>>
tomcat service启动脚本
查看>>
linux入门之文本处理工具sed粗略使用(1)
查看>>
C语言生成随机数保存在文件中
查看>>
java语言匿名内部类之回调
查看>>
ansible调用callbacks插件实现结果nosql输出回调
查看>>
利用python多线程和队列管理shell程序
查看>>
Greenplum迁移数据后批量更新序列值
查看>>
Spring学习笔记六--外部配置文件
查看>>
代理模式
查看>>