thinkphp导入导出excel表单数据

在PHP项目经常要导入导出Excel表单。

先去下载PHPExcel类库文件,放到相应位置。

我在thinkphp框架中的位置为ThinkPHP/Library/Org/Util/

导入

在页面上传excel文件提交到后台,利用form表单提单即可

<form method="post" enctype="multipart/form-data" action="" >
<input type="submit" value="导入" />
<input  type="file" name="excel" />
</form>  

提交到后台后进行上传处理,这是一个执行上传的方法

public function data(){
        if(IS_POST){
        //设置编码防止乱码
        header("Content-Type:text/html;charset=utf-8");
            $upload = new \Think\Upload();// 实例化上传类
            $upload->maxSize   =     3145728 ;// 设置附件上传大小
            $upload->exts      =     array(‘xls‘,‘xlsx‘,‘csv‘);// 设置附件上传类
            $upload->rootPath  =     ‘Uploads/‘;
            $upload->savePath  =     ‘‘; // 设置附件上传目录
            // 上传文件
            $info   =   $upload->uploadOne($_FILES[‘excel‘]);
            $filename = ‘Uploads/‘.$info[‘savepath‘].$info[‘savename‘];
            $exts = $info[‘ext‘];
           // var_dump($info);
            if(!$info) {// 上传错误提示错误信息
                  $this->error($upload->geterror());
              }else{// 上传成功
                  $this->data_import($filename, $exts);
            }
        }
    }

上传文件的格式设为excel的格式,xls,xlsx,csv均可支持

然后对上传后的文件内容进行读取导入,下面是一个读取的方法。

protected function data_import($filename, $exts=‘xls‘)
    {
        //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入
        import("Org.Util.PHPExcel");
        //创建PHPExcel对象,注意,不能少了\
        $PHPExcel=new \PHPExcel();
        //如果excel文件后缀名为.xls,导入这个类
        if($exts == ‘xls‘){
            import("Org.Util.PHPExcel.Reader.Excel5");
            $PHPReader=new \PHPExcel_Reader_Excel5();
        }else if($exts == ‘xlsx‘){
            import("Org.Util.PHPExcel.Reader.Excel2007");
            $PHPReader=new \PHPExcel_Reader_Excel2007();
        }else if($exts == ‘csv‘){
            import("Org.Util.PHPExcel.Reader.CSV");
            $PHPReader=new \PHPExcel_Reader_CSV();
        }

        //var_dump($PHPReader);die;
        //载入文件
        $PHPExcel=$PHPReader->load($filename);
        //获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推
        $currentSheet=$PHPExcel->getSheet(0);
        //获取总列数
        $allColumn=$currentSheet->getHighestColumn();
        //获取总行数
        $allRow=$currentSheet->getHighestRow();
        //循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始
        for($currentRow=1;$currentRow<=$allRow;$currentRow++){
            //从哪列开始,A表示第一列
            for($currentColumn=‘A‘;$currentColumn<=$allColumn;$currentColumn++){
                //数据坐标
                $address=$currentColumn.$currentRow;
                //读取到的数据,保存到数组$arr中
                $data[$currentRow][$currentColumn]=$currentSheet->getCell($address)->getValue();
            }

        }
        $this->save_import($data);
    }

用上面这个方法获得excel里的数据,然后用save_import把获得的数据存入数据库

//保存导入数据
    public function save_import($data)
    {
        //print_r($data);exit;

        $bath = M(‘data‘);

        //插入新数据时先清空原表数据,没有这个需要可以注释下面步骤
        //M(‘mobile‘)->where(‘1=1‘)->delete();

        foreach ($data as $k=>$v){
                //$mobile=$v[‘A‘];   //注:****** (1)处
                $info[‘a‘] = $v[‘A‘];
                $info[‘b‘] = $v[‘B‘];
                $info[‘c‘]=$v[‘C‘];
                $info[‘d_water‘]=$v[‘D‘];
                $info[‘e‘]=$v[‘E‘];
                $info[‘f‘]=$v[‘F‘];

                $arr[] = $info;

        }
        $result=$bath->addall($arr);
        if($result){
            $this->success(‘数据导入成功‘);
        }else{
            $this->error(‘数据导入失败‘);
        }
        //print_r($info);
    }

导出相对于导入就容易的多,从数据库读出数据做出相应的处理

