设为首页 - 加入收藏 铜陵站长网(0562Zz.Com)- 铜陵站长资讯门户网站!
热搜: 网站 评测 荣耀6Plus
当前位置: 首页 > 百科 > 正文

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

发布时间:2016-11-26 18:17 所属栏目:[百科] 来源:站长网
导读:复制代码 代码如下: 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;

(编辑:铜陵站长网 0562Zz.Com)

网友评论
推荐文章