thinkphp---Excel导入!
在做项目的时候,很多时候会遇到需要将excel导入到数据库的操作:
需要用到Excel类:
下载地址:
https://gitee.com/meiyouzhanghao/excel
位置:Thinkphp / Library / Org / Util

获取Excel 方法:
//获取excel文件、读取数据方法
public function getdata($file_name,$exts='xls'){
//导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入
import("Org.Util.PHPExcel", '', '.php');
//创建PHPExcel对象,注意,不能少了\
$PHPExcel=new \PHPExcel();
import("Org.Util.PHPExcel.Reader.Excel5",'','.php');
$PHPReader=new \PHPExcel_Reader_Excel5();
//载入文件
$PHPExcel=$PHPReader->load($file_name);
//获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推
$currentSheet = $PHPExcel->getSheet(0);
//获取总列数
$allColumn = $currentSheet->getHighestColumn();
//获取总行数
$allRow = $currentSheet->getHighestRow();
$excelData = array();
//循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始
for($currentRow = 2; $currentRow <= $allRow; $currentRow ++){
//从哪列开始,A表示第一列
for($currentColumn='B';$currentColumn<=$allColumn;$currentColumn++){
//数据坐标
$address=$currentColumn.$currentRow;
//读取到的数据,保存到数组$arr中
$excelData[$currentRow][$currentColumn] = $currentSheet-> getCell($address)-> getValue();
}
}
return $excelData;
}
导入操作:
public function test(){
$filePath = "./Uploads/201111.xls";
$data = $this->getdata($filePath);
pd($data); // 得到数据 批量循环插入
$UserDB = M('user');
foreach($data as $k=>$v){
$data = array();
$data['name'] = $v['B'];
$data['age'] = $v['C'];
$data['city'] = $v['D'];
// $UserDB->add($data);
}
}
需要导入的Excle.xls

上面 $data = $this->getdata($filePath); 获取的数据:

