0

0

Codeigniter(CI)结合PHPExcel类完成数据导入

php中文网

php中文网

发布时间:2016-06-20 12:33:53

|

1406人浏览过

|

来源于php中文网

原创


1. 安装PHPExcel到Codeigniter

1) 解压压缩包里的Classes文件夹中的内容到application\libraries\目录下,目录结构如下:

– application\libraries\PHPExcel.php

– application\libraries\PHPExcel (文件夹)

2)修改application\libraries\PHPExcel\IOFactory.php 文件

立即学习PHP免费学习笔记(深入)”;

– 将其类名从PHPExcel_IOFactory改为IOFactory,遵从CI类命名规则。

– 将其构造函数改为public(__construct)


2. 安装完毕,写一个导出excel的控制器(Controller)

    public function index(){


            //判断上传文件存在值

            if(!empty($_FILES)){

                $filename = $_FILES['file']['name'];//被上传文件的名称
                $filetype = $_FILES["file"]["type"];//被上传文件的类型
                $filesize = $_FILES["file"]["size"];// 被上传文件的大小,以字节计
                $filetmp = $_FILES["file"]["tmp_name"];//存储在服务器的文件的临时副本的名称
                $fileerror = $_FILES["file"]["error"];//由文件上传导致的错误代码


                //判断是否上传成功
                if($fileerror==0){
                    //判断是否是excel表格
                    if($filetype=="application/vnd.ms-excel" || $filetype=="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"){

                        /*设置保存路径*/
                        $filePath = 'uploads/excel/';
                        $str = "";   
                          
                        /*加载PHPExcel*/
                        $this->load->library('PHPExcel.php');
                        $this->load->library('PHPExcel/IOFactory.php');
                        //$this->load->library('PHPExcel/Reader/Excel5.php');

                         //注意设置时区
                        $time=date("YmdHis");//去当前上传的时间
                        //获取上传文件的扩展名
                        $extend=strrchr ($filename,'.');
                        //上传后的文件名
                        $name=$time.$extend;
                        //上传后的文件名地址
                        $uploadfile=$filePath.$name;//上传后的文件名地址
                        
                        //move_uploaded_file() 函数将上传的文件移动到新位置。若成功,则返回 true,否则返回 false。
                        $result=move_uploaded_file($filetmp,$uploadfile);//假如上传到当前目录下
                        


                        //echo $result;
                        //如果上传文件成功,就执行导入excel操作

                       if($result){

                               $inputFileType = IOFactory::identify($uploadfile);//确定输入文件的格式
                            $objReader = IOFactory::createReader($inputFileType);//穿件相对应的阅读器
                            $objPHPExcel = $objReader->load($uploadfile);          //加载要读取的文件
                            $sheet = $objPHPExcel->getSheet();                    //得到当前活动sheet
                            $highestRow = $sheet->getHighestRow();           //取得总行数
                            $highestColumn = $sheet->getHighestColumn(); //取得总列数
                           // print_r($highestRow);
                            //print_r($highestColumn);
                            /* 第一种方法

                            //循环读取excel文件,读取一条,插入一条
                            for($j=1;$j                             {
                                for($k='A';$k                                 {
                                    //
                                    //这种方法简单,但有不妥,以'\\'合并为数组,再分割\\为字段值插入到数据库
                                    //实测在excel中,如果某单元格的值包含了\\导入的数据会为空        
                                    //
                                    $str .=$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue().'\\';//读取单元格
                                }
                                //echo $str; die();
                                //explode:函数把字符串分割为数组。
                                $strs = explode("\\",$str);
                                print_r($strs);
                                $sql = "INSERT INTO te(`id`, `name`) VALUES (
                                '{$strs[0]}',
                                '{$strs[1]}')";
                                //die($sql);

                                if(!mysql_query($sql))
                                {
                                    return false;
                                    echo 'sql语句有误';
                                }
                                mysql_query($sql);
                                $str = "";
                            }
                            unlink($uploadfile); //删除上传的excel文件
                            $msg = "导入成功!";
                            */

                            /* 第二种方法*/
                            $objWorksheet = $objPHPExcel->getActiveSheet();
                            $highestRow = $objWorksheet->getHighestRow();
                            
                            $highestColumn = $objWorksheet->getHighestColumn();
                            $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);//总列数
                            
                            $headtitle=array();  
                            for ($row = 2;$row
                                $arr=array();
                                //注意highestColumnIndex的列数索引从0开始
                                for ($col = 0;$col

                                        $arr[$col] =$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
                                }
                                

                                // $sql = "INSERT INTO admins(`account`, `pwd`, `username`, `power`, `tel`,`sex`,`work_numjob`,`job`,`sector`) VALUES (
                                // '{$strs[0]}',
                                // '{$strs[1]}',
                                // '{$strs[2]}',
                                // '{$strs[3]}',
                                // '{$strs[4]}',
                                // '{$strs[5]}',
                                // '{$strs[6]}',
                                // '{$strs[7]}',
                                // '{$strs[8]}',)";

                                $data=array(
                                            'account'=>$arr['0'],
                                            'pwd'=>$arr['1'],
                                            'username'=>$arr['2'],
                                            'power'=>$arr['3'],
                                            'tel'=>$arr['4'],
                                            'sex'=>$arr['5'],
                                            'work_num'=>$arr['6'],
                                            'job'=>$arr['7'],
                                            'sector'=>$arr['8'],

                                        );

                                $this->db->insert("admins",$data);

                            }
                            unlink($uploadfile);
                            show_msg("导入成功",site_url("链接地址"));//跳转地址
                             //删除上传的excel文件

                    }

                    }else{

                        show_msg("上传文件非cvs格式,请重新上传");
                    }


                }else{

                    switch ($fileerror){
                            case 1:
                             show_msg("上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值.");
                              break;
                            case 2:
                              show_msg("上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值");
                              break;
                            case 3:
                             show_msg("文件只有部分被上传");
                              break;
                            case 4:
                                show_msg("没有文件被上传");
                              break;
                    }


                }

            }

    }

