php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据
发布时间:2016-11-26 19:08:55 所属栏目:百科 来源:站长网
导读:复制代码 代码如下: lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"gt; lt;html xmlns="http://www.w3.org/1999/xhtml"gt; lt;headgt; lt;meta http-equiv="Content-Type"
复制代码 代码如下: lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"gt; lt;html xmlns="http://www.w3.org/1999/xhtml"gt; lt;headgt; lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /gt; lt;titlegt;Excel数据获取演示lt;/titlegt; lt;meta name="Keywords" content="TODO" /gt; lt;meta name="Description" content="TODO"/gt; lt;/headgt; lt;bodygt; lt;divgt; lt;divgt;Excel数据获取演示lt;/divgt; lt;divgt; lt;form method="POST" action="/Index/parse" enctype="multipart/form-data"gt; lt;input type="file" name="excel" value="" /gt; lt;input type="submit" name="submit" value="提交" /gt; lt;/formgt; lt;/divgt; lt;/divgt; lt;/bodygt; lt;/htmlgt; 复制代码 代码如下: lt;?php /** * CopyRight (c) 2009, * All rights reserved. * 文件名: * 摘 要: * * @author 星期八 [url=mailto:ixqbar@hotmail.com]ixqbar@hotmail.com[/url] * @version */ public function parse() { /** * $_FILES数组说明 * array(n) { * ["表单文件框名称"] =gt; array(5) { * ["name"] =gt; 提交文件名称 * ["type"] =gt; 提交文件类型 Excel为"application/vnd.ms-excel" * ["tmp_name"] =gt; 临时文件名称 * ["error"] =gt; 错误(0成功1文件太大超过upload_max_filesize2文件太大超过MAX_FILE3上传不完整4没有上传文件) * ["size"] =gt; 文件大小(单位: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-gt;main(); } //输出处理 print_r($return); ?gt; 复制代码 代码如下: lt;?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 lt;stringgt; $filename 上传文件临时文件名称 */ public function __construct($filename) { /** * 引入excelparser类 * 普通方法为 * requires 路径.'excelparser.php'; */ import('@.Util.PHPExcelParser.excelparser','','.php'); $this-gt;_excel_handle=new ExcelFileParser(); //错误获取 $this-gt;checkErrors($filename); } /** * 错误校验 */ private function checkErrors($filename) { /** * 方法一 */ $error_code=$this-gt;_excel_handle-gt;ParseFromFile($filename); /** * 方法二 * $file_handle = fopen($this-gt;_filename,'rb'); * $content = fread($file_handle,filesize($this-gt;_filename)); * fclose($file_handle); * $error_code = $this-gt;_excel-gt;ParseFromString($content); * unset($content,$file_handle); */ switch($error_code) { case 0: //无错误不处理 break; case 1: $this-gt;_data=array(1,'文件读取错误(Linux注意读写权限)'); break; case 2: $this-gt;_data=array(1,'文件太小'); break; case 3: $this-gt;_data=array(1,'读取Excel表头失败'); break; case 4: $this-gt;_data=array(1,'文件读取错误'); break; case 5: $this-gt;_data=array(1,'文件可能为空'); break; case 6: $this-gt;_data=array(1,'文件不完整'); break; case 7: $this-gt;_data=array(1,'读取数据错误'); break; case 8: $this-gt;_data=array(1,'版本错误'); break; } unset($error_code); } /** * Excel信息获取 */ private function getExcelInfo() { if(1==$this-gt;_data[0])return; /** * 获得sheet数量 * 获得sheet单元对应的行和列 */ $this-gt;_excel['sheet_number']=count($this-gt;_excel_handle-gt;worksheet['name']); for($i=0;$ilt;$this-gt;_excel['sheet_number'];$i++) { /** * 行于列 * 注意:从0开始计数 */ $row=$this-gt;_excel_handle-gt;worksheet['data'][$i]['max_row']; $col=$this-gt;_excel_handle-gt;worksheet['data'][$i]['max_col']; $this-gt;_excel['row_number'][$i]=($row==NULL)?0:++$row; $this-gt;_excel['col_number'][$i]=($col==NULL)?0:++$col; unset($row,$col); } } /** * 中文处理函数 * @return lt;stringgt; */ private function uc2html($str) { $ret = ''; for( $i=0; $ilt;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-gt;_data[0])return; //修改标记 $this-gt;_data[0]=1; //获取数据 for($i=0;$ilt;$this-gt;_excel['sheet_number'];$i++) { /** * 对行循环 */ for($j=0;$jlt;$this-gt;_excel['row_number'][$i];$j++) { /** * 对列循环 */ for($k=0;$klt;$this-gt;_excel['col_number'][$i];$k++) { /** * array(4) { * ["type"] =gt; 类型 [0字符类型1整数2浮点数3日期] * ["font"] =gt; 字体 * ["data"] =gt; 数据 * ... * } */ $data=$this-gt;_excel_handle-gt;worksheet['data'][$i]['cell'][$j][$k]; switch($data['type']) { case 0: //字符类型 if($this-gt;_excel_handle-gt;sst['unicode'][$data['data']]) { //中文处理 $data['data'] = $this-gt;uc2html($this-gt;_excel_handle-gt;sst['data'][$data['data']]); } else { $data['data'] = $this-gt;_excel_handle-gt;sst['data'][$data['data']]; } break; case 1: //整数 //TODO break; case 2: //浮点数 //TODO break; case 3: //日期 //TODO break; } $this-gt;_data[1][$i][$j][$k]=$data['data']; unset($data); } } } } /** * 主函数 * @return lt;arraygt; array(标识符,内容s) */ public function main() { //Excel信息获取 $this-gt;getExcelInfo(); //Excel数据获取 $this-gt;getExcelData(); return $this-gt;_data; } } ?gt; (编辑:淮北站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |