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,则正常的字符列,数值列都没有问题,但 ...
随机推荐
- sql server 2005 怎么看是不是企业版
已经安装了SQL server 2005 怎么确定它是企业版 还是标准版??? 执行sql:SELECT @@VERSION在结果里看,比如我这里是(里面有Enterprise Edition,表示企 ...
- Spring MVC手札
本文用于记录使用Spring MVC中的零散手札 1.在普通java类中获取HttpServletRequest对象 在web.xml的listener节点加入 <listener> & ...
- 怎么解决BarTender因为未检测到IIS安装失败的问题
个别小伙伴在安装BarTender条码标签设计软件的时候,遇到“未检测到IIS,无法安装BarTender Web Print Server配套程序”导致安装失败的问题,本文小编给大家分享解决BarT ...
- 怎么用ABBYY在线浏览PDF文件
ABBYY FineReader 让您可以从在线存储服务中打开图像或 PDF 文件,并将已识别文本保存至在线存储服务中,如 Dropbox.SkyDrive 或 Google Drive 等.通过在 ...
- QT QTransform与QMatrix 有啥区别?
刚开始学习QT,我使用的是QT5.12进行开发,要不时地查阅QT的官方帮助文档~ 仔细阅读QT官方帮助QTransform类以及QMatrix类,发现两个类的作用描述一模一样(“The QTransf ...
- symfony分页实现方法
1.symfony分页是要用到组件的,所以这里使用KnpPaginatorBundle实现翻页 2. 用composer下载 在命令行中: composer require "knplab ...
- gcc和g++头文件和库路径的寻找和添加
对所有用户有效修改/etc/profile文件 对个人有效则修改~/.bashrc文件 #在PATH中找到可执行文件程序的路径. export PATH =$PATH:$HOME/bin (可一次指定 ...
- python--内置函数---13
原创博文,转载请标明出处--周学伟 http://www.cnblogs.com/zxouxuewei/ Python 内置函数 内置函数 abs() divmod() input() ...
- MySQL数据库辅助类
/** *创建人:CalvinR *说明:数据库辅助类 **/ namespace Study.Utilities.MySql_Connect { /// <summary> /// My ...
- Go之并发处理(售票问题)
老问题:模拟一个售票窗口进行售票 先定义类型Ticket(车票)和Conductor(销售员)--偷懒了,把售票和产票都交给Conductor了 package util import () //-- ...