参考:导入操作
//导入Excel方法操作
public function importExp(){
header("Content-type: text/html;charset=utf-8");//设置页面内容是html编码格式是utf-8
$m=D("Webinfo");//连接数据表
$cell=array();
//导入Excel前要上传Excel文件到项目文件夹,如果成功进行,如果失败提示错误信息
//I('post.ExcelURL','','htmlspecialchars')为获取上传控件传来的文件名称
if(I('post.ExcelURL','','htmlspecialchars')!=""){
$uploads="Uploads";
$upload = new \Think\Upload();// 实例化上传类
$upload->maxSize = 5242880 ;// 设置附件上传大小
$upload->exts = array('xlsx','xls');// 设置附件上传类型
$upload->rootPath = './'.$uploads.'/'; // 设置附件上传根目录
$upload->subName = array('date','Ym');
// 上传单个文件
$info = $upload->uploadOne($_FILES['excel']); if(!$info) {// 上传错误提示错误信息
$this->error($upload->getError());
}else{
//上传Excel成功
$exts = $info['ext'];
$file_name=$uploads.'/'.$info['savepath'].$info['savename'];
$res=$this->getdata($file_name,$exts); //循环读取每行数据,进行写入数据库
foreach ( $res as $k => $v )
{
if ($k != 0)
{
//获取数据库中的最大ID自增加1
$m->create();
$id=$m->max('ID'); if($id==0||$id==NULL||$id==""){
$id=1;
}
else
{
$id=$id+1;
}
//读取数据后赋给数组data
$data['ID']=$id;
$data ['Name'] = $v [B];
$data ['Site'] = $v [C]; $result = $m->add($data);//添加操作 }
} if($result!=0){ $this->success('网站数据导入成功'); }else{ $this->error('网站数据导入失败'); }
}
}
else
{
$this->error("请选择上传的文件");
}
}
导出 Excel:
数据结构:

具体方法:
public function testOne(){
$UserDB = M('user');
$UserList = $UserDB->select();
$filename = "用户信息表";
$header = array('id','名字','年纪','城市');
$this->getExcel($filename,$header,$UserList);//调用导出引用方法
}
具体导出方法:
//导出引用方法
public function getExcel($fileName,$headArr,$data){
//导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入
import("Org.Util.PHPExcel", '', '.php');
import("Org.Util.PHPExcel.Writer.Excel5",'','.php');
import("Org.Util.PHPExcel.IOFactory.php"); $date = date("Y_m_d",time());
$fileName .= "_{$date}.xls"; //创建PHPExcel对象,注意,不能少了\
$objPHPExcel = new \PHPExcel();
$objProps = $objPHPExcel->getProperties(); //设置表头
$key = ord("A");
//print_r($headArr);exit;
foreach($headArr as $v){
$colum = chr($key);
$objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
$objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
$key += 1;
} $column = 2;
$objActSheet = $objPHPExcel->getActiveSheet(); //print_r($data);exit;
foreach($data as $key => $rows){ //行写入
$span = ord("A");
foreach($rows as $keyName=>$value){// 列写入
$j = chr($span);
$objActSheet->setCellValue($j.$column, $value);
$span++;
}
$column++;
} $fileName = iconv("utf-8", "gb2312", $fileName); //重命名表
//$objPHPExcel->getActiveSheet()->setTitle('test');
//设置活动单指数到第一个表,所以Excel打开这是第一个表
$objPHPExcel->setActiveSheetIndex(0);
ob_end_clean();//清除缓冲区,避免乱码
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=\"$fileName\"");
header('Cache-Control: max-age=0'); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output'); //文件通过浏览器下载
exit;
}
导出方法示例:
//全部导出数据方法
public function allExp(){
//链接所导出的数据表
$xlsModel = D('Webinfo');
//“WID,WName,WebSite,Remark”为所查询的字段,“Status=2”查询条件
$goods_list = $xlsModel->relation(TRUE)->field('WID,WName,WebSite,Remark')->where('Status=2')->select();
$count=1;//导出Excel序号排列
$data = array();
//循环查询后的数据,进行每一列
foreach ($goods_list as $k=>$goods_info){
$data[$k][ID] = $count++;//序号列
$data[$k][Name] = $goods_info['Name'];//名称列
$data[$k][ebSite] = $goods_info['Site'];//地址列
$data[$k][Remark] = $goods_info['Remark'];//备注列
}
//每列表的名称
foreach ($data as $field=>$v){
if($field == 'ID'){
$headArr[]='序号';
} if($field == 'Name'){
$headArr[]='名称';
} if($field == 'Site'){
$headArr[]='网址';
} if($field == 'Remark'){
$headArr[]='备注';
}
}
$filename="网站信息数据表";//所导出的保存文件名称
$sss=$this->getExcel($filename,$headArr,$data);//调用导出引用方法
}
thinkphp---Excel导入!的更多相关文章
- Thinkphp excel导入导出
挺有用处的存一下 1.去PHPexcel 官网下载最新的程序下来 ☞ 飞机在这里 我用的是1.78 放在vender 里面 在 function.php 写两个方法 路径当然是这个 ☞Commo ...
- 使用thinkphp框架实现Excel导入数据库
之前讲过php实现Excel导出数据库的随笔,链接:https://www.cnblogs.com/nuanai/p/6727711.html 之前的项目用到较多的就是Excel导出,现在用到了Exc ...
- TP5.0 excel 导入导出
引第三方的phpexcel类库放到 ThinkPHP\Library\Vendor\demo下,自己建的文件夹demo 再将Excel.class放到ThinkPHP\Library\Org\clas ...
- C# Excel导入、导出【源码下载】
本篇主要介绍C#的Excel导入.导出. 目录 1. 介绍:描述第三方类库NPOI以及Excel结构 2. Excel导入:介绍C#如何调用NPOI进行Excel导入,包含:流程图.NOPI以及C#代 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入
系列目录 前言 上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(6 ...
- 解析大型.NET ERP系统 设计通用Microsoft Excel导入功能
做企业管理软件很难避免与Microsoft Excel打交道,常常是软件做好了,客户要求说再做一个Excel导入功能.导入Excel数据的功能的难度不大,从Excel列数据栏位的取值,验证值,再导入到 ...
- (转)高效的将excel导入sqlserver中
大部分人都知道用oledb来读取数据到dataset,但是读取之后怎么处理dataset就千奇百怪了.很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,System.Data.SqlClie ...
- 安全的将excel导入sqlite3的解决方案
最近在做一个小项目时,需要把一个excel中的数据保存到sqlite3数据库中以备后用,表中有字符也有数字,要用到特定的数据类型方便后续使用,参照网上的方法,将excel文件转换为csv文件后,在导入 ...
- 利用反射实现通用的excel导入导出
如果一个项目中存在多种信息的导入导出,为了简化代码,就需要用反射实现通用的excel导入导出 实例代码如下: 1.创建一个 Book类,并编写set和get方法 package com.bean; p ...
- C# EXCEL导入 混合列文字为空,找不到可安装的 ISAM的解决办法
C# EXCEL导入 混合列文字为空,找不到可安装的 ISAM的解决办法 使用C#导入 Excel数据到 DataTable,如果连接串中只写 Excel 8.0,则正常的字符列,数值列都没有问题,但 ...
随机推荐
- QT编译错误:invalid application of 'sizeof' to incomplete type 'Qt3DRender::QPickEvent'
执行3D常将中实体的pick操作,结果出现了编译错误:invalid application of 'sizeof' to incomplete type 'Qt3DRender::QPickEven ...
- mysql中,通过json_insert函数向json字段插入键值?json_insert函数的使用?
需求描述: 通过json_insert向json字段中插入值,在此进行实验,记录下. 操作过程: 1.查看已经有的包含json数据类型的表 mysql> select * from tab_js ...
- Java实现在复制文件时使用进度条
在对大文件操作时,可能会需要些时间,此时为用户提供进度条提示是非常常见的一项功能,这样用户就可以了解操作文件需要的时间信息.本实例为大家介绍了在复制大的文件时使用的进度条提示,需要注意的是,只有在读取 ...
- Qt打包部署程序自动查找依赖DLL工具windeployqt
qt编译好一个exe程序之后,部署到一台没有开发环境的机器上,需要一起拷贝其依赖的dll文件.这时需要一个windeployqt工具来帮忙,因为手动拷贝的话容易遗漏. https://blog.csd ...
- Git服务器的搭建和使用
一.GIT服务器的搭建 1. 安装Git yum -y install git 2. 创建git用户 adduser git 3. 创建证书登陆 收集所有客户端需要登录的用户的公钥,就是他们自己的 ...
- error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
更新的软件可以解决 TortoiseGit-preview-2.5.7.0-20180127-b2d00f8-64bit.msi和Git-2.16.2-64-bit.exe. 链接地址为: https ...
- C语言的f(open)函数(文件操作/读写)
头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: FILE * fopen(const char * path, ...
- Mac下Intellij IDea发布JavaWeb项目 详解三 (为所有Module配置Tomcat Deployment 并测试web 网页 配置Servlet)
step4 为所有项目配置Deployment 4.1 如图 4.2 [+][Artifact] 4.3 将这里列出的所有内容选中后,点[OK] 4.4 选完是这样,表示,这三个java ee 项目会 ...
- 保存对象时碰到的问题-列名 'Discriminator' 无效
今天保存对象时碰到问题: {"列名 'Discriminator' 无效.\r\n列名 'Discriminator' 无效."} 百度了一下,百度找到的一个解决: http:/ ...
- 解决Sublime Text 3中文显示乱码问题(转)
解决Sublime Text 3中文显示乱码问题(转) 1.打开Sublime Text 3,按Ctrl+-打开控制行,复制粘贴以下python代码,然后回车运行. 2. 复制并粘贴如下代码: 2.重 ...