2019独角兽企业重金招聘Python工程师标准>>>

最近做一个从从excel将数据导入到mysql中的程序,excel的文件名就是即将创建的表名。


<?php
class Excel2DbAction extends BaseAction
{protected $objReader;protected $PHPExcel;protected $Excel;protected $Doc;protected static $total = 0;

/*** 导入PHPExcel类库,并初始化* @access public*/public function __construct(){vendor('PHPExcel.PHPExcel.IOFactory');$this->objReader = PHPExcel_IOFactory::createReader('Excel2007');$this->objReader->setReadDataOnly(TRUE);}

/*** 扫描目录,扫描xlsx文件,逐一读取,写进MySQL* @access public*/public function index(){$dir = APP_PATH.'Data';if(!is_dir($dir)){exit('目录不存在');}//扫描并遍历文件$fileList = scandir($dir);foreach ($fileList as $v){if(pathinfo($v, PATHINFO_EXTENSION) == 'xlsx'){self::$total ++;$temp[self::$total] = $dir.'/'.$v;}}

$num = (!empty($_GET['num'])) ? ($_GET['num']) : 1;while ($num <= self::$total){//读取excel$this->readFile($temp[$num]);

//导表操作$this->createTable($this->Doc['tableName'],  $this->Doc['fields']);$this->createData($this->Doc['tableName'], $this->Doc['fields'], $this->Doc['content']);

$num++;//判断是否跳转到下一个文件($num > self::$total) ? exit('Excel to MySQL:ok') : $this->redirect('Excel2Db/index',array('num'=>$num),3);}}

/*** 执行解析xlsx文件* @access public* @param string $file 文件* @return mix 返回解析结果*/public function readFile($file){$this->PHPExcel = $this->objReader->load($file);$this->PHPExcel->setActiveSheetIndex(0);$this->Excel = $this->PHPExcel->getActiveSheet();$tmpContent = $this->getContent();for($i=2,$j=0;$i<=count($tmpContent);$i++,$j++){$content[$j] = $tmpContent[$i];}$filename = pathinfo($file, PATHINFO_FILENAME);$doc = array('tableName'           =>         $filename,'rows'                =>         $this->getRows(),'colums'              =>         $this->getColumIndex(),'fields'              =>         $tmpContent['1'],'content'             =>         $content,);$this->Doc = $doc;}

/*** 取得Excel的行数* @access public* @return string*/public function getRows(){$rows = $this->Excel->getHighestRow();return $rows;}

/*** 取得Excel的列数,字母模式* @access public* @return string*/public function getColums(){$colums = $this->Excel->getHighestColumn();return $colums;}

/*** 取得Excel的列数,数字模式* @access public* @return int*/public function getColumIndex(){$columIndex = PHPExcel_Cell::columnIndexFromString($this->getColums());return $columIndex;}

/*** 取得Excel的详细内容* @access public* @return array*/public function getContent(){$content = array();for ($row = 1; $row <= $this->getRows(); $row++){for ($col = 0; $col < $this->getColumIndex(); $col++){$content[$row][$col] = $this->Excel->getCellByColumnAndRow($col, $row)->getCalculatedValue();}}return $content;}

/*** 创建数据表,传入表名和字段信息自动创建一个表* @param string $tableName* @param type $fields* @return boolean*/private function createTable($tableName,$fields){$prefix = C('DB_PREFIX');$tableName = $prefix.$tableName;$sql = "CREATE TABLE IF NOT EXISTS `{$tableName}`(\n\r`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,";foreach ($fields as $v){$sql .= "\n\r{$v},";}$sql .= "\r\nPRIMARY KEY (`id`)";$sql .= "\n\r) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;";$db = new Model();if($db->execute($sql)){echo "数据表{$tableName}创建成功<br />";return TRUE;}else{echo "数据表{$tableName}已经创建<br />";$truncate = "TRUNCATE TABLE `{$tableName}`";$db->execute($truncate);echo "数据表{$tableName}已经清空<br />";}}

/*** 导入数据到对应的表中* @param type $tableName* @param type $fields* @param type $content* @return boolean*/private function createData($tableName,$fields,$content){$table = M($tableName);$reg = '/`.*`/';foreach ($fields as $k){preg_match($reg, $k, $matches);$field[] = str_replace('`', '', $matches[0]);           }foreach ($content as $v){$data[] = array_combine($field, $v);}if($table->addAll($data)){echo "数据导入{$tableName}成功<br />";return TRUE;}else{echo "数据导入{$tableName}失败",$table->getDbError().'<br />';}}

/** 析构方法,清空计数器*/public function __destruct() {self::$total = NULL;}

}

转载于:https://my.oschina.net/niulingyun/blog/133382

php读取Excel xlsx 2007+并导入MySQL相关推荐

  1. NET CORE读取Excel.xlsx单元格内的图片,并关联当前业务ID推送图片到指定服务器...

    NET CORE读取Excel.xlsx单元格图片的场景,一般是批量导入业务数据,例如:药品的图片,医师资格证,商品上架.商家营业资质.水果信息.用户头像等等 这里我截个图,图文并茂更好理解 特别声明 ...

  2. 将Excel表的数据导入mysql

    将Excel表的数据导入mysql 准备工作 在mysql已有表 准备工作 安装Navicat 12 for MySQL工具 工具下载地址:https://www.navicat.com.cn/pro ...

  3. C#读取Excel 2003/2007的文件(注意连接字符串)

    以读取access数据集的方式读取 For excel 2007: private DataSet GetExcelData(string str)     {         string strC ...

  4. java使用poi(XSSFWorkbook)读取excel(.xlsx)文件

    其中最主要的区别在于jxl不支持.xlsx,而poi支持.xlsx 这里介绍的使用poi方式(XSSFWorkbook),实际上poi提供了HSSFWorkbook和XSSFWorkbook两个实现类 ...

  5. python读取xlsx文件找不到_在python中打开并读取excel .xlsx文件

    我正在尝试使用python打开一个excel .xlsx文件,但我无法找到办法,我尝试使用pandas但是它想要使用一个名为NumPy的库我试图安装numpy但它仍然可以找不到. 我也尝试过使用xlr ...

  6. php 读取excel中的内容到mysql 数据库

    .................................................................................................... ...

  7. 使用pymysql将excel表格的数据导入mysql数据库(CRUD)(附代码)

    通过这个就感觉到写代码的时候逻辑有多么重要 把excel中的数据存到数据库里面 ① 所用资料链接 把excel的数据转换到数据库,使用数据库的一些语句进行操作 pymysql 的使用以及 commit ...

  8. python读取excel生成mysql建表语句_python读取excel文件并自动在mysql中建表导数据

    """ 根据excel在mysql中建表(表名为文件名,字段为csv中的header,默认所有字段为varchar,如需更改,在数据库中更改即可),并插入数据 " ...

  9. 用excel 2016连接mysql_excel导入mysql数据库方法(最新,2016年2月19日)

    网上的方法不少,能用的不多,相信以下方法是最靠谱的,值得记录. 一,先进phpmyadmin数据库管理,导出空表,表的格式为csv,然后用记事本打开,注意要统一编码,数据库是utf-8,就把csv转为 ...

  10. golang 读取excel(xlsx文件) 时间格式解析

    问题起源 最近在写一个读取xlsx文件,并解析其中数据的项目,在所有的数据都就绪之后,却遇到了时间格式获取不正确的问题 时间格式 我查询到的结果 我的代码 func main() {f, err := ...

最新文章

  1. FCOS:全卷积一阶段Anchor Free物体检测器,多种视觉任务的统一框架
  2. oracle中导入dmp数据注意事项
  3. 【2021年度训练联盟热身训练赛第二场】g2g c u l8r(python)
  4. 转:Yaf 路由协议
  5. json和对象、list互转
  6. 最近任务-2012.05.14
  7. 世道变了,面试初级Java开发会问到Arrays!!!你不会还不知道吧!
  8. 网上图书商城项目学习笔记-028编辑一级分类
  9. awk java_Linux三剑客之awk
  10. 6.表单提交,input键盘变搜索,有关自定义属性input操作
  11. 【读书笔记】JavaScript高级编程(一)
  12. 编码表概述和常见编码表
  13. 射频电路PCB的设计技巧 四大基础特性
  14. 天池大数据竞赛口碑商家客流量预测——时序预测(python-numpy-arima)
  15. python 内存不足_python内存不足
  16. 一文带你看透IP归属地
  17. 计算机房宣传标语,机房安全标语
  18. 算法到底该怎么学?算法数据结构Java编程超全干货!(ACM金牌选手分享超牛学习路径~)...
  19. php网页怎么设置背景图片大全唯美,html文档中怎么把图片作为背景?
  20. VMware Horizon 8 2209 - 虚拟桌面基础架构 (VDI) 和应用软件

热门文章

  1. paip.python错误解决4
  2. 云计算时代的DCI技术
  3. 中国工程院院士郑纬民:应鼓励从头研发先进的存储系统软件
  4. 14个阿里高管的研发管理实践和思考 | 凌云时刻
  5. c mysql 数据更新_MySQL数据更新
  6. 【优化求解】基于matlab改进的粒子群算法求解混合储能系统容量优化问题【含Matlab源码 1823期】
  7. 【缺陷检测】基于matlab GUI形态学PCB电路板缺陷检测【含Matlab源码 821期】
  8. mysql 优化器 cost评估_MySQL优化器cost计算
  9. 使用lstm实现文本生成_Spamilton:使用LSTM和Hamilton歌词生成文本
  10. datatable高效写入mysql_如何将DataTable批量写入数据库