注意事项:阅读方式excel方式不能指定死,让他自动识别文件来自动读取。

3. 读取excel详细资料


1.      导入一个Excel最简单的方法是使用PHPExel的IO Factory,调用PHPExcel_IOFactory类的静态法load,它可以自动识别文档格式,包括Excel2007、 Excel2003XML、OOCalcSYLK、Gnumeric、CSV。返回一个PHPExcel的实例。

 

//加载工厂类

include'PHPExcel/IOFactory.php';
//要读取的xls文件路径

$inputFileName = './sampleData/example1.xls';

/** 用PHPExcel_IOFactory的load方法得到excel操作对象  **/
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);

//得到当前活动表格,调用toArray方法,得到表格的二维数组

$sheetData =$objPHPExcel->getActiveSheet()->toArray(null,true,true,true);

var_dump($sheetData);

 

1.  创建一个ExcelReader去加载一个Excel文档

如果你知道这个Excel文档的格式,可以建立一个相应的Reader去加载要读取的Excel文档。但是如果你加载了错误的文档类型,可会产生不可预知的错误。

 

 

$inputFileName = './sampleData/example1.xls';

/** Create a new Excel5 Reader  **/
$objReader = new PHPExcel_Reader_Excel5();
//    $objReader = new PHPExcel_Reader_Excel2007();
//    $objReader = new PHPExcel_Reader_Excel2003XML();
//    $objReader = new PHPExcel_Reader_OOCalc();
//    $objReader = new PHPExcel_Reader_SYLK();
//    $objReader = new PHPExcel_Reader_Gnumeric();
//    $objReader = new PHPExcel_Reader_CSV();
/** Load $inputFileName to a PHPExcel Object  **/
$objPHPExcel = $objReader->load($inputFileName);

//得到当前活动sheet

$curSheet =$objPHPExcel->getActiveSheet();

//以二维数组形式返回该表格的数据

$sheetData = $curSheet->toArray(null,true,true,true);

