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 无限级数据JSON格式及JS解析
Jul 17 PHP
php处理文件的小例子(解压缩,删除目录)
Feb 03 PHP
PHP加Nginx实现动态裁剪图片方案
Mar 10 PHP
thinkphp实现面包屑导航(当前位置)例子分享
May 10 PHP
微信公众平台开发之配置与请求
Aug 26 PHP
详解PHP中array_rand函数的使用方法
Sep 11 PHP
php实现的简单中文验证码功能示例
Jan 03 PHP
理清PHP在Linxu下执行时的文件权限方法
Jun 07 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
PHP token验证生成原理实例分析
Jun 05 PHP
laravel 多图上传及图片的存储例子
Oct 14 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 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读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
php 数组元素快速去重
2017/05/05 PHP
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
基于JQuery的多标签实现代码
2012/09/19 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
2015/12/04 Javascript
javascript拖拽效果延伸学习
2016/04/04 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
2016/10/11 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
2020/11/26 Vue.js
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
django开发之settings.py中变量的全局引用详解
2017/03/29 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
python根据文章标题内容自动生成摘要的实例
2019/02/21 Python
Python 实现微信防撤回功能
2019/04/29 Python
python 寻找离散序列极值点的方法
2019/07/10 Python
基于python实现雪花算法过程详解
2019/11/16 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
中秋手机店促销方案
2014/06/16 职场文书
我的中国梦演讲稿高中篇
2014/08/19 职场文书
个人四风问题原因分析及整改措施
2014/09/28 职场文书
施工员岗位职责范本
2015/04/11 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
初中班主任教育随笔
2015/08/15 职场文书
Oracle 触发器trigger使用案例
2022/02/24 Oracle
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电
悬疑名作《朋友游戏》动画无字ED宣传片 新角色公开
2022/04/13 日漫