PHPExcel 表格导入数据代码解析(二)
前面大概讲了phpexcel用表格导入数据到数据库中的教程,今天会详细剖析函数代码,话不多说,先上代码:
public function upload() {
ini_set('memory_limit','1024M');
//设定一个脚本所能够申请到的最大内存字节数,这有利于写的不好的脚本消耗服务器上的可用内存
if (!empty($_FILES)) {
$config = array(
'exts' => array('xlsx','xls'),
'maxSize' => 3145728000,
'rootPath' =>"./Public/",
'savePath' => 'Uploads/',
'subName' => array('date','Ymd'),
);//设置相关参数
$upload = new ThinkUpload($config);//定义tp的Upload对象
if (!$info = $upload->upload()) { //$upload调用upload()函数并赋值给$info
$this->error($upload->getError());
}
vendor("PHPExcel.PHPExcel");//thinkphp3.2.3中使用Vendor加载第三方类库
$file_name=$upload->rootPath.$info['photo']['savepath'].$info['photo']['savename']; //文件名称
$extension = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));//判断导入表格后缀格式
if ($extension == 'xlsx') {
$objReader =PHPExcel_IOFactory::createReader('Excel2007');
//创建一个特定的读取类,读取类型为‘Excel2007’
$objPHPExcel =$objReader->load($file_name, $encode = 'utf-8');//读取文件$file_name
} else if ($extension == 'xls'){
$objReader =PHPExcel_IOFactory::createReader('Excel5');
$objPHPExcel =$objReader->load($file_name, $encode = 'utf-8');
}
$sheet =$objPHPExcel->getSheet(0);//getSheet()获取表集合
$highestRow = $sheet->getHighestRow();//取得总行数
$highestColumn =$sheet->getHighestColumn(); //取得总列数
D('pro_info')->execute('truncate table pro_info');
for ($i = 2; $i <= $highestRow; $i++) {
$data['pId'] =$objPHPExcel->getActiveSheet()->getCell("A" . $i)->getValue();
$data['pName'] =$objPHPExcel->getActiveSheet()->getCell("B" .$i)->getValue();
$data['pPrice'] =$objPHPExcel->getActiveSheet()->getCell("C" .$i)->getValue();
$data['pCount'] = $objPHPExcel->getActiveSheet()->getCell("D". $i)->getValue();
D('pro_info')->add($data);
}
$this->success('导入成功!');
} else {
$this->error("请选择上传的文件");
}
}
主要是流程图如下:
在上面代码上基本上都有注释,看不懂的没关系,下面我就几个点聊聊好了:
$upload = new ThinkUpload($config);//实例化上传类
TP文件上传:
属性 |
描述 |
---|---|
maxSize |
文件上传的最大文件大小(以字节为单位),0为不限大小 |
rootPath |
文件上传保存的根路径 |
savePath |
文件上传的保存路径(相对于根路径) |
saveName |
上传文件的保存规则,支持数组和字符串方式定义 |
saveExt |
上传文件的保存后缀,不设置的话使用原文件后缀 |
replace |
存在同名文件是否是覆盖,默认为false |
exts |
允许上传的文件后缀(留空为不限制),使用数组或者逗号分隔的字符串设置,默认为空 |
mimes |
允许上传的文件类型(留空为不限制),使用数组或者逗号分隔的字符串设置,默认为空 |
autoSub |
自动使用子目录保存上传文件 默认为true |
subName |
子目录创建方式,采用数组或者字符串方式定义 |
hash |
是否生成文件的hash编码 默认为true |
callback |
检测文件是否存在回调,如果存在返回文件信息数组 |
设置好上传的参数后,就可以调用ThinkUpload
类的upload方法进行附件上传,如果失败,返回false,并且用getError方法获取错误提示信息;如果上传成功,就返回成功上传的文件信息数组。
$info = $upload->upload();
-
if(!$info)
{// 上传错误提示错误信息
$this->error($upload->getError());
}else{// 上传成功 获取上传文件信息
-
foreach($info as $file){
echo $file['savepath'].$file['savename'];
-
}
-
}
属性 |
描述 |
---|---|
key |
附件上传的表单名称 |
savepath |
上传文件的保存路径 |
name |
上传文件的原始名称 |
savename |
上传文件的保存名称 |
size |
上传文件的大小 |
type |
上传文件的MIME类型 |
ext |
上传文件的后缀类型 |
md5 |
上传文件的md5哈希验证字符串 仅当hash设置开启后有效 |
sha1 |
上传文件的sha1哈希验证字符串 仅当hash设置开启后有效 |
文件上传成功后,就可以使用这些文件信息来进行其他的数据操作,例如保存到当前数据表或者单独的附件数据表
$model = M('Photo');
// 取得成功上传的文件信息
$info = $upload->upload();
// 保存当前数据对象
-
$data['photo']
= $info[0]['savename'];
-
$data['create_time']
= NOW_TIME;
-
$model->add($data);
PHPExcel_IOFactory 读取文件:
vendor("PHPExcel.PHPExcel");
$objReader =PHPExcel_IOFactory::createReader('Excel2007');
//创建一个特定的读取类,读取类型为‘Excel2007’
$objPHPExcel =$objReader->load($file_name, $encode = 'utf-8');
//读取文件$file_name
1.使用 PHPExcel_IOFactory 读取文件
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
2.使用一个特定的读取类,读取文件
$objReader = new PHPExcel_Reader_Excel5();
$objPHPExcel = $objReader->load($inputFileName);
3.使用 PHPExcel_IOFactory 创建一个特定的读取类
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($inputFileName);
读取类型有:
$inputFileType = 'Excel5';
$inputFileType = 'Excel2007';
$inputFileType = 'Excel2003XML';
$inputFileType = 'OOCalc';
$inputFileType = 'SYLK';
$inputFileType = 'Gnumeric';
$inputFileType = 'CSV';
4.使用 PHPExcel_IOFactory 来鉴别文件应该使用哪一个读取类
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($inputFileName);
获取表集合:
$sheet =$objPHPExcel->getSheet(0);//getSheet()获取表集合
$highestRow = $sheet->getHighestRow();//取得总行数
$highestColumn =$sheet->getHighestColumn(); //取得总列数
循环读取数据:
- 如何打击“假货、高仿”类小程序
- centos 6x系统下源码安装mysql操作记录
- 【3】利用Word模板生成文档的总结
- 【2】快速代码集的由来及概览
- silverlight数据绑定模式TwoWay,OneWay,OneTime的研究
- Silverlight数据绑定/IValueConverter学习笔记
- silverlight:DeepZoom版的图片局部放大效果
- Linq之ToDictionary<TSource, TKey, TElement>的写法
- vs.net的调试小技巧之#define debug(适合新手)
- byte[]数组下标的最大值
- silverlight图片局部放大效果
- 局域网与互联网环境下MTU的快速确定方法
- 【4】通过简化的正则表达式处理字符串
- silverlight中的socket编程注意事项
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- python函数——Keras分词器Tokenizer
- python函数——序列预处理pad_sequences()序列填充
- MapReduce工作笔记——Streaming多路输出
- nuxt.js项目入门配置篇
- 高级综合工具StratusHLS学习笔记(4)
- 论文笔记&翻译——Enhanced LSTM for Natural Language Inference(ESIM)
- Day 5:用两个栈实现队列
- C++核心准则T.42:使用模板别名简化记法并隐藏实现细节
- Python实战——ESIM 模型搭建(keras版)
- MapReduce工作笔记——Job调度参数设置
- 矩阵操作试题(C++/Python)——矩阵元素逆时针旋转90度(升级版)
- Macdown中[toc]无法生成目录解决方法
- Linux实用技巧——mkdir创建多级新目录
- C++核心准则T.43: 定义别名时,using比typedef更好
- C++核心准则T.44:使用函数模板推断类模板参数类型(如果可能)