在我们的管理系统开发中经常需要使用到表格导入导出的功能,今天我们就使用phpexcel这个类库来实现我们需要的表格导入导出功能
什么是PHPExcel?
是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格
本案例是在YII2.0框架中来使用phpexcel
首先我们需要将Classes目录下的文件拷贝到我们YII框架根目录下新建一个文件夹excel里
准备工作完成之后进入令人激动的开发阶段(灰常简单的~)
我们先来做导出
require dirname(dirname(__FILE__)).'/excel/PHPExcel.php';
class AController extends \yii\web\Controller
{
public function actionOutput()
{
$this->layout = "layout1";//指定模板
$objPHPExcel = new \PHPExcel(); // 实例化PHPExcel类, 等同于在桌面上新建一个excel,这里需要前置加反斜扛
for ($i = 1; $i <= 3; $i ++) {//这里需要创建多少个sheet就让i小于多少
if ($i > 1) {
$objPHPExcel->createSheet(); // 创建新的内置表
}
$objPHPExcel->setActiveSheetIndex($i - 1); // 把新创建的sheet设定为当前活动sheet
$objSheet = $objPHPExcel->getActiveSheet(); // 获取当前活动sheet
$objSheet->setTitle($i . "sheet".$i); // 给当前活动sheet起个名称
$model = Company::find();
$count = $model->count();
$pageSize = Yii::$app->params['pageSize']['order'];
$pager = new Pagination([
'totalCount' => $count,
'pageSize' => $pageSize
]);
$data = $model->offset($pager->offset)
->limit($pager->limit)
->all(); // 查询所有公司的信息
$objSheet->setCellValue("A1", "id")
->setCellValue("B1", "电话"); //表头内容
$j = 2;
foreach ($data as $key => $val) {
$objSheet->setCellValue("A" . $j, $val['companyid'])
->setCellValue("B" . $j, $val['phone']);// 填充数据
$j ++;
}
}
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); // 生成excel文件
// $objWriter->save($dir."/export_1.xls");//保存文件
header('Content-Type: application/vnd.ms-excel'); // 告诉浏览器将要输出excel03文件
header('Content-Disposition: attachment;filename="' . 'browser_excel03.xls' . '"'); // 告诉浏览器将输出文件的名称
header('Cache-Control: max-age=0'); // 禁止缓存
$objWriter->save("php://output");//输出
return $this->render('list', ['pager' => $pager, 'orders' => $data]);
}
}
require dirname(dirname(__FILE__)).'/excel/PHPExcel.php';
class AController extends \yii\web\Controller
{
public function actionInput()
{
$dir = dirname(__FILE__); // 找到当前脚本所在路径
$filename = $_FILES['excel']['tmp_name'];
$fileType = \PHPExcel_IOFactory::identify($filename); // 自动获取文件的类型提供给phpexcel用
$objReader = \PHPExcel_IOFactory::createReader($fileType); // 获取文件读取操作对象
// $objReader->setLoadSheetsOnly($sheetName);//只加载指定的sheet
$objPHPExcel = $objReader->load($filename); // 加载文件
foreach ($objPHPExcel->getWorksheetIterator() as $sheet) { // 循环取sheet
foreach ($sheet->getRowIterator() as $row) { // 逐行处理
if ($row->getRowIndex() < 2) {
continue;
}
$i = 0;
$arr = array();
foreach ($row->getCellIterator() as $cell) { // 逐列读取
$data = $cell->getValue(); // 获取单元格数据
$arr[$i] = $data;
$i++;
}
if($arr[0] == '' && $arr[1] == ''){
return $this->render('index');//读到空的单元格停止读取动作
}
var_dump($arr);//打印出读到的数据
//保存到数据库
$sql = "insert into company values (null,'$arr[1]')";
Yii::$app->db->createCommand($sql)->execute();
Yii::$app->session->setFlash('info', '已成功导入数据');
}
return $this->render('index');
}
}
}