一、phpExcel的简介
PHPExcel 是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格,如 Excel (BIFF) .xls, Excel 2007 (OfficeOpenXML) .xlsx, CSV, Libre/OpenOffice Calc .ods, Gnumeric, PDF, HTML等等。
二、下载phpexcel
使用composer下载
composer require phpoffice/phpexcel
三、在thinkphp中如何使用phpExcel
使用use引入文件
- 导出
public function index(){
Loader::import('PHPExcel.php');
$obj = new \PHPExcel();//实例化对象
//选择你要操作的sheet表
$objsheet=$obj->getActiveSheet();
//通过代码该sheet的名字
$objsheet->setTitle('sheet的标题');//改要操作的sheet
/* //标题和值 setCellvalue
$objsheet->setCellValue('A1','编号')->setCellValue('B1','名称')->setCellValue('C1','年龄');//第一参数 位置 第二个参数是 值
$objsheet->setCellValue('A2','1')->setCellValue('B2','刘香香')->setCellValue('C2','18');//第一参数 位置 第二个参数是 值
$objsheet->setCellValue('A3','1')->setCellValue('B3','喜羊羊')->setCellValue('C3','18');//第一参数 位置 第二个参数是 值*/
//操作数组格式的数据 是一个二维数组
/* $array=array(
array(),//第一行空着
array('班级','姓名','学号'),
array('1609phpC班','张三','123'),
);*/
$goods=Db::table('attribute')->select();//查询数据
//获取下标
$keys=array_keys($goods[0]);
array_unshift($goods,$keys);
$objsheet->fromArray($goods);
//调用写入Excel中
//如果你想要的是xls的文件 Excel5 -如果你想后缀是xlsx 写Execl2007
//这是新的一个类型,所以跟上\
$objwrite=\PHPExcel_IOFactory::createWriter($obj,"Excel5");
//保存成功的返回值是NULL的所以不能打印判断是否成功,在此执行时会覆盖,在执行时不要打开文件
$objwrite->save('./文件名称.xls');
}
下载在:public目录下
想要下载在浏览器中修改代码
public function index()
{
$obj = new \PHPExcel();//实例化对象
//选择你要操作的sheet表
$objsheet=$obj->getActiveSheet();
//通过代码该sheet的名字
$objsheet->setTitle('08C');//改要操作的sheet表
$goods=Order::select();
$goods=collection($goods)->toArray();
//获取下标
$keys=array_keys($goods[0]);
array_unshift($goods,$keys);
$objsheet->fromArray($goods);
//调用写入Excel中
//如果你想要的是xls的文件 Excel5 -如果你想后缀是xlsx 写Execl2007
//这是新的一个类型,所以跟上\
$objwrite=\PHPExcel_IOFactory::createWriter($obj,"Excel5");
//保存成功的返回值是NULL的所以不能打印判断是否成功,在此执行时会覆盖,在执行时不要打开文件
$xlsTitle = iconv('utf-8', 'gb2312', 'order');//文件名称
$fileName = "order".date('_YmdHis');
header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');
header("Content-Disposition:attachment;filename=$fileName.xls");//"xls"参考下一条备注
$objwrite->save('php://output');
}
- 重点核心代码
- 导入
- 指定上传页面
public function ipmort_html(){
return view();
}
- html页面
<form action="__URL__/import_insert" method="post" enctype="multipart/form-data">
请选择你要上传的文件:<input type="file" name="exc">
<input type="submit" value="提交">
</form>
- 提交至后台进行导入
//导入处理
public function import_insert(){
Loader::import('PHPExcel.php');
$obj = new \PHPExcel();//实例化对象
$file = request()->file('exc'); // 获取表单上传文件 例如上传了001.jpg
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->validate(['ext'=>'xls,xlsx'])->move(ROOT_PATH . 'public' . DS . 'uploads');//文件上传,限制文件上传的类型
if($info){
$filename= $info->getSaveName();//得到文件 的时候的路径
$path=ROOT_PATH . 'public' . DS . 'uploads'.DS.$filename;//拼接上传到服务器端的xls的数据
$objload= \PHPExcel_IOFactory::load($path);//调用读取数据的方法
$data= $objload->getSheet(0)->toArray();//将sheet1表中的数据转换为数组类型数据
//$row=$objload->getSheet()->getHighestRow(); //得到表格中的行数
/* $sheetCount=$obj->getSheetCount();//获取工作表的数目
for($i=0;$i<$sheetCount;$i++){//循环得出数据表的数据
$arr[]=$objload->getSheet($i)->toArray();
}*/
$keys=array_shift($data);//从数组中删除第一条数据,返回值为删除的数据
foreach($data as $key=>$value){
$newdata[]=array_combine($keys,$value);
}
$res=Db::table('attribute')->insertAll($newdata);
if($res){
$this->success('导入数据成功');
}else{
$this->error('导入数据失败');
}
}else{
echo $file->getError();// 上传失败获取错误信息
}
}