Laravel Excel 导出中文名称的文件时候出现随机字符串

1. 运行环境

PHP 7.4
Laravel 5.5

1). 当前使用的 Laravel 版本?

Laravel Framework 5.5.50
//: <> (使用 php artisan --version 命令查看)

2). 当前使用的 php/php-fpm 版本?

PHP 版本: v7.4.24,

php-fpm 版本:phpfpm_74

3). 当前系统

Liunx 7.6

4). 业务环境

测试环境

5). 相关软件版本

Laravel Excel 3.1

2. 问题描述?

使用 Laravel Excel 3.1 使用View 模板 和 FromCollection 模式导出文件的时候
中文名称显示不正确,显示的随机字符串;

Laravel Excel 导出中文名称的文件时候出现随机字符串

3. 您期望得到的结果?

期望能够显示代码中设置的中文名
![Laravel Excel 导出中文名称的文件时候出现随机字符串]
Laravel Excel 导出中文名称的文件时候出现随机字符串

Laravel Excel 导出中文名称的文件时候出现随机字符串

Laravel Excel 导出中文名称的文件时候出现随机字符串

4. 您实际得到的结果?

51f10892-5e10-47be-9286-54dd418d58dc.xls

============================================================
今天又重新试了下

Laravel Excel 导出中文名称的文件时候出现随机字符串

我设置的文件名后缀是 xlsx

但是导出来的实际文件是 xls

Laravel Excel 导出中文名称的文件时候出现随机字符串

这个问题是怎么回事呢?

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7

导出的后缀是.xls, 代码里是.xlsx,检查文件路径

2年前 评论
SanXiao

你那个应该是编码的问题。

我用的这个 “maatwebsite/excel”: “^3.1”

 return  Excel::download(
            new DeliverOrderExport($store_id,$start_time,$end_time,$order_status),
            '查询的订单'. Carbon::today()->toDateString().'-'.time() .'.xlsx'
        );
<?php

namespace App\Exports;

use App\Models\Order;
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\WithHeadings;

class DeliverOrderExport implements FromArray, WithHeadings
{


    private $store_id;
    private $start_time;
    private $end_time;
    private $order_status;

    public function __construct($store_id,$start_time,$end_time,$order_status){
        $this->store_id = $store_id;
        $this->start_time = $start_time;
        $this->end_time = $end_time;
        $this->order_status = $order_status;
    }
    public function headings(): array
    {
        return [
            '订单号',
            '订单商品ID',
            '商品名称',
            '单价',
            '购买数量',
            '规格名称',
            '收件人姓名',
            '收件人手机号',
            '收货地址',
            '买家留言',
        ];
    }

    /**
     * @return array
     */
    public function array(): array
    {

        if($this->order_status == 'pending'){
            $where = ['store_id'=>$this->store_id,'refund_status'=>$this->order_status];
        }else{
            $where = ['store_id'=>$this->store_id,'order_status'=> $this->order_status];
        }
        $data = Order::query()->with('items')
            ->select('no','name','mobile','address','id','order_name','remark')
            ->where($where)
            ->whereBetween('created_at',[$this->start_time,$this->end_time])
            ->get()
            ->toArray();
        $ret = [];
        foreach ($data as $val) {
            $ret[] = [
                'no' => $val['no']."\t",
                'product_id' => $val['items'][0]['product_id'] ,
                'order_name' => $val['order_name'],
                'price' =>  $val['items'][0]['price'] ,
                'amount' => $val['items'][0]['amount'] ,
                'sku_name' => $val['items'][0]['sku_name'] ,
                'name' => $val['name'] ,
                'mobile' => $val['mobile']."\t",
                'address' => $val['address'] ,
                'remark' => $val['remark'] ,
            ];
        }
        return $ret;
    }
}
2年前 评论
tonyshang (楼主) 2年前
SanXiao (作者) 2年前
tonyshang (楼主) 2年前

楼主问题解决了么?同样遇到这个问题

2年前 评论
tonyshang (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!