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数据库开发知多少
Oct 09 PHP
PHP include任意文件或URL介绍
Apr 29 PHP
php获取网页上所有链接的方法
Apr 03 PHP
用PHP写的一个冒泡排序法的函数简单实例
May 26 PHP
微信支付的开发流程详解
Sep 13 PHP
php变量与数组相互转换的方法(extract与compact)
Dec 02 PHP
PHP获取文本框、密码域、按钮的值实例代码
Apr 19 PHP
PHP多维数组排序array详解
Nov 21 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
Nov 24 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
Apr 09 PHP
PHP levenshtein()函数用法讲解
Mar 08 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
May 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 购物车实例(申精)
2009/05/11 PHP
php实现简易计算器
2020/08/28 PHP
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
JavaScript中的Location地址对象
2008/01/16 Javascript
js控制表单奇偶行样式的简单方法
2013/07/31 Javascript
jQuery判断div随滚动条滚动到一定位置后停止
2014/04/02 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
Bootstrap的Refresh Icon也spin起来
2016/07/13 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
关于JavaScript语句后面的分号问题
2017/12/07 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
2018/04/18 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
解决vue的变量在settimeout内部效果失效的问题
2018/08/30 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
微信小程序实现两边小中间大的轮播效果的示例代码
2018/12/07 Javascript
JavaScript解析机制与闭包原理实例详解
2019/03/08 Javascript
移动端手指操控左右滑动的菜单
2019/09/08 Javascript
js实现视图和数据双向绑定的方法分析
2020/02/05 Javascript
vue中实现回车键登录功能
2020/02/19 Javascript
javascript实现前端成语点击验证优化
2020/06/24 Javascript
js实现点击选项置顶动画效果
2020/08/25 Javascript
Python itertools模块详解
2015/05/09 Python
Python的爬虫程序编写框架Scrapy入门学习教程
2016/07/02 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
详解windows python3.7安装numpy问题的解决方法
2018/08/13 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
海淘零差价,宝贝全球购: 宝贝格子
2016/08/24 全球购物
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
爱护公物标语
2014/06/24 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
诚信教育主题班会
2015/08/13 职场文书
2019年浪漫婚礼证婚词
2019/06/27 职场文书
中学生打架检讨书之500字
2019/08/06 职场文书
利用Pycharm连接服务器的全过程记录
2021/07/01 Python