PhpSpreadsheet 导出excel 找不到setCellValueByColumnAndRow

php 复制代码
<?php
namespace app\admin\controller;
use think\facade\Db;
use think\facade\Request;
use app\admin\controller\BaseController;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

class Product extends BaseController
{
    public function userorder_list_export(){
        
        $list = Db::name('userorder')->order('id desc')->select()->each(function($item, $key){
            
            $lists = explode(',',$item['product_list']);
            
            $plist = array();
            
            foreach ($lists as $ks => $v){
                
                $id = explode('_',$v)[0];
                
                $pinfo = Db::name('product')->where('id',$id)->find();
                $pinfo['cate_name'] = Db::name('product_cate')->where('id','=',$pinfo['cate_id'])->value('title');
                $pinfo['apps_name'] = Db::name('product_apps')->where('id','=',$pinfo['apps_id'])->value('title');
                $pinfo['diseases_name'] = Db::name('product_diseases')->where('id','in',$pinfo['diseases_id'])->select()->toArray();
                $pinfo['diseases_names'] = Db::name('product_diseasess')->where('id','=',$pinfo['diseases_ids'])->value('title');
                $pinfo['source_name'] = Db::name('product_source')->where('id','=',$pinfo['source'])->value('title');
                $pinfo['format_name'] = Db::name('product_format')->where('id','in',$pinfo['format'])->select()->toArray();
                
                $pinfo['add_num'] = intval(explode('_',$v)[1]);
                array_push($plist,$pinfo);
                
            }
            
            $item['product_lists'] = $plist;
            
            //$item['uinfo'] = Db::name('users')->where('id',$item['user_id'])->find();
            
            $item['create_time'] = date('m-d-Y',$item['create_time']);
            return $item;
        });
        
        $fileName = '会员订单 '.date("Y-m-d",time()) .'导出';
        //实例化spreadsheet对象
        $spreadsheet = new Spreadsheet();
    
        //获取活动工作簿
        $sheet = $spreadsheet->getActiveSheet();
        //设置单元格表头
        $sheet->setCellValue('A1', '序号');
        $sheet->setCellValue('B1', 'Order Number');
        $sheet->setCellValue('C1', 'First name');
        $sheet->setCellValue('D1', 'Last name');
        $sheet->setCellValue('E1', 'Email');
        $sheet->setCellValue('F1', 'Country');
        $sheet->setCellValue('G1', 'Organization Name');
        $sheet->setCellValue('H1', 'Street Address');
        $sheet->setCellValue('I1', 'City');
        $sheet->setCellValue('J1', 'State');
        $sheet->setCellValue('K1', 'Zip Code');
        $sheet->setCellValue('L1', 'Customer Number');
        $sheet->setCellValue('M1', 'mobile');
        $sheet->setCellValue('N1', 'Message');
        $sheet->setCellValue('O1', 'Product List(Product Name / TYPE / Catalog / Number)');
        $sheet->setCellValue('P1', 'Time');
        

        $i = 2;
        foreach($list as $key => $val){
            
            $sheet->setCellValueByColumnAndRow('1',$i,$i-1);
            $sheet->setCellValueByColumnAndRow('2',$i,$val['order_id']);
            $sheet->setCellValueByColumnAndRow('3',$i,$val['first_name']);
            $sheet->setCellValueByColumnAndRow('4',$i,$val['last_name']);
            $sheet->setCellValueByColumnAndRow('5',$i,$val['email']);
            $sheet->setCellValueByColumnAndRow('6',$i,$val['country']);
            $sheet->setCellValueByColumnAndRow('7',$i,$val['organization_name']);
            $sheet->setCellValueByColumnAndRow('8',$i,$val['street_address']);
            $sheet->setCellValueByColumnAndRow('9',$i,$val['city']);
            $sheet->setCellValueByColumnAndRow('10',$i,$val['state']);
            $sheet->setCellValueByColumnAndRow('11',$i,$val['zip_code']);
            $sheet->setCellValueByColumnAndRow('12',$i,$val['customer_number']);
            $sheet->setCellValueByColumnAndRow('13',$i,$val['mobile']);
            $sheet->setCellValueByColumnAndRow('14',$i,$val['message']);
            
            $text = '';
            
            foreach ($val['product_lists'] as $k => $v){
                
                $text .= $v['product_name'].' / ' .$v['cate_name'].' / '.$v['catalog'].' / '.$v['add_num']."\n";
                
            }
            $sheet->setCellValueByColumnAndRow('15',$i,trim($text,"\n"));
            
            $sheet->getStyle('P'.$i)->getAlignment()->setWrapText(true);
            
            $sheet->setCellValueByColumnAndRow('16',$i,$val['create_time']);
            
            $i++;
        
        }
        
        //设置自动列宽
        $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(5);
        $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(25);
        $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(10);
        $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(10);
        $spreadsheet->getActiveSheet()->getColumnDimension('E')->setWidth(25);
        $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(15);
        $spreadsheet->getActiveSheet()->getColumnDimension('G')->setWidth(25);
        $spreadsheet->getActiveSheet()->getColumnDimension('H')->setWidth(15);
        $spreadsheet->getActiveSheet()->getColumnDimension('I')->setWidth(15);
        $spreadsheet->getActiveSheet()->getColumnDimension('J')->setWidth(15);
        $spreadsheet->getActiveSheet()->getColumnDimension('K')->setWidth(15);
        $spreadsheet->getActiveSheet()->getColumnDimension('L')->setWidth(15);
        $spreadsheet->getActiveSheet()->getColumnDimension('M')->setWidth(15);
        $spreadsheet->getActiveSheet()->getColumnDimension('N')->setWidth(15);
        $spreadsheet->getActiveSheet()->getColumnDimension('O')->setWidth(50);
        $spreadsheet->getActiveSheet()->getColumnDimension('P')->setWidth(15);
        
        // //MIME协议,文件的类型,不设置描绘默认html
        // header('Content-Type:application/vnd.openxmlformats-officedoument.spreadsheetml.sheet');
        // //MIME 协议的扩展
        // header("Content-Disposition:attachment;filename={$fileName}.xlsx");
        // //缓存控制
        // header('Cache-Control:max-age=0');
        
        $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet,'Xlsx');
        
