excel导出

318 阅读1分钟

该项目的GitHub地址是:github.com/Maatwebsite…

本文我们将在thinkphp中使用Thinkphp Excel简单实现Excel文件的导入和导出。

安装excel 从GitHub上下载PHPExcel类库 地址:github.com/PHPOffice/P…

解压后将Classes文件夹移动到ThinkPHP的extend目录,并将其重命名为phpexcel

代码实现

        public function excel(){
         // 引入类库
         include "../extend/phpexcel/PHPExcel.php";

         // 文件名和文件类型
         $fileName = "student";
         $fileType = "xlsx";
 
         // 模拟获取数据
         $data = News::select();
        // dump($data);die();
         $obj = new \PHPExcel();
 
         // 以下内容是excel文件的信息描述信息
         $obj->getProperties()->setCreator(''); //设置创建者
         $obj->getProperties()->setLastModifiedBy(''); //设置修改者
         $obj->getProperties()->setTitle(''); //设置标题
         $obj->getProperties()->setSubject(''); //设置主题
         $obj->getProperties()->setDescription(''); //设置描述
         $obj->getProperties()->setKeywords('');//设置关键词
         $obj->getProperties()->setCategory('');//设置类型
 
         // 设置当前sheet
         $obj->setActiveSheetIndex(0);
 
         // 设置当前sheet的名称
         $obj->getActiveSheet()->setTitle('student');
 
         // 列标
         $list = ['A', 'B', 'C','E','F','G','H','I','J','K'];
 
         // 填充第一行数据
         $obj->getActiveSheet()
         ->setCellValue($list[0] . '1', '标题')
         ->setCellValue($list[1] . '1', '分类')
         ->setCellValue($list[2] . '1', '简介')
             ;
 
         // 填充第n(n>=2, n∈N*)行数据
         $length = count($data);
         for ($i = 0; $i < $length; $i++) {
            $obj->getActiveSheet()->setCellValue($list[0] . ($i + 2), $data[$i]['title'], \PHPExcel_Cell_DataType::TYPE_STRING);//将其设置为文本格式
            $obj->getActiveSheet()->setCellValue($list[1] . ($i + 2), $data[$i]['category_id']);
            $obj->getActiveSheet()->setCellValue($list[2] . ($i + 2), $data[$i]['news_url']);
            $obj->getActiveSheet()->setCellValue($list[3] . ($i + 2), $data[$i]['author_name']);
         }
 
         // 设置加粗和左对齐
         foreach ($list as $col) {
             // 设置第一行加粗
             $obj->getActiveSheet()->getStyle($col . '1')->getFont()->setBold(true);
             // 设置第1-n行,左对齐
             for ($i = 1; $i <= $length + 1; $i++) {
                 $obj->getActiveSheet()->getStyle($col . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
             }
         }
 
         // 设置列宽
         $obj->getActiveSheet()->getColumnDimension('A')->setWidth(20);
         $obj->getActiveSheet()->getColumnDimension('B')->setWidth(20);
         $obj->getActiveSheet()->getColumnDimension('C')->setWidth(15);
         
 
         // 导出
         ob_clean();
         if ($fileType == 'xls') {
             header('Content-Type: application/vnd.ms-excel');
             header('Content-Disposition: attachment;filename="' . $fileName . '.xls');
             header('Cache-Control: max-age=1');
             $objWriter = new \PHPExcel_Writer_Excel5($obj);
             $objWriter->save('php://output');
             exit;
         } elseif ($fileType == 'xlsx') {
             header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
             header('Content-Disposition: attachment;filename="' . $fileName . '.xlsx');
             header('Cache-Control: max-age=1');
             $objWriter = \PHPExcel_IOFactory::createWriter($obj, 'Excel2007');
             $objWriter->save('php://output');
             exit;
         }
        }