php读取Excel xlsx 2007+并导入MySQL
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相关推荐
- NET CORE读取Excel.xlsx单元格内的图片,并关联当前业务ID推送图片到指定服务器...
NET CORE读取Excel.xlsx单元格图片的场景,一般是批量导入业务数据,例如:药品的图片,医师资格证,商品上架.商家营业资质.水果信息.用户头像等等 这里我截个图,图文并茂更好理解 特别声明 ...
- 将Excel表的数据导入mysql
将Excel表的数据导入mysql 准备工作 在mysql已有表 准备工作 安装Navicat 12 for MySQL工具 工具下载地址:https://www.navicat.com.cn/pro ...
- C#读取Excel 2003/2007的文件(注意连接字符串)
以读取access数据集的方式读取 For excel 2007: private DataSet GetExcelData(string str) { string strC ...
- java使用poi(XSSFWorkbook)读取excel(.xlsx)文件
其中最主要的区别在于jxl不支持.xlsx,而poi支持.xlsx 这里介绍的使用poi方式(XSSFWorkbook),实际上poi提供了HSSFWorkbook和XSSFWorkbook两个实现类 ...
- python读取xlsx文件找不到_在python中打开并读取excel .xlsx文件
我正在尝试使用python打开一个excel .xlsx文件,但我无法找到办法,我尝试使用pandas但是它想要使用一个名为NumPy的库我试图安装numpy但它仍然可以找不到. 我也尝试过使用xlr ...
- php 读取excel中的内容到mysql 数据库
.................................................................................................... ...
- 使用pymysql将excel表格的数据导入mysql数据库(CRUD)(附代码)
通过这个就感觉到写代码的时候逻辑有多么重要 把excel中的数据存到数据库里面 ① 所用资料链接 把excel的数据转换到数据库,使用数据库的一些语句进行操作 pymysql 的使用以及 commit ...
- python读取excel生成mysql建表语句_python读取excel文件并自动在mysql中建表导数据
""" 根据excel在mysql中建表(表名为文件名,字段为csv中的header,默认所有字段为varchar,如需更改,在数据库中更改即可),并插入数据 " ...
- 用excel 2016连接mysql_excel导入mysql数据库方法(最新,2016年2月19日)
网上的方法不少,能用的不多,相信以下方法是最靠谱的,值得记录. 一,先进phpmyadmin数据库管理,导出空表,表的格式为csv,然后用记事本打开,注意要统一编码,数据库是utf-8,就把csv转为 ...
- golang 读取excel(xlsx文件) 时间格式解析
问题起源 最近在写一个读取xlsx文件,并解析其中数据的项目,在所有的数据都就绪之后,却遇到了时间格式获取不正确的问题 时间格式 我查询到的结果 我的代码 func main() {f, err := ...
最新文章
- FCOS:全卷积一阶段Anchor Free物体检测器,多种视觉任务的统一框架
- oracle中导入dmp数据注意事项
- 【2021年度训练联盟热身训练赛第二场】g2g c u l8r(python)
- 转:Yaf 路由协议
- json和对象、list互转
- 最近任务-2012.05.14
- 世道变了,面试初级Java开发会问到Arrays!!!你不会还不知道吧!
- 网上图书商城项目学习笔记-028编辑一级分类
- awk java_Linux三剑客之awk
- 6.表单提交,input键盘变搜索,有关自定义属性input操作
- 【读书笔记】JavaScript高级编程(一)
- 编码表概述和常见编码表
- 射频电路PCB的设计技巧 四大基础特性
- 天池大数据竞赛口碑商家客流量预测——时序预测(python-numpy-arima)
- python 内存不足_python内存不足
- 一文带你看透IP归属地
- 计算机房宣传标语,机房安全标语
- 算法到底该怎么学?算法数据结构Java编程超全干货!(ACM金牌选手分享超牛学习路径~)...
- php网页怎么设置背景图片大全唯美,html文档中怎么把图片作为背景?
- VMware Horizon 8 2209 - 虚拟桌面基础架构 (VDI) 和应用软件
热门文章
- paip.python错误解决4
- 云计算时代的DCI技术
- 中国工程院院士郑纬民:应鼓励从头研发先进的存储系统软件
- 14个阿里高管的研发管理实践和思考 | 凌云时刻
- c mysql 数据更新_MySQL数据更新
- 【优化求解】基于matlab改进的粒子群算法求解混合储能系统容量优化问题【含Matlab源码 1823期】
- 【缺陷检测】基于matlab GUI形态学PCB电路板缺陷检测【含Matlab源码 821期】
- mysql 优化器 cost评估_MySQL优化器cost计算
- 使用lstm实现文本生成_Spamilton:使用LSTM和Hamilton歌词生成文本
- datatable高效写入mysql_如何将DataTable批量写入数据库