ci框架读取上传的excel文件数据
原文链接: https://blog.csdn.net/qq_38148394/article/details/87921373
此功能实现使用到PHPExcel类库,PHPExcel是一个PHP类库,用来帮助我们简单、高效实现从Excel读取Excel的数据和导出数据到Excel。也是我们日常开发中,经常会遇到的使用场景。
(一) PHPExcel下载
类库下载地址:https://github.com/PHPOffice/PHPExcel
(二) PHPExcel引入到CI框架
1) 解压压缩包里的Classes文件夹中的内容到application\libraries\目录下,目录结构如下:
-- application\libraries\PHPExcel.php
-- application\libraries\PHPExcel (文件夹)
2)修改application\libraries\PHPExcel\IOFactory.php 文件
-- 将其类名从PHPExcel_IOFactory改为IOFactory,遵从CI类命名规则。
-- 将其构造函数改为public
(三) 具体代码实现
1) excel文件的接收及其验证
说明:detectUploadFileMIME()方法 是判断上传文件是否为excel文件,此方法更为安全
参考链接:http://www.jquerycn.cn/a_24882
if($_FILES['file']['error']){
switch($_FILES['file']['error']){
case 1:
$this->finish('文件大小超出了服务器的空间大小',1);
die;
break;
case 2:
$this->finish('要上传的文件大小超出浏览器限制',1);
die;
break;
case 3:
$this->finish('文件仅部分被上传',1);
die;
break;
case 4:
$this->finish('没有找到要上传的文件',1);
die;
break;
case 5:
$this->finish('服务器临时问价丢失',1);
die;
break;
case 6:
$this->finish('文件写入到临时文件夹出错',1);
die;
break;
default:
$this->finish('文件上传未知错误',1);
}
die;
}
//接收的excel信息
$info = pathinfo($_FILES['file']['name']);
$file = $_FILES['file'];
//验证excel文件类型
$res = $this->detectUploadFileMIME($file);
if($res){
$tmp_name = $info['filename'];
$new_name = $tmp_name . '-' . time() .'.'. $info['extension'];
$root_path = dirname(BASEPATH); $new_dir = $root_path . '/data/excel/';
if (!file_exists($new_dir)) {
mkdir($new_dir, 0777, true);
}
$new_path = $new_dir . $new_name;
$new_path = str_replace('\\', DIRECTORY_SEPARATOR, $new_path);
$new_path = str_replace('/', DIRECTORY_SEPARATOR, $new_path);
$res = move_uploaded_file($_FILES['file']['tmp_name'], $new_path);
if (!$res) {
$this->finish('上传失败', 2);
die;
}
2) 读取excel文件数据
if (!file_exists($new_path)) {
exit("文件".$new_path."不存在");
}
/*加载PHPExcel*/
$this->load->library('PHPExcel.php');
$this->load->library('PHPExcel/IOFactory.php');
// $this->load->library('PHPExcel/Reader/Excel5.php');
$objPHPExcel = new PHPExcel();
$objProps = $objPHPExcel->getProperties(); //设置excel格式
if($info['extension'] =='xlsx' ){
$objReader = IOFactory::createReader('excel2007');
}else{
$objReader = IOFactory::createReader('Excel5');
}
//载入excel文件
$objPHPExcel = $objReader->load($new_path);
//读取第一张表
$sheet = $objPHPExcel->getSheet(0);
//获取总行数
$highestRow = $sheet->getHighestRow();
//获取总列数
$highestColumn = $sheet->getHighestColumn();
$excel_data = array();
for ($col='A';$col<=$highestColumn;$col++) {
for ($row=2;$row<=$highestRow;$row++) {
$excel_data[$row-2][]=$sheet->getCell($col.$row)->getValue();
}
}
print_r($excel_data);die;
我上传的excel文件内容为
打印出来的数据为
就这样完成la
补充detectUploadFileMIME()方法
/**
* 检测是否为excel文件程序
*
*
*/
public function detectUploadFileMIME($file) {
// 1.through the file extension judgement 03 or 07
$flag = 0;
$file_array = explode ( ".", $file ["name"] );
$file_extension = strtolower ( array_pop ( $file_array ) ); // 2.through the binary content to detect the file
switch ($file_extension) {
case "xls" :
// 2003 excel
$fh = fopen ( $file ["tmp_name"], "rb" );
$bin = fread ( $fh, 8 );
fclose ( $fh );
$strinfo = @unpack ( "C8chars", $bin );
$typecode = "";
foreach ( $strinfo as $num ) {
$typecode .= dechex ( $num );
}
if ($typecode == "d0cf11e0a1b11ae1") {
$flag = 1;
}
break;
case "xlsx" :
// 2007 excel
$fh = fopen ( $file ["tmp_name"], "rb" );
$bin = fread ( $fh, 4 );
fclose ( $fh );
$strinfo = @unpack ( "C4chars", $bin );
$typecode = "";
foreach ( $strinfo as $num ) {
$typecode .= dechex ( $num );
}
// echo $typecode;
if ($typecode == "504b34") {
$flag = 1;
}
break;
} // 3.return the flag
return $flag;
}
ok,不谢( ̄_, ̄ )
更新一下,最近听说phpexcel已经停止维护了,所以可以用phpspreadsheet了
还没有尝试,先留个链接 https://blog.csdn.net/DestinyLordC/article/details/84071456
ci框架读取上传的excel文件数据的更多相关文章
- java 解析上传的Excel文件
java poi解析上传的Excel文件 package com.zhl.push.Utils; /** * @Author TAO * @ClassName ExcelData * @Descrip ...
- 利用django如何解析用户上传的excel文件
https://www.jb51.net/article/119452.htm 前言 我们在工作中的时候,会有这种需求:用户上传一个格式固定excel表格到网站上,然后程序负债解析内容并进行处理.我最 ...
- .NET 客户端上传本地excel文件到服务器上,并在客户端显示
// 上传按钮 protected void btnUp_Click(object sender, EventArgs e) { bool b = Upload(fuExcel); // 上传exce ...
- 前端js webuploader上传(导入)excel文件
项目开发中用到导入(上传)Excel文件 我使用的是百度的webuploader: 1:下载:http://fex.baidu.com/webuploader/(官方下载/示例) 2:使用Web Up ...
- springMVC从上传的Excel文件中读取数据
示例:导入客户文件(Excle文件) 一.编辑customer.xlsx 二.在spring的xml文件设置上传文件大小 <!-- 上传文件拦截,设置最大上传文件大小 10M=10*1024*1 ...
- 使用phpexcel上传下载excel文件
1. 下载 <?php /** * Created by lonm.shi. * Date: 2012-02-09 * Time: 下午4:54 * To change this templat ...
- Apache POI 一键上传(导入excel文件到数据库)
import cn.XXXX.bos.utils.PinYin4jUtils; import org.apache.commons.lang3.StringUtils; // HSSF:操作07版本之 ...
- c# 用OpenXmL读取.xlsx格式的Excel文件 返回DataTable
1.须要引用的dll : DocumentFormat.OpenXml.dll ---须要安装一下OpenXml再引用 WindowsBase ---直接在项目里加入引用 2.方法: /// & ...
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
随机推荐
- Python数据分析:Numpy学习笔记
Numpy学习笔记 ndarray多维数组 创建 import numpy as np np.array([1,2,3,4]) np.array([1,2,3,4,],[5,6,7,8]) np.ze ...
- c++继承子类构造函数问题
c++中子类在继承基类的时候需要在构造函数中初始化变量.如果基类没有构造函数或者只有不带参数的构造函数,那么子类中的构造函数就不需要调用基类的构造函数了. 个人总结了两点子类中构造函数必须调用父类的构 ...
- libpng warning: iCCP: known incorrect sRGB profile告警处理
在 qt中加载某些 png图片会出现:libpng warning: iCCP: known incorrect sRGB profile 告警信息. 虽然没什么影响,但是总看到这个警告非常的不舒 ...
- Rhel7.4系统部署cobbler
cobbler安装 一.系统信息: [root@openstack ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server releas ...
- UVA 1393 Highways,UVA 12075 Counting Triangles —— (组合数,dp)
先看第一题,有n*m个点,求在这些点中,有多少条直线,经过了至少两点,且不是水平的也不是竖直的. 分析:由于对称性,我们只要求一个方向的线即可.该题分成两个过程,第一个过程是求出n*m的矩形中,dp[ ...
- flask 第九篇 蓝图 Blueprint
蓝图,听起来就是一个很宏伟的东西 在Flask中的蓝图 blueprint 也是非常宏伟的 它的作用就是将 功能 与 主服务 分开怎么理解呢? 比如说,你有一个客户管理系统,最开始的时候,只有一个查看 ...
- Spring Boot ERROR StatusLogger No Log4j 2 configuration file found
1. 问题描述 项目之前的 log4j2 配置没问题,把 pom 文件中的 spring-boot-starter-web 依赖删除后,然后启动项目就报错找不到 log4j2.yml 文件. 之前引用 ...
- Resharper错误提示方法的命名
Resharper-->Options-->C#-->Naming Style
- Android网络编程之——文件断点下载
一:关于断点下载所涉及到的知识点 1.对SQLite的增删改查(主要用来保存当前任务的一些信息) 2.HttpURLConnection的请求配置 HttpURLConnection connecti ...
- idea git操作 -- 已有项目添加到git
我们在使用git时,如果是先从git克隆项目,然后配置项目运行没问题,如果将已有项目添加到git,则项目环境还是提交不了git,还需要到克隆的仓库文件夹打开项目去操作git,如果有有类型情况可按照如下 ...