Laravel Excel 安装,导入导出,及导出乱码

Laravel Excel 导出csv文件乱码

背景:Laravel Excel 导出 csv 文件时,会出现乱码,但改为 xlsx 格式,则正常。但凡乱码,都跟bom有或多或少的关系

解决方法:修改配置文件 config/excel.php, 将 use_bom 设置为 true,这样导出的CSV文件就有BOM头了


// config / excel.php

 'csv'        => [
        /*
        |--------------------------------------------------------------------------
        | setUseBom
        |--------------------------------------------------------------------------
        */

        //'use_bom' => false
        'use_bom' => true
    ],

如若找不到 config/excel.php 的配置文件,可执行以下命令生成

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"

Laravel Excel 安装

  1. 首先在Laravel项目根目录下使用Composer安装依赖:
composer require "maatwebsite/excel:~2.1.0"
  1. 在config/app.php中注册服务提供者到providers数组:
Maatwebsite\Excel\ExcelServiceProvider::class,
  1. 在config/app.php中注册门面到aliases数组:
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
  1. 建议你生成Laravel Excel的配置文件,使用如下命令:
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"

然后你会发现在config目录下有一个excel.php文件
你可以打开看一下大概的配置项,主要就是缓存,表单,和导入,导出的一些设置。


Laravel Excel 实现 Excel/CSV 文件导入导出功能

  1. 导出功能
// 在controller使用

use Excel;

	/**
     * 导出
     */
    public function export_test(Request $request)
    {
        $result = $this->returnList($request);
        //print_r($result['data']);exit;
        if (isset($result['data']) && !empty($result['data'])) {
			// 文件名
            $title = '导出数据_' . date('YmdHis');
            // 获取导出需要的字段名
            $field = $this->get_header($request, 'value'); 
            // 重组数据
            // [从数据库搜索的结果(有冗余或缺失字段且顺序不当),按字段名排序,并去除冗余及填充缺失]
            $list = re_com_array($field, $result['data']); 
            // 获取表头
            $header = $this->get_header($request, 'label');
            $data = array_merge(array($header), $list);
            
            Excel::create($title, function ($excel) use ($data){
                $excel->sheet('score', function ($sheet) use ($data){
                    $sheet->rows($data);
                });
            })->export('csv'); // csv || xlsx
            // 如需上传到服务器,加入 store 方法即可
            /*Excel::create($title, function ($excel) use ($data){
                $excel->sheet('score', function ($sheet) use ($data){
                    $sheet->rows($data);
                });
            })->store('csv')->export('csv');*/
        }
        return parent::fail(ErrorCode::NO_DATA, '暂无相关数据');
    }
// 在 common/functions.php 中
if (!function_exists('re_com_array'))
{
    /**
     * 数据根据字段排序,去除多余字段,补充缺失字段
     * 用于excel导出
     * @param   array       $field  字段数组
     * @param   array       $arr    数据
     * @return  array
     * @author  Edmund
     */
    function re_com_array($field, $arr)
    {
        $data = [];
        if(!empty($field))
        foreach ($arr as $key => $value) {
            $temp = [];
            foreach ($field as $row) {
                $temp[] = isset($value[$row]) ? $value[$row] : '-';
            }
            $data[] = $temp;
        }
        return $data;
    }
}

导出的数据格式,如下
导出的数据格式

  1. 导入功能
	/**
     *
     * Excel导入
     */
    public function import(){
        $filePath = 'storage/exports/'.iconv('UTF-8', 'GBK', '用户信息').'.xls';
        Excel::load($filePath, function($reader) {
            $data = $reader->all();
        });
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值