转:Codeigniter调用PHPExcel例子
时间:2011-01-30 来源:harry.guo
1.把PHPExcel放到application\libraries下,并新建个tool.php用来调用
PHPExcel官方网站: http://www.codeplex.com/PHPExcel
<?php
class Tool{
/**导入Excel文件到MySql数据库
$file:Excel文件的名称;
$filetempname:Excel文件上传到服务器的临时文件名
$sql:传入的sql语句
**/
function UploadExcel($file,$filetempname,$strsql)
{
set_include_path(get_include_path().PATH_SEPARATOR .BASEPATH.'libraries/PHPExcel/PHPExcel');
require_once 'PHPExcel/PHPExcel.php';
require_once 'PHPExcel/PHPExcel/IOFactory.php';
require_once 'PHPExcel/PHPExcel/Reader\Excel5.php';
$tools_filePath = dirname(dirname(dirname(dirname(__FILE__))))."/UploadFiles/";
$tools_filePath = str_replace('\\','/',$tools_filePath);
//防止最大可使用的内存总量过少
if(intval(ini_get('memory_limit')) <= 20)
{
ini_set('memory_limit','20M');
}
$uploadDir = $tools_filePath;
if (!is_dir($uploadDir))
{
if (!mkdir($uploadDir, 0777,TRUE) || !chmod($uploadDir, 0777))
{
exit("创建上传目录失败");
}
}
$filename = explode(".",$file);//把上传的文件名以“.”好为准做一个数组。
$date = date("YmdHis");
//$time=date("Y-m-d-H-i-s");//取当前上传的时间
//$filename[0]=$time;//取文件名t替换
//$name=implode(".",$filename); //上传后的文件名
//exit($filename[1]);
$filename_sever = $date.".".$filename[count($filename)-1];
$filename_sever = $uploadDir."/".$filename_sever;
$result=move_uploaded_file($filetempname,$filename_sever);//假如上传到当前目录下
if($result) //如果上传文件成功,就执行导入excel操作
{
$objReader = PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format
$objPHPExcel = $objReader->load($filename_sever);
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = $sheet->getHighestColumn(); // 取得总列数
$CountFlag =1;
$everyTimes=200;
if($highestRow >=$everyTimes)
{
$CountFlag=ceil($highestRow /$everyTimes);
}
for($m=1;$m<=$CountFlag;$m++)
{
$startdata =2;
$endata=$everyTimes*($CountFlag-1) ;
if($m > 1)$startdata=($m-1)*$everyTimes+1;
if($m==$CountFlag )$endata =$highestRow;
$sql=$strsql;
$str = "";$strdata="";$msgstr="";
for($j=$startdata;$j<=$endata;$j++)
{
for($k='A';$k<=$highestColumn;$k++)
{
if($str != "")
{
$str .= ",'".iconv('utf-8','gbk',$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue())."'";//读取单元格
}
else
{
$str .= "'".iconv('utf-8','gbk',$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue())."'";//读取单元格
}
}
$str= "(".$str.")";
if($strdata !="")
$strdata .=",".$str;
else $strdata .=$str ;
$str="";
}
$sql .= $strdata;
if(!mysql_query($sql))
{
continue;
}
}
if(!is_dir($filename_sever))
{
unlink($filename_sever); ////删除文件
} else
{
deldir($filename_sever); ////删除文件
}
$msg = true;
}
else
{
$msg = false;
}
return $msg;
}
}
?>
2.在views的sellNember.php页面,注意:form必须是 form_open_multipart 使用 form_open无法上传
<?=form_open_multipart('sellNemberC/upload')?>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
</td>
</tr>
<tr>
<td align="left">
上传号码资源:
<input type="hidden" name="site_url" value="<?=site_url()?>">
<input type="file" name="inputExcel" size="20" />
<input type="submit" name="sub_up" value="提 交" />
</td>
</tr>
</table>
<?=form_close()?>
3.在controllers下的sellNemberC.php进行调用
/*
*导入excel文件
*/
function upload()
{
$this->load->library('tool');
$site_url = $_POST['site_url'];
$name = iconv("UTF-8","gbk",$_FILES['inputExcel']['name']);
$tempName = iconv("UTF-8","gbk",$_FILES['inputExcel']['tmp_name']);
$sql = "insert into tcombinedsetnumber (number,type,price,remark,commision) values ";
$msg = $this->tool->UploadExcels($name,$tempName,$sql);
if($msg === true)
{
show_error("导入成功<a href='".$site_url."/Cextensions/sellNemberC'>返回</a>");
}else
{
show_error("导入失败<a href='".$site_url."/Cextensions/sellNemberC'>返回</a>");
}
}