        $writer->save('./uploads/'.$fileName.'.Xlsx');
        
        $url = Request::domain().'/uploads/'.$fileName.'.Xlsx';
        
        echo apireturn(200,200,'success',$url);
        die;
    }
?>

运行报错

Call to undefined method PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::setCellValueByColumnAndRow

php 复制代码
    public function getCellByColumnAndRow($columnIndex, $row, $createIfNotExists = true){
        $columnLetter = Coordinate::stringFromColumnIndex($columnIndex);
        $coordinate = $columnLetter . $row;

        if ($this->cellCollection->has($coordinate)) {
            return $this->cellCollection->get($coordinate);
        }

        // Create new cell object, if required
        return $createIfNotExists ? $this->createNewCell($coordinate) : null;
    }
    
    /**
     * Set a cell value by using numeric cell coordinates.
     *
     * @param int $columnIndex Numeric column coordinate of the cell
     * @param int $row Numeric row coordinate of the cell
     * @param mixed $value Value of the cell
     *
     * @return Worksheet
     */
    public function setCellValueByColumnAndRow($columnIndex, $row, $value)
    {
        $this->getCellByColumnAndRow($columnIndex, $row)->setValue($value);

        return $this;
    }

尝试复制以上方法到Worksheet.php

问题解决

相关推荐
4SAPI12 小时前
企业大模型API服务商推荐:从多模型接入到AI API Gateway的技术选型分析
人工智能·php
子非鱼a17 小时前
【WEB】[NewStarCTF 2023 公开赛道]include 0。0
php
DevUp18 小时前
停更老站往哪搬:PHP 老站的五条出路(番外七)
php·cms
专业程序开发源21 小时前
springboot旅游推荐系统82074-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·php·课程设计·旅游
sbjdhjd1 天前
从“删除后重生”到认证绕过:PHP 常驻内存实验与 Cacti remote_agent 命令执行链路复盘
安全·web安全·网络安全·数据挖掘·php·网络攻击模型·安全架构
JaguarJack1 天前
PHP 8.6 只是个小版本,三十项弃用却已在为 PHP 9.0 铺路
后端·php·服务端
BingoGo1 天前
PHP 8.6 只是个小版本,三十项弃用却已在为 PHP 9.0 铺路
后端·php
catchadmin2 天前
Whim 是什么?一门把 PHP 被否决的设想真跑起来的实验语言
php
ID34610744202 天前
【课程设计】基于Spring Boot+Vue的游戏账号租赁系统的设计与实现-计算机毕设 附源码50345
javascript·vue.js·spring boot·python·node.js·php·课程设计
PHP实战开发录2 天前
PHP接口偶发变慢怎么查
前端·php·开发