什么都不说 直接上代码
php文件
class IndexController extends Controller {
public function index(){
$this->display('index');
}
public function upload(){
//print_r($_FILES);
foreach($_FILES as $val){
$f=1;
if(!is_uploaded_file($val['tmp_name'])){
$f=0;
$this->error($val['name']."不是HTTP POST上传的");
}
}
if($f==0){
die;
}
$upload = new \Think\Upload();// 实例化上传类
$upload->maxSize = 50000000 ;// 设置附件上传大小
$upload->saveName = '';// 文件命名规则
$upload->exts = array('xls');// 设置附件上传类型
$upload->savePath = 'Uploads/'; // 设置附件上传目录 // 上传文件
$upload->subName = array(); //子目录
$info = $upload->upload();
if(!$info) {// 上传错误提示错误信息
$this->error($upload->getError());
}else{// 上传成功
Vendor('excel.PHPExcels'); //第三方类
Vendor('excel.PHPExcel.IOFactory'); //第三方类
$test = M('test'); //实例化模型-********************
$type = 'Excel5'; //文件类型
$xlsReader = \PHPExcel_IOFactory::createReader($type); //对象
// var_dump($xlsReader);
foreach($info as $key => $val){
$Sheets = $xlsReader->load('./Public/'.$val['savepath'].'/'.$val['savename']); //excel对象
// print_r($Sheets);
//开始读取
$Sheet = $Sheets->getSheet(0)->toArray(); //读取第一个工作表(注意编号从0开始) 如果读取多个可以做一个循环0,1,2,3....
//print_r($Sheet);
//得到二维数组,每个小数组是excel表格内容的一行 里面包含此行的每列的数据
echo '<pre>';
//print_r($Sheet);die;
$flag=1;
foreach($Sheet as $k=>$v){
//print_r($v);
if($v[0]=='id'){
continue;
}else{
//验证数据是否合法
foreach($v as $key => $v1){
if($v1 == ''){
echo $val['savename'].'文件中数据不全,请填写后重新上传';
unlink('./Public/'.$val['savepath'].'/'.$val['savename']);
$flag=0;
break;
}
}
if($flag==0){
break;
}
}
}
if($flag == 1){
foreach($Sheet as $k=>$v){
if($v[0]=='id'){
continue;
}else{
$data['name'] = $v[1];
$data['content'] = $v[2];
$data['desc'] = $v[3];
$test -> add($data);
}
}
}
}
}
}
//下载模板
public function download(){
$test = M('test');
$data = $test->query('desc test');
// print_r($data);die;
$str = '';
foreach($data as $v) {
$str .= "$v[Field]\t";
}
$str .= "\n";
$filename = date('Ymd').'.xls';
$this->exportExcel($filename,$str); //生成excel表格
}
//导出数据
function downloadAll(){
$test = M('test');
$data = $test->select();
$data1 = $test->query('desc test');
$str = '';
foreach($data1 as $v) {
$str .= "$v[Field]\t";
}
$str .= "\n";
foreach($data as $key => $val){
foreach($val as $v){
$str .= "$v\t";
}
$str .= "\n";
}
$filename = date('Ymd').'.xls';
$this->exportExcel($filename,$str); //生成excel表格
}
function exportExcel($filename,$content){
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/vnd.ms-execl");
header("Content-Type: application/force-download");
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=".$filename);
header("Content-Transfer-Encoding: binary");
header("Pragma: no-cache");
header("Expires: 0");
echo $content;
}
}
html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>excel 上传 下载</title>
</head>
<body>
<form method="post" action="__URL__/upload" enctype="multipart/form-data">
<input type="button" value="下载模板" οnclick="download()">
<input type="button" value="导出" οnclick="downloadAll()">
<input type='button' value="加一个" οnclick="jia()"><br><br id="j">
上传: <input type="file" name='file' id='file'> <input type='submit' value="导入">
</form>
</body>
<script src="__PUBLIC__/jquery.js"></script>
<script>
//alert($);
var i=1;
function jia(){
$("#j").after('上传: <input type="file" name="file'+i+'" id="file'+i+'"><br><br>');
i++;
}
function download(){
location.href='__URL__/download';
}
function downloadAll(){
location.href='__URL__/downloadAll';
}
</script>
</html>