在做项目的时候,很多时候会遇到需要将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导入!的更多相关文章

  1. Thinkphp excel导入导出

    挺有用处的存一下 1.去PHPexcel 官网下载最新的程序下来 ☞   飞机在这里 我用的是1.78 放在vender 里面 在  function.php 写两个方法 路径当然是这个 ☞Commo ...

  2. 使用thinkphp框架实现Excel导入数据库

    之前讲过php实现Excel导出数据库的随笔,链接:https://www.cnblogs.com/nuanai/p/6727711.html 之前的项目用到较多的就是Excel导出,现在用到了Exc ...

  3. TP5.0 excel 导入导出

    引第三方的phpexcel类库放到 ThinkPHP\Library\Vendor\demo下,自己建的文件夹demo 再将Excel.class放到ThinkPHP\Library\Org\clas ...

  4. C# Excel导入、导出【源码下载】

    本篇主要介绍C#的Excel导入.导出. 目录 1. 介绍:描述第三方类库NPOI以及Excel结构 2. Excel导入:介绍C#如何调用NPOI进行Excel导入,包含:流程图.NOPI以及C#代 ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入

    系列目录 前言 上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(6 ...

  6. 解析大型.NET ERP系统 设计通用Microsoft Excel导入功能

    做企业管理软件很难避免与Microsoft Excel打交道,常常是软件做好了,客户要求说再做一个Excel导入功能.导入Excel数据的功能的难度不大,从Excel列数据栏位的取值,验证值,再导入到 ...

  7. (转)高效的将excel导入sqlserver中

    大部分人都知道用oledb来读取数据到dataset,但是读取之后怎么处理dataset就千奇百怪了.很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,System.Data.SqlClie ...

  8. 安全的将excel导入sqlite3的解决方案

    最近在做一个小项目时,需要把一个excel中的数据保存到sqlite3数据库中以备后用,表中有字符也有数字,要用到特定的数据类型方便后续使用,参照网上的方法,将excel文件转换为csv文件后,在导入 ...

  9. 利用反射实现通用的excel导入导出

    如果一个项目中存在多种信息的导入导出,为了简化代码,就需要用反射实现通用的excel导入导出 实例代码如下: 1.创建一个 Book类,并编写set和get方法 package com.bean; p ...

  10. C# EXCEL导入 混合列文字为空,找不到可安装的 ISAM的解决办法

    C# EXCEL导入 混合列文字为空,找不到可安装的 ISAM的解决办法 使用C#导入 Excel数据到 DataTable,如果连接串中只写 Excel 8.0,则正常的字符列,数值列都没有问题,但 ...

随机推荐

  1. html 内联函数宽度设置

    width and/or height in tables are not standard anymore; as Ianzz says, they are depreciated. Instead ...

  2. 【hadoop】 hadoop 单机伪分布式安装

    准备: 虚拟机(CentOS 6.9) JDK1.8 hadoop2.8.0 一.JDK安装及配置 rpm -ivh jdkxxxx 安装 配置环境变量 vim /etc/profile export ...

  3. Java单例模式的应用

    单例模式用于保证在程序的运行期间某个类有且仅有一个实例.其优势在于尽可能解决系统资源.通过修改构造方法的访问权限就可以实现单例模式. 代码如下: public class Emperor { priv ...

  4. Java位运算加密

    创建一个类,通过位运算中的”^"异或运算符把字符串与一个指定的值进行异或运算,从而改变字符串每个字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,再与那个指定的 ...

  5. 有人在贴吧问phpmyadmin如何设置插入的时候默认插入1条记录

    在新版phpmyadmin中(我的版本是3.5.1) 插入的时候会提示插入两条,能够方便操作,让你多录入几条数据,如图 然而有人不想要这个界面默认插入两条,如何改为1条或者其他呢? 我审查了这个元素标 ...

  6. RF-For循环使用

    场景1:

  7. 3dmax osg格式导出插件 osgExp OpenSceneGraph Max Exporter

    https://sourceforge.net/projects/osgmaxexp/files/OpenSceneGraph%20Max%20Exporter/

  8. 用c语言如何在数字前自动补0

    一: #include <stdio.h>int main(){ long a=3,b=4,c=15; printf("......."a,b,c);return 0; ...

  9. GDI+ gif文件的显示和格式转换

    GDI+ gif文件的显示和格式转换   gdi+imagedeletenulltiff GDI+ gif文件的显示和格式转换 怎么获取gif文件的每一帧,并且显示出来呢? 1.怎么用gid+显示gi ...

  10. 关于丢失或者损坏/etc/fstab文件后的一些探讨

    1.模仿,假设不小心删除了/etc/fstab文件:大家都知道,Linux系统启动的时候会读取该文件来挂载分区,如果缺失该文件,系统一般不能正常启动. 2.采用reboot命令或者alt+ctrl+d ...