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 导出中文名称的文件时候出现随机字符串

这个问题是怎么回事呢?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 7

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

3年前 评论
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;
    }
}
3年前 评论
tonyshang (楼主) 3年前
SanXiao (作者) 3年前
tonyshang (楼主) 3年前

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

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

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