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 26 PHP
调整优化您的LAMP应用程序的5种简单方法
Jun 26 PHP
PHP中全面阻止SQL注入式攻击分析小结
Jan 30 PHP
php explode函数实例代码
Feb 27 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
XAMPP安装与使用方法详细解析
Nov 27 PHP
php递归删除指定文件夹的方法小结
Apr 20 PHP
thinkPHP模型初始化实例分析
Dec 03 PHP
PHP按指定键值对二维数组进行排序的方法
Dec 22 PHP
Zend Framework教程之资源(Resources)用法实例详解
Mar 14 PHP
学习PHP session的传递方式
Jun 15 PHP
Laravel5框架自定义错误页面配置操作示例
Apr 17 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文件
2007/01/04 PHP
PHP生成UTF8文件的方法
2010/05/15 PHP
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
PHP中is_dir()函数使用指南
2015/05/08 PHP
php将图片文件转换成二进制输出的方法
2015/06/10 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
PHP实现执行外部程序的方法详解
2017/08/17 PHP
IE6、IE7中获取Button元素的值的bug说明
2011/08/28 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
Jil,高效的json序列化和反序列化库
2017/02/15 Javascript
原生JS中slice()方法和splice()区别
2017/03/06 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
基于javascript的拖拽类封装详解
2019/04/19 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
2019/08/01 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
2019/09/28 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
浅谈机器学习需要的了解的十大算法
2017/12/15 Python
Python获取CPU、内存使用率以及网络使用状态代码
2018/02/08 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
python中单下划线_的常见用法总结
2018/07/10 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
基于YUV 数据格式详解及python实现方式
2019/12/09 Python
Pycharm 安装 idea VIM插件的图文教程详解
2020/02/21 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
HTML5 Canvas鼠标与键盘事件demo示例
2013/07/04 HTML / CSS
迪士尼法国在线商店:shopDisney FR
2020/12/03 全球购物
施工人员岗位职责
2013/12/12 职场文书
秋季开学典礼主持词
2014/03/19 职场文书
新年主持词
2014/03/27 职场文书
2014年征兵标语
2014/06/20 职场文书
绍兴鲁迅故居导游词
2015/02/09 职场文书
八月一日观后感
2015/06/10 职场文书
2016年庆祝六一儿童节活动总结
2016/04/06 职场文书