yii new \PHPExcel() 报错 Class ‘PHPExcel‘ not found (暂时解决),与及导出数据源码

在文件中new PHPExcel()类的时候,报not found错误,但是实际这个类是存在的:
在这里插入图片描述
查找了网上的资料,说是没有composer.json与composer.lock这两个文件导致的,但是我项目中也是有的:
在这里插入图片描述
请教了大佬,说是好像是自动加载类没这个类啥的,但是具体问题我还不知道什么原因,希望有大佬知道的指点一二。
目前我的解决办法是使用require_once引入PHPExcel.php文件

require_once(CORE_PATH  . '/vendor/phpoffice/phpexcel/Classes/PHPExcel.php');

引入之后就能正常访问了.

导出数据完整源码:

 /**
     * 导出
     * @param  array    $titles         标题,一维数组,可传map或单纯标题
     * @param  array    $dataArray      数据,二维数组,可传map或单纯数据
     * @param  string   $filename       文件名,要带后缀
     * @param  string   $bigTitle       居中加粗的大标题,默认为空
     * @param  array    $extra          扩展数据
     * @return file
     */
    public static function export(array $titles, $dataArray, $filename, $bigTitle='', $extra=[])
    {
        require_once(CORE_PATH  . '/vendor/phpoffice/phpexcel/Classes/PHPExcel.php');
        set_time_limit(0);
        ini_set('memory_limit', '512M');

        // 后缀
        $suffix = substr($filename, strrpos($filename, '.'));
        empty($titles) && die('标题数组不能为空!');
        empty($dataArray) && die('数据数组不能为空!');
        !in_array($suffix, ['.xls', '.xlsx']) && die('文件名格式错误!');

        $cacheMethod = \PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;
        $cacheSettings = array('memoryCacheSize ' => '512MB');
        \PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

        $oExcel = new \PHPExcel();
        $oExcel->setActiveSheetIndex(0);
        $sheet = $oExcel->getActiveSheet();

        // 设置列数据格式
        if (!empty(self::$styleFormat)) {
            $fields = array_keys($titles);
            foreach (self::$styleFormat as $field => $formatCode) {
                $offset = array_search($field, $fields);
                $col = chr(65+$offset);
                $sheet->getStyle($col)->getNumberFormat()->setFormatCode($formatCode);
            }
        }

        // 行索引
        $rowIndex = $bigTitle!=''? 2:1;

        $chr = [
            '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'
        ];

        // 设置大标题
        if ($bigTitle != '') {
            $sheet->mergeCells('A1:'. $chr[count($titles)-1] .'1');
            $sheet->getStyle('A1')->applyFromArray([
                'font' => ['bold'=>true],
                'alignment' => ['horizontal'=>\PHPExcel_Style_Alignment::HORIZONTAL_CENTER]
            ]);
            $sheet->setCellValue('A1', $bigTitle);
        }

        // 设置标题 A1 B1 C1 ....
        $colIndex = 0;
        $fieldsMap = [];
        foreach ($titles as $key => $title) {
            $fieldsMap[] = $key;
            $sheet->setCellValue($chr[$colIndex] . $rowIndex, $title);
            $colIndex++;
        }

        // 设置内容 A1 B1 C1 ....   A2 B2 C2 ....
        $rowIndex++;
        foreach ($dataArray as $key => $value)
        {
            foreach ($fieldsMap as $colIndex => $field) {
                if (strrpos($field, '|') !== false) {
                    $temp1 = explode('|', $field);
                    $pos = strrpos($temp1[1], '.');
                    $pos === false && $pos = strlen($temp1[1]);
                    $temp2 = [];
                    $temp2[0] = substr($temp1[1], 0, $pos);
                    $temp2[1] = substr($temp1[1], $pos+1);
                    $val = $value[$temp1[0]];
                    //$val = self::$temp2[0]($extra, $temp2[1], $val);
                    $val = call_user_func_array(array('\common\helpers\ExcelHelper',$temp2[0]),array($extra, $temp2[1], $val, $value));
                } else {
                    $val = $field? $value[$field] : $value;
                }
                $sheet->setCellValue($chr[$colIndex].$rowIndex, $val);
            }
            $rowIndex++;
        }

        header("Content-Type: application/force-download");
        header("Content-Type: application/octet-stream");
        header("Content-Type: application/download");
        if ($suffix == '.xlsx') {
            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        } else {
            header('Content-Type: application/vnd.ms-excel');
        }
        header('Content-Disposition: attachment;filename="'. $filename .'"');
        header("Content-Transfer-Encoding: binary");
        header("Pragma: no-cache");
        $oWriter = \PHPExcel_IOFactory::createWriter($oExcel, 'Excel2007');
        $oWriter->save('php://output');
        $oExcel->disconnectWorksheets();
        exit;
    }

具体详细的导出源码可查看另一篇文章:
https://blog.csdn.net/qq_41187577/article/details/112346208

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值