thinkphp5 整合phpexcel导入和导出数据

<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
class Index extends Controller{
        public function index(){
           
            return $this->fetch();
        }
        //导入
        public function inserExcel(){
             import('PHPExcel.PHPExcel');
             import('PHPExcel.PHPExcel.IOFactory.PHPExcel_IOFactory');
             import('PHPExcel.PHPExcel.Reader.Excel5');
             //获取表单上传文件
             $file = request()->file('excel');
             $info = $file->validate(['ext' => 'xlsx,xls'])->move(ROOT_PATH . 'public' . DS . 'uploads');
             if ($info) {
                if(empty($info)) {
                    return error('导入失败!');
                }
                $exclePath = $info->getSaveName();  //获取文件名
                //上传文件的地址
                $filename = ROOT_PATH . 'public' . DS . 'uploads' . DS . $exclePath;   
                //判断版本,这里有的网上的版本没有进行判断,导致会报大概这样的错误:
                //Warning: ZipArchive::getFromName() [ziparchive.getfromname]: Invalid or unitialized ,这里加上这个判断就可以了
                $extension = strtolower( pathinfo($filename, PATHINFO_EXTENSION) );
                if($extension == 'xlsx') {
                    $objReader =\PHPExcel_IOFactory::createReader('Excel2007');
                    //加载文件内容,编码utf-8
                    $objPHPExcel = $objReader->load($filename, $encode = 'utf-8');
                }else if($extension == 'xls'){
                    $objReader =\PHPExcel_IOFactory::createReader('Excel5');
                    $objPHPExcel = $objReader->load($filename, $encode = 'utf-8');
                }else{
                    return error('请上传excel格式的文件!');
                }
                $excel_array=$objPHPExcel->getsheet(0)->toArray();   //转换为数组格式
                array_shift($excel_array);  //删除第一个数组(标题);
                $data = [];
                foreach($excel_array as $k=>$v) {
                //data数组根据你表字段自行修改,这里Excel文件里的字段要跟表一致
                    $data[$k]['name'] = $v[0];
                    $data[$k]['pid'] = 1;
                    $data[$k]['type'] = $v[2];
                    $data[$k]['price'] = $v[3];
                    $data[$k]['standard'] = $v[4];
                    $data[$k]['unit'] = $v[5];
                    $data[$k]['supplier'] = $v[6];
                    $data[$k]['lowstock'] = $v[7];
                    $data[$k]['topstock'] = $v[8];
                    $data[$k]['stock'] = $v[9];
                    $data[$k]['operator'] = $v[10];
                }
                echo "<pre>";
                print_r($data);
                echo "</pre>";
                exit();
            } else {
               return error('导入失败!');
            }


        }
        //导出
        function export(){//导出Excel
            import('PHPExcel.PHPExcel');//调用类库,路径是基于vendor文件夹的
            import('PHPExcel.PHPExcel.Worksheet.Drawing');
            import('PHPExcel.PHPExcel.Writer.Excel2007');
            $xlsName  = "export";
            $xlsCell  = array(
                array('uid','账号序列'),
                array('user_name','名字'),
                array('email','邮箱'),
            );
            $xlsData  = Db::name('member')->Field('uid,user_name,email')->select();
            $this->exportExcel($xlsName,$xlsCell,$xlsData);
        }
        function exportExcel($expTitle,$expCellName,$expTableData){
            //include_once EXTEND_PATH.'PHPExcel/PHPExcel.php';//方法二
            $xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称
            $fileName = $expTitle.date('_YmdHis');//or $xlsTitle 文件名称可根据自己情况设定
            $cellNum = count($expCellName);
            $dataNum = count($expTableData);
            $objPHPExcel = new \PHPExcel();//方法一
            //$objPHPExcel = new \PHPExcel();//方法二
            $cellName = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U',
                'V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO',
                'AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');
            $objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合并单元格
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.'  Export time:'.date('Y-m-d H:i:s'));
            for($i=0;$i<$cellNum;$i++){
                $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $expCellName[$i][1]);
            }
            // Miscellaneous glyphs, UTF-8
            for($i=0;$i<$dataNum;$i++){
                for($j=0;$j<$cellNum;$j++){
                    $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+3), $expTableData[$i][$expCellName[$j][0]]);
                }
            }
            ob_end_clean();//这一步非常关键,用来清除缓冲区防止导出的excel乱码
            header('pragma:public');
            header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');
            header("Content-Disposition:attachment;filename=$fileName.xls");//"xls"参考下一条备注
            $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//"Excel2007"生成2007版本的xlsx,"Excel5"生成2003版本的xls
            $objWriter->save('php://output');
            exit;
        }

        //pdf导出  不支持php7.2
        public function pdfImport(){
            import('PHPExcel.PHPExcel');
            $rendererName = \PHPExcel_Settings::PDF_RENDERER_MPDF;
            $rendererLibrary = 'mpdf';
            $rendererLibraryPath = './static/' . $rendererLibrary;
            // Create new PHPExcel object
            $objPHPExcel = new \PHPExcel();

            // Set document properties
            $objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
                ->setLastModifiedBy("Maarten Balliauw")
                ->setTitle("PDF Test Document")
                ->setSubject("PDF Test Document")
                ->setDescription("Test document for PDF, generated using PHP classes.")
                ->setKeywords("pdf php")
                ->setCategory("Test result file");
            $objPHPExcel->setActiveSheetIndex(0)
                ->setCellValue('A1', 'Hello')
                ->setCellValue('B1', 'world!')
                ->setCellValue('C1', 'Hello')
                ->setCellValue('D1', 'world!');
            $objPHPExcel->setActiveSheetIndex(0)
                ->setCellValue('A4', 'Miscellaneous glyphs')
                ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
            $objPHPExcel->getActiveSheet()->setTitle('Simple');
            $objPHPExcel->getActiveSheet()->setShowGridLines(false);
            $objPHPExcel->setActiveSheetIndex(0);

            if (!\PHPExcel_Settings::setPdfRenderer(
                $rendererName,
                $rendererLibraryPath
            )) {
                die(
                    'NOTICE: Please set the $rendererName and $rendererLibraryPath values' .
                    '<br />' .
                    'at the top of this script as appropriate for your directory structure'
                );
            }
            header('Content-Type: application/pdf');
            header('Content-Disposition: attachment;filename="01simple.pdf"');
            header('Cache-Control: max-age=0');

            $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
            $objWriter->save('php://output');
            exit;
        }        
}
?>

猜你喜欢

转载自blog.csdn.net/weixin_38615720/article/details/82986582
今日推荐