Excel导出

  1.   //功能:导出题库模板
  1. 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);
  2.  
  3. $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', '答案');//设置列的值
  4.  
  5. //设置居中
    $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); //字体加粗
  6.  
  7. //导出多条此处可加foreach循环--开始
  1. $objPHPExcel->setActiveSheetIndex(0) //选择
    //Excel的第A列,uid是你查出数组的键值,下面以此类推
    ->setCellValue('A2', "中国的首都是")
    ->setCellValue('B2', "北京")
    ->setCellValue('C2', "上海")
    ->setCellValue('D2', "广州")
    ->setCellValue('E2', "深圳")
    ->setCellValue('F2', "A");
  1. //导出多条此处可加foreach循环--结尾
  1. $objPHPExcel->getActiveSheet(0)->setTitle("题库模板");
    /*浏览器输出*/
    // $filename = "题库导入模板";
    $filename = iconv("utf-8", "gb2312", "题库导入模板");
  2.  
  3. 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');
    }
  4.  

Excel导入

 html代码:

  1. <button id="upload" type="button"> 导入数据</button>
  2.  
  3. jquery代码:
  1. $('#upload').click(function() {
    ajaxFileUpload();
    });
  2.  
  3. 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;
    }
  4.  
  5. 后端php代码:
  1. 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];
  2.  
  3. 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');
  4.  
  5. if (!$upload_info) {
    $res['error'] = '1';
    $res['msg'] = '上传失败,请刷新重试!';
    echo implode($res, ',');
    exit;
  6.  
  7. } else {
    //导入题库
    $result = $this->import_contract($upload_info);
    if ($result) {
    unlink('./Upload/' . $upload_info);
    $res['error'] = '0';
    $res['msg'] = '上传成功!';
  8.  
  9. } else {
    $res['error'] = '1';
    $res['msg'] = '上传失败,请确认数据格式是否正确!';
    }
    echo implode($res, ',');
    exit;
  10.  
  11. }
    }
    }
  12.  
  13. /**
    * 单文件上传
    * @return [type] [description]
    */
    public function uploadOne($dir)
    {
    $upload = new \Think\Upload();// 实例化上传类
    $upload->maxSize = 3145728;// 设置附件上传大小
    $upload->exts = array('xlsx');// 设置附件上传类型
    $upload->rootPath = './Upload/'; // 设置附件上传根目录
    $upload->savePath = $dir . '/'; // 设置附件上传根目录
  14.  
  15. $upload->autoSub = TRUE; //是否自动生成二级子目录
    $upload->subName = array('date', 'Ymd'); //子目录规则
  16.  
  17. // 上传单个文件
    $info = $upload->uploadOne($_FILES['file-2']);
  18.  
  19. if (!$info) {// 上传错误提示错误信息
    return false;
    } else {// 上传成功 获取上传文件信息
    return $info['savepath'] . $info['savename'];
    }
    }
  20.  
  21. /**
    * 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数
  1. $data = array();
    $now_time = time();
  2.  
  3. //获取文件中的数据
    // $datas = $objPHPExcel->getSheet(0)->toArray();//以数组的形式获取第一个sheet页的数据。与两个for循环的功能相同。
  1. for ($rowIndex = 2; $rowIndex <= $highestRow; $rowIndex++) { //循环行
  1. for ($colIndex = 'A'; $colIndex <= $highestColumn; $colIndex++) { //循环列
  2. $addr = $colIndex . $rowIndex;
  3. $cell = $objPHPExcel->getActiveSheet()->getCell($addr)->getValue();//获取某行某列的值
  4. if ($cell instanceof \PHPExcel_RichText) { //富文本转换字符串
    $cell = $cell->__toString();
    }
    $data[$rowIndex][] = $cell;
    }
  5. $data[$rowIndex][] = $now_time;
    $datas[] = $data[$rowIndex];
  6. }
  1. // array_shift($datas); //删除第一个元素
  1. 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
  2.  
  3. $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;
    }
    }
  4.  
  5. return 1;
  6.  
  7. } else {
    return false;
    }
  8.  
  9. }
  1.  

thinkphp-PHP实现Excel导入 导出功能的更多相关文章

  1. ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码

    实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回false 验证手机号是否正确 13,15,18 验证邮箱 验证网址 MD5加密,返 ...

  2. 实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件

    今天接到项目中的一个功能,要实现excel的导入,导出功能.这个看起来思路比较清楚,但是做起了就遇到了不少问题. 不过核心的问题,大家也不会遇到了.每个项目前台页面,以及数据填充方式都不一样,不过大多 ...

  3. 基于 POI 封装 ExcelUtil 精简的 Excel 导入导出

    注 本文是使用 org.apache.poi 进行一次简单的封装,适用于大部分 excel 导入导出功能.过程中可能会用到反射,如若有对于性能有极致强迫症的同学,看看就好. 序 由于 poi 本身只是 ...

  4. 企业级自定义表单引擎解决方案(十六)--Excel导入导出

    Excel对于后端管理系统来说,永远都是绕不开的话题,开发Excel导入导出功能往往都比较麻烦,因为涉及到Excel导入模板制作.Excel表格数据与系统数据库表字段映射.Excel导入数据验证.验证 ...

  5. Laravel Excel 实现 Excel-CSV 文件导入导出功能

    Laravel Excel 是一款基于 PHPExcel 开发的Laravel框架专用的 Excel/CSV 文件导入导出功能的扩展包,用起来的非常方便. 它的 Github 地址是:https:// ...

  6. Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

    1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和导出. 该 ...

  7. 在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

    1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出  ...

  8. laravel框架excel 的导入导出功能

      1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和导出. ...

  9. poi实现excel的导入导出功能

    Java使用poi实现excel的导入导出功能: 工具类ExcelUtil,用于解析和初始化excel的数据:代码如下 package com.raycloud.kmmp.item.service.u ...

随机推荐

  1. C/C++规范学习:

    一 关于浮点数: 1.1浮点数是否等于0判断:因为浮点数都有精度,不能拿浮点数直接和0.0f进行比较,而应该采用以下方法: if (f32Data == 0.0f) // 隐含错误的比较 #defin ...

  2. Sqoop概述

    sqoop Sqoop 是传统数据库与 Hadoop 之间数据同步的工具,它是 Hadoop 发展到一定程度的必然产物,它主要解决的是传统数据库和Hadoop之间数据的迁移问题.这节课我们将详细介绍 ...

  3. 借鉴redux,实现一个react状态管理方案

    react状态管理方案有很多,其中最简单的最常用的是redux. redux实现 redux做状态管理,是利用reducer和action实现的state的更新. 如果想要用redux,需要几个步骤 ...

  4. 1.- Netty设计理念-异步和事件驱动

    0. 关键点 a). 非阻塞网络调用,异步方法立即返回 b). 选择器(Selector)使得单一线程就可监控很多连接上的事件. <dependency> <groupId>i ...

  5. Spring自动注入有关的注解

    Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. 1,@Comp ...

  6. Xpath定位绝密版本

    xpath的作用就是两个字“定位”, 运用各种方法进行快速准确的定位,推荐两个非常有用的的firefox工具:firebug和xpath checker 在 XPath 中, 有七种类型的节点:元素. ...

  7. CentOS 6.4系统中编译和升级内核

    CentOS 6.4系统中编译和升级内核 [日期:2013-08-25] 来源:Linux社区  作者:vipshichg [字体:大 中 小] 可能因为以下几种原因,你可能需要对Linux kern ...

  8. 实现一个Promise.all

    用js自己实现一个Promise.all let promiseAll = (promises) => { return new Promise((resolve, reject) => ...

  9. SVG矢量图【转】

    var iconArray=[ //'circle', //实心圆 //'rect', //矩形 //'roundRect', //圆角矩形 //'triangle', //三角形 //'diamon ...

  10. [WPF][ListBox]鼠标拖拽多选,(Shift Key、Ctrl Key多选有效)(转)

    <ListBox Name="listBox" SelectionMode="Extended"> <ListBox.Resources> ...