php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)


Posted in PHP onAugust 21, 2010
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Excel数据获取演示</title> 
<meta name="Keywords" content="TODO" /> 
<meta name="Description" content="TODO"/> 
</head> 
<body> 
<div> 
<div>Excel数据获取演示</div> 
<div> 
<form method="POST" action="/Index/parse" enctype="multipart/form-data"> 
<input type="file" name="excel" value="" /> 
<input type="submit" name="submit" value="提交" /> 
</form> 
</div> 
</div> 
</body> 
</html>

<?php 
/** 
* CopyRight (c) 2009, 
* All rights reserved. 
* 文件名: 
* 摘 要: 
* 
* @author 星期八 [url=mailto:ixqbar@hotmail.com]ixqbar@hotmail.com[/url] 
* @version 
*/ public function parse() 
{ 
/** 
* $_FILES数组说明 
* array(n) { 
* ["表单文件框名称"] => array(5) { 
* ["name"] => 提交文件名称 
* ["type"] => 提交文件类型 Excel为"application/vnd.ms-excel" 
* ["tmp_name"] => 临时文件名称 
* ["error"] => 错误(0成功1文件太大超过upload_max_filesize2文件太大超过MAX_FILE3上传不完整4没有上传文件) 
* ["size"] => 文件大小(单位:KB) 
* } 
* } 
*/ 
$return=array(0,''); 
/** 
* 判断是否提交 
* is_uploaded_file(文件名称)用于确定指定的文件是否使用POST方法上传,防止非法提交,通常和move_upload_file一起使用保存上传文件到指定的路径 
*/ 
if(!isset($_FILES) || !is_uploaded_file($_FILES['excel']['tmp_name'])) 
{ 
$return=array(1,'提交不合法'); 
} 
//处理 
if(0 == $return[0]) 
{ 
import('@.Util.ExcelParser'); 
$excel=new ExcelParser($_FILES['excel']['tmp_name']); 
$return=$excel->main(); 
} 
//输出处理 
print_r($return); 
?>

<?php 
/** 
* CopyRight (c) 2009, 
* All rights reserved. 
* 文件名:excel数据获取 
* 摘 要: 
* 
* @author 星期八 [url=mailto:ixqbar@hotmail.com]ixqbar@hotmail.com[/url] 
* @version 0.1 
*/ 
class ExcelParser 
{ 
private $_data=array(0,''); 
private $_excel_handle; 
private $_excel=array(); 
/** 
* 构造函数 
* @param <string> $filename 上传文件临时文件名称 
*/ 
public function __construct($filename) 
{ 
/** 
* 引入excelparser类 
* 普通方法为 
* requires 路径.'excelparser.php'; 
*/ 
import('@.Util.PHPExcelParser.excelparser','','.php'); 
$this->_excel_handle=new ExcelFileParser(); 
//错误获取 
$this->checkErrors($filename); 
} 
/** 
* 错误校验 
*/ 
private function checkErrors($filename) 
{ 
/** 
* 方法一 
*/ 
$error_code=$this->_excel_handle->ParseFromFile($filename); 
/** 
* 方法二 
* $file_handle = fopen($this->_filename,'rb'); 
* $content = fread($file_handle,filesize($this->_filename)); 
* fclose($file_handle); 
* $error_code = $this->_excel->ParseFromString($content); 
* unset($content,$file_handle); 
*/ 
switch($error_code) 
{ 
case 0: 
//无错误不处理 
break; 
case 1: 
$this->_data=array(1,'文件读取错误(Linux注意读写权限)'); 
break; 
case 2: 
$this->_data=array(1,'文件太小'); 
break; 
case 3: 
$this->_data=array(1,'读取Excel表头失败'); 
break; 
case 4: 
$this->_data=array(1,'文件读取错误'); 
break; 
case 5: 
$this->_data=array(1,'文件可能为空'); 
break; 
case 6: 
$this->_data=array(1,'文件不完整'); 
break; 
case 7: 
$this->_data=array(1,'读取数据错误'); 
break; 
case 8: 
$this->_data=array(1,'版本错误'); 
break; 
} 
unset($error_code); 
} 
/** 
* Excel信息获取 
*/ 
private function getExcelInfo() 
{ 
if(1==$this->_data[0])return; 
/** 
* 获得sheet数量 
* 获得sheet单元对应的行和列 
*/ 
$this->_excel['sheet_number']=count($this->_excel_handle->worksheet['name']); 
for($i=0;$i<$this->_excel['sheet_number'];$i++) 
{ 
/** 
* 行于列 
* 注意:从0开始计数 
*/ 
$row=$this->_excel_handle->worksheet['data'][$i]['max_row']; 
$col=$this->_excel_handle->worksheet['data'][$i]['max_col']; 
$this->_excel['row_number'][$i]=($row==NULL)?0:++$row; 
$this->_excel['col_number'][$i]=($col==NULL)?0:++$col; 
unset($row,$col); 
} 
} 
/** 
* 中文处理函数 
* @return <string> 
*/ 
private function uc2html($str) 
{ 
$ret = ''; 
for( $i=0; $i<strlen($str)/2; $i++ ) 
{ 
$charcode = ord($str[$i*2])+256*ord($str[$i*2+1]); 
$ret .= '&#'.$charcode.';'; 
} 
return mb_convert_encoding($ret,'UTF-8','HTML-ENTITIES'); 
} 
/** 
* Excel数据获取 
*/ 
private function getExcelData() 
{ 
if(1==$this->_data[0])return; 
//修改标记 
$this->_data[0]=1; 
//获取数据 
for($i=0;$i<$this->_excel['sheet_number'];$i++) 
{ 
/** 
* 对行循环 
*/ 
for($j=0;$j<$this->_excel['row_number'][$i];$j++) 
{ 
/** 
* 对列循环 
*/ 
for($k=0;$k<$this->_excel['col_number'][$i];$k++) 
{ 
/** 
* array(4) { 
* ["type"] => 类型 [0字符类型1整数2浮点数3日期] 
* ["font"] => 字体 
* ["data"] => 数据 
* ... 
* } 
*/ 
$data=$this->_excel_handle->worksheet['data'][$i]['cell'][$j][$k]; 
switch($data['type']) 
{ 
case 0: 
//字符类型 
if($this->_excel_handle->sst['unicode'][$data['data']]) 
{ 
//中文处理 
$data['data'] = $this->uc2html($this->_excel_handle->sst['data'][$data['data']]); 
} 
else 
{ 
$data['data'] = $this->_excel_handle->sst['data'][$data['data']]; 
} 
break; 
case 1: 
//整数 
//TODO 
break; 
case 2: 
//浮点数 
//TODO 
break; 
case 3: 
//日期 
//TODO 
break; 
} 
$this->_data[1][$i][$j][$k]=$data['data']; 
unset($data); 
} 
} 
} 
} 
/** 
* 主函数 
* @return <array> array(标识符,内容s) 
*/ 
public function main() 
{ 
//Excel信息获取 
$this->getExcelInfo(); 
//Excel数据获取 
$this->getExcelData(); 
return $this->_data; 
} 
} 
?>
PHP 相关文章推荐
php 购物车实例(申精)
May 11 PHP
php读取mysql乱码,用set names XXX解决的原理分享
Dec 29 PHP
PHP代码审核的详细介绍
Jun 13 PHP
php中Session的生成机制、回收机制和存储机制探究
Aug 19 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
Apr 15 PHP
php递归实现无限分类的方法
Jul 28 PHP
php 截取GBK文档某个位置开始的n个字符方法
Mar 08 PHP
Laravel中前端js上传图片到七牛云的示例代码
Sep 04 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
Apr 02 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
May 08 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
Oct 17 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
Jan 02 PHP
使用VisualStudio开发php的图文设置方法
Aug 21 #PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
Aug 21 #PHP
ThinkPHP中实例Model方法的区别说明
Aug 21 #PHP
PHP 数组基础知识小结
Aug 20 #PHP
一个简单php扩展介绍与开发教程
Aug 19 #PHP
php checkbox 取值详细说明
Aug 19 #PHP
PHP 截取字符串专题集合
Aug 19 #PHP
You might like
php顺序查找和二分查找示例
2014/03/27 PHP
javascript some()函数用法详解
2014/11/13 PHP
PHP获取当前完整URL地址的函数
2014/12/21 PHP
JavaScript性能优化 创建文档碎片(document.createDocumentFragment)
2010/07/13 Javascript
js 数据类型转换总结笔记
2011/01/17 Javascript
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
javascript实现禁止复制网页内容
2014/12/16 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
JavaScript中模拟实现jsonp
2015/06/19 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
2018/01/18 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
2018/05/17 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
2018/12/03 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
比较详细Python正则表达式操作指南(re使用)
2008/09/06 Python
Python 初始化多维数组代码
2008/09/06 Python
Python 实现数据结构中的的栈队列
2019/05/16 Python
python之信息加密题目详解
2019/06/26 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
使用python-Jenkins批量创建及修改jobs操作
2020/05/12 Python
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
2019年Java面试必问之经典试题
2012/09/12 面试题
国际商务系学生个人的自我评价
2013/11/26 职场文书
幼儿园教师工作感言
2014/02/15 职场文书
员工拓展培训方案
2014/02/15 职场文书
五一手机促销方案
2014/03/08 职场文书
关于九一八事变的演讲稿2014
2014/09/17 职场文书
python 如何获取页面所有a标签下href的值
2021/05/06 Python
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android
Python访问Redis的详细操作
2021/06/26 Python