var_dump($sheetData);

 

也可以用PHPExcel_IOFactory的createReader方法去得到一个Reader对象,无需知道要读取文件的格式。

 

 

$inputFileType = 'Excel5';
//    $inputFileType = 'Excel2007';
//    $inputFileType = 'Excel2003XML';
//    $inputFileType = 'OOCalc';
//    $inputFileType = 'SYLK';
//    $inputFileType = 'Gnumeric';
//    $inputFileType = 'CSV';
$inputFileName = './sampleData/example1.xls';

/**  Create a new Reader of the type defined in $inputFileType  **/
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
/**  Load $inputFileName to a PHPExcel Object  **/
$objPHPExcel = $objReader->load($inputFileName);

//得到当前活动sheet

$curSheet = $objPHPExcel->getActiveSheet();

//以二维数组形式返回该表格的数据

$sheetData = $curSheet->toArray(null,true,true,true);

var_dump($sheetData);

如果在读取文件之前,文件格式未知,你可以通过IOFactory 的 identify()方法得到文件类型,然后通过createReader()方法去穿件阅读器。

$inputFileName = './sampleData/example1.xls';

/**  确定输入文件的格式  **/
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
/** 穿件相对应的阅读器  **/
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
/**  加载要读取的文件  **/
$objPHPExcel = $objReader->load($inputFileName);

2.  设置Excel的读取选项

在使用load()方法加载文件之前,可以设置读取选项来控制load的行为.

2.1.ReadingOnly Data from a Spreadsheet File

setReadDataOnly()方法,配置阅读器不关注表格数据的数据类型,都以string格式返回


$inputFileType = 'Excel5';
$inputFileName = './sampleData/example1.xls';

/**  Create a new Reader of the type defined in $inputFileType  **/
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
/**  配置单元格数据都以字符串返回  **/
$objReader->setReadDataOnly(true);
/**  Load $inputFileName to a PHPExcel Object  **/
$objPHPExcel = $objReader->load($inputFileName);

$sheetData =$objPHPExcel->getActiveSheet()->toArray(null,true,true,true);

var_dump($sheetData);


详细资料:http://blog.csdn.net/andy1219111/article/details/7673796;



热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

67

2026.02.06

java多线程方法汇总
java多线程方法汇总

本专题整合了java多线程面试题、实现函数、执行并发相关内容,阅读专题下面的文章了解更多详细内容。

32

2026.02.06

1688阿里巴巴货源平台入口与批发采购指南
1688阿里巴巴货源平台入口与批发采购指南

本专题整理了1688阿里巴巴批发进货平台的最新入口地址与在线采购指南,帮助用户快速找到官方网站入口,了解如何进行批发采购、货源选择以及厂家直销等功能,提升采购效率与平台使用体验。

489

2026.02.06

快手网页版入口与电脑端使用指南 快手官方短视频观看入口
快手网页版入口与电脑端使用指南 快手官方短视频观看入口

本专题汇总了快手网页版的最新入口地址和电脑版使用方法,详细提供快手官网直接访问链接、网页端操作教程,以及如何无需下载安装直接观看短视频的方式,帮助用户轻松浏览和观看快手短视频内容。

265

2026.02.06

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

18

2026.02.06

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

29

2026.02.06

JavaScript 异步编程与事件驱动架构
JavaScript 异步编程与事件驱动架构

本专题深入讲解 JavaScript 异步编程与事件驱动架构,涵盖 Promise、async/await、事件循环机制、回调函数、任务队列与微任务队列、以及如何设计高效的异步应用架构。通过多个实际示例,帮助开发者掌握 如何处理复杂异步操作,并利用事件驱动设计模式构建高效、响应式应用。

14

2026.02.06

java连接字符串方法汇总
java连接字符串方法汇总

本专题整合了java连接字符串教程合集,阅读专题下面的文章了解更多详细操作。

69

2026.02.05

java中fail含义
java中fail含义

本专题整合了java中fail的含义、作用相关内容,阅读专题下面的文章了解更多详细内容。

32

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号