php 把excel批量导入到数据库代码
我们是利用了excelfileparser这个扩展来处理的哦,
excel数据获取演示
excel数据获取演示
display();
}
/**
* 提交处理
*/
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);
}
}
?>
_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_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
*/
private function uc2html($str)
{
$ret = '';
for( $i=0; $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_excel['sheet_number'];$i++)
{
/**
* 对行循环
*/
for($j=0;$j_excel['row_number'][$i];$j++)
{
/**
* 对列循环
*/
for($k=0;$k_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(标识符,内容s)
*/
public function main()
{
//excel信息获取
$this->getexcelinfo();
//excel数据获取
$this->getexceldata();
return $this->_data;
}
}
?>