public function excel(){
        //引入PHPExcel库文件
        Vendor(‘PHPExcel.Classes.PHPExcel‘);
        //创建对象
        $excel = new PHPExcel();
        //Excel表格式,这里简略写了8列
        $letter = array(‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘F‘,‘G‘);
        //表头数组
        $tableheader = array(‘序号‘,‘客栈名称‘,‘客栈地址‘,‘座机‘,‘手机‘,‘QQ‘,‘邮箱‘);
        //填充表头信息
        for($i = 0;$i < count($tableheader);$i++) {
            $excel->getActiveSheet()->setCellValue("$letter[$i]1","$tableheader[$i]");
        }
        //表格数组
        $data = array(
                array(‘1‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘),
                array(‘2‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘),
                array(‘3‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘),
                array(‘4‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘),
                array(‘5‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘),
                array(‘6‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘),
               array(‘7‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘),
        );
        //填充表格信息
        for ($i = 2;$i <= count($data) + 1;$i++) {
            $j = 0;
            foreach ($data[$i - 2] as $key=>$value) {
                $excel->getActiveSheet()->setCellValue("$letter[$j]$i","$value");
                $j++;
            }
        }
        //创建Excel输入对象
        $write = new PHPExcel_Writer_Excel5($excel);
        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
        header("Content-Type:application/force-download");
        header("Content-Type:application/vnd.ms-execl");
        header("Content-Type:application/octet-stream");
        header("Content-Type:application/download");;
        header(‘Content-Disposition:attachment;filename="客栈信息.xls"‘);
        header("Content-Transfer-Encoding:binary");
        $write->save(‘php://output‘);
    

前台页面只需要执行此方法即可

时间: 2024-10-13 00:18:03

thinkphp导入导出excel表单数据的相关文章

Java利用POI导入导出Excel中的数据

     首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地址http://poi.apache.org/download.html,有兴趣的朋友也可以去看看其中的API.      下面分享一下在对POI进行基本操作时觉得需要注意的两点:       1.POI中针对xlsx/xls是需要create different Workbook instance

ETL工具—Kettle数据的导入导出—Excel表到数据库

案例目的:当Excel中有几万条记录或者更多数据时,使用Kettle导入到数据库中.速度就能感到比复制粘贴快很多. 这里我会演示将"data.xlsx"表中数据有15万多条记录,使用Kettle导入到oracle数据库的testuser用户下. 准备工作:1.data.xlsx表: 2.testuser用户下要有一个与data.xlsx表结构(列数与字段类型)相同的表. 开始!!! 1.新建一个"转换",将"Excel输入"."表输出&

winfrom 使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中

1.通过NUGET管理器下载nopi,在引入命令空间 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.IO; 5 using NPOI.SS.UserModel; //NPOI 6 using NPOI.HSSF.Util; //NPOI 7 using NPOI.HSSF.UserModel; //NPOI 8 using NPOI.XSSF.UserModel; /

c# 导入导出excel表格式

c#使用代码导入excel时,当遇到纯数字且大于15位时会出现编码混乱(表现为科学计数法),要想呈现与excel表中纯数字格式和在数据库中呈现纯数字,操作如下: 完成即可. 导出取决于导入的内容排版.

PHP laravel框架 导入导出excel ,phpexcel数据导出分多个工作区(sheet)

laravel 导入导出有很多 但是你发现等你根据conposer安装excal的时候你发现 他总是不依不饶的提示你: 安装失败 这就是laravel5.4的高明之处了, 下面让我们来看看吧! 1. 在laravel 项目的根目录下 我们会看到 一个composer.json的文件: 打开, 并找到 "maatwebsite/excel": "~2.0.0" 修改为 "~2.1.0" 保存 2. 执行 composer update maatwe

数据导入到excel表中

一.首先导入jar包:下载地址:http://download.csdn.net/detail/u011159417/9700784二.建立一个person类,(例如IP表)三.实现导出数据到excel表一共分为六步: 1.创建一个workbook对象,对应一个excel文件:HSSFWorkbook wb = new HSSFWorkbook(); 2.在workbook中,添加一个sheet:HSSFSheet sheet = wb.createSheet("sheet_test"

java写excel表的数据导出

// POI中的api                // 创建工作簿                HSSFWorkbook wb = new HSSFWorkbook(); // 创建工作表,就是一workSheet                HSSFSheet sheet = wb.createSheet("汽车列表");                // 创建首行,索引从0开始                HSSFRow firstRow = sheet.createR

在MySQL query browser中要导出execl表单

导出:  在MySQL query browser中要导出execl表单,只需要点击file,选择export execl就可以了(要先进入表单哦!). 导入: 数据库的数据太多一下导入有点麻烦,如何将excel的数据直接导入数据库呢? 第一步 另存为txt文档,名字最好为数据库的table名.  在这我们要保存问文本文件用制表符分割的那个,这样我们的数据就不会乱. 第二步 打开txt文档,点击另存为,修改编码,解决中文utf8.  这个时候的文件名必须和你要导入的table名称一样,否则在lo

导入导出Excel的Java工具类ExcelUtil

在编写ExcelUtil之前,在网上查了一些资料.java中用来处理Excel的第三方开源项目主要就是POI和JXL.poi功能强大,但是比较耗资源,对于大数据量的导入导出性能不是太好:jxl功能简单,但是性能比较好. 由于本项目的导入导出更多关注性能问题,而且jxl提供的功能基本也都够用了,于是选择了jxl作为支持. 实战 导出就是将List转化为Excel(listToExcel) 导入就是将Excel转化为List(excelToList) 导入导出中会出现各种各样的问题,比如:数据源为空