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');
前台页面只需要执行此方法即可
thinkphp导入导出excel表单数据的更多相关文章
- C#导入导出Excel表的数据
一:C#导入导出EXCEL文件的类 代码如下: 首先将Microsoft Excel 14.0 Object Library 引用导入 using System; using System.Data; ...
- Java利用POI导入导出Excel中的数据
首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地 ...
- 使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中
using System; using System.Collections.Generic; using System.Text; using System.IO; using NPOI.SS.Us ...
- winfrom 使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中
1.通过NUGET管理器下载nopi,在引入命令空间 using System; using System.Collections.Generic; using System.Text; using ...
- c# 导入导出excel表格式
c#使用代码导入excel时,当遇到纯数字且大于15位时会出现编码混乱(表现为科学计数法),要想呈现与excel表中纯数字格式和在数据库中呈现纯数字,操作如下: 完成即可. 导出取决于导入的内容排版.
- POI导入导出excel(附工具类)
关于POI导出excel的功能我在前面的文章已经写过了,POI导出excel的三种方式 , 导出表格数据到excel并下载(HSSFWorkbook版) ,本篇文章主要是将导入导出功能进一步地封装,在 ...
- C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序
C#中缓存的使用 缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可: <%@ Outp ...
- 【ITOO 1】将List数据导出Excel表
需求描述:在课表导入的时候,首先给用户提供模板(excel),然后将用户填写好的数据读取到list集合中.再进行判空处赋值处理,以及去重处理.这篇博客,主要介绍读取excel表和导出excel表的方法 ...
- JAVA笔记-如何将百万级数据高效的导出到Excel表单
今天,一朋友问我使用JAVA有没有什么办法导出百万级的数据到Excel工作表. 当时我的第一个念头就是这真的是一个好疯狂的念头.然后就想假如真的有这样类似的需求,我自己应该怎么做呢? ps: 首先科普 ...
随机推荐
- EntityFramework错误:Unable to update the EntitySet because it has a DefiningQuery
错误截图: 解决方法: 在所操作的数据库表中添加一个主键即可解决此问题
- Markdown与标记语言
Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷惑,Markdown 的语法十分简单.常用的标记符号也不 ...
- .Net 高效开发之不可错过的实用工具
Visual Studio Visual Studio Productivity Power tool: VS 专业版的效率工具. Web Essentials: 提高开发效率,能够有效的帮助开发人员 ...
- 高端大气上档次的fullPage.js
简介 4月15日,网易邮箱升级到6.0版本,并发布了介绍页面,页面采用了时下非常流行的"全屏"效果,文字.图片再加上 CSS3 动画,让用户非常直观.清晰的了解6.0版本的功能及特 ...
- 耗电—Android
Android应用耗电分析与优化 http://sanwen8.cn/p/297Ut7b.html http://www.cnblogs.com/kobe8/p/3819305.html 有效控制An ...
- centos 7.0 安装nginx 1.9.10
可以参考以前安装成功的案例 centos 7.0 nginx 1.7.9成功安装过程 官网下载 http://nginx.org/en/download.html nginx下载位置 /usr/loc ...
- 利用gcc自带的功能-fstack-protector检测栈溢出及其实现
最近又遇到了一个崩溃,栈回溯非常怪异. /lib/i386-linux-gnu/libc.so.(gsignal+0x4f) [0xb2b751df] /lib/i386-linux-gnu/libc ...
- Quick Cocos (2.2.5plus)CoinFlip解析(MenuScene display AdBar二次封装)
转载自:http://cn.cocos2d-x.org/tutorial/show?id=1621 从Samples中找到CoinFlip文件夹,复制其中的 res 和 script 文件夹覆盖新建工 ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- java从基础知识(十)java多线程(上)
线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点 ...