Laravel 使用Excel导出的文件中,指定列数据格式为日期,方便后期的数据筛选操作

news2024/9/20 14:29:09
  • 背景
    最近,后台运维要求导出的 Excel文件,对于时间的筛选,能满足年份、月份的选择
    通过了解,发现:
    先前导出的文件,默认列数据都是字符串(文本)格式
    同时,因为用的是 Laravel-excel 控件版本的问题,要实现的方式也不同
    在此,根据版本不同,进行步骤整理,以便能帮助到有需要的小伙伴 …

  • 所要达成的目标
    在这里插入图片描述

  • 框架

Laravel 版本:	Laravel5.8
Excel   版本:	[maatwebsite/excel v2.1.*]  [maatwebsite/excel 3.1]

实现步骤

安装 Laravel-Excel

首先,确保你已经安装了 Laravel-Excel 包,可以通过 Composer 安装

composer require maatwebsite/excel

①. laravel-excel2.1 版本下实现方式

  • 参考技术文档:Laravel Excel2.1 - Column formatting

参考文章:laravel-excel导出的时候写入的日期格式数据怎么在excel中正确显示成可以筛选的日期格式数据

  • 提示
1. 根据实际操作,发现,对于下单日期的写入,需计算从 1900-01-01到目标日期的天数
2. 但是,还需多添加两天(容错处理)
3. 并且,无需手动 在天数后面拼接一个"\t"
  • 调用参考
//指定下单日期,需要计算从 1900-01-01到目标日期的天数
...
//举例
$order_create_date = '2024-07-23';
$excelListData['下单日期'] = get_days_since1900($order_create_date);
$this->saveExcel($title, $excelListData,'订单列表',['W' => 'yyyy-mm-dd']);
  • 整理 保存Excel文件方法、get_days_since1900()
    /**
     * @notes:保存Excel文件
     * @param string $title     标题
     * @param array $cellData   数据
     * @param string $sheetName 工作表名
     * @param array $columnFormat 列格式
     * @author: zhanghj
     * @Time: 2024/8/6 9:38
     */
    public function saveExcel($title = 'title', $cellData = [], $sheetName = 'sheet1',$columnFormat = [])
    {
        Excel::create($title, function ($excel) use ($cellData, $sheetName,$columnFormat) {

            $excel->sheet($sheetName, function ($sheet) use ($cellData,$columnFormat) {
                if ($columnFormat){
                    $sheet->setColumnFormat($columnFormat);
                }
                $sheet->rows($cellData);
            });

        })->store('xlsx'); // 文件默认保存到storage/exports目录下
    }

/**
 * @notes:获取 从1900-01-01的天数
 * @param string $curr_date 目标日期
 * @return false|int  测试发现,计算所得的天数需加2,才能满足当前应用
 * @throws Exception
 * @author: zhanghj
 * @Time: 2024/8/6 10:10
 */
function get_days_since1900($curr_date = '') {
    $date = new \DateTime($curr_date);
    $date1900 = new \DateTime('1900-01-01');
    $interval = $date1900->diff($date)->days;
    return intval($interval+2);
}

②. laravel-excel3.1 版本下实现方式

  • 参考技术文档:Laravel Excel3.0 Formatting columns

  • 创建导出类 UserExport.php

<?php
namespace App\Http\Model;

use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use PhpOffice\PhpSpreadsheet\Shared\Date;

/**
 * Excel 导出类
 * Class UserExport
 * @package App\Http\Model
 */
class UserExport implements FromCollection,WithMapping,WithHeadings,WithColumnFormatting
{
    use Exportable;

    public function collection()
    {
        return (new User())->getExportData();
    }

    public function map($row): array
    {
        $dateTime = new \DateTime($row->reg_date);
        // 数据映射逻辑
        return [
            $row->id,
            $row->nick_name,
            Date::dateTimeToExcel($dateTime),// 确保这里是日期格式
            $row->auth_tel,
            // ...其他数据映射
        ];
    }

    public function headings(): array
    {
        // 表头
        return [
            'ID',
            '昵称',
            '注册日期',
            '手机号码'
            // ...其他表头
        ];
    }

    public function columnFormats(): array
    {
        // 设置日期格式的筛选
        return [
            'C' => NumberFormat::FORMAT_DATE_YYYYMMDD,
            // ...其他格式
        ];
    }
}

  • 参考,绑定的数据源获取方法
    /**
     * @notes:获取导出的数据
     * @return array 注意返回的数据为 Collection 集合形式
     * @author: zhanghj
     * @Time: 2024/8/6 17:14
     */
    public function getExportData(){
        $list = $this->select('id','nick_name','reg_time','auth_tel')->limit(7)->get();
        foreach ($list as $key => $value){
            $dateString = date("Y-m-d",$value['reg_time']??0);
            $list[$key]['reg_date'] = $dateString;
        }
        return $list??[];
    }
  • controller 调用方法,参考如下:
class TestController extends Controller
{
    public function index()
    {
       $filePath = 'exports/users_'.time().'.xlsx';
       //将文件存储到目录 “storage\app\exports” 下
       $export = Excel::store(new UserExport(2018),$filePath);
		//return Excel::download(new UserExport,$filePath); //如果直接浏览器下载文件,需注意路径不能有 /
        return 'Test - MT';
    }
}
  • 导出文件,参考截图如下:

附录

  • 参考文章
    • laravel-excel导出的时候写入的日期格式数据怎么在excel中正确显示成可以筛选的日期格式数据
    • Laravel Excel 3.1 导出表格详解(自定义sheet,合并单元格,设置样式,格式化列数据)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987166.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

H3C MSR NAT66配置指北

正文共&#xff1a;1456 字 14 图&#xff0c;预估阅读时间&#xff1a;1 分钟 通过前面的介绍&#xff08;企业路由器配置IPv6家用宽带的PPPoE拨号示例&#xff09;&#xff0c;想必你已经可以实现让MSR路由器通过PPPoE拨号接入IPv6网络。 正常来讲&#xff0c;通过前面的配置…

PLSQL 无客户端连接服务器设置

文章目录 1 概述1.1 使用场景 2 步骤2.1 下载 PLSQL 客户端2.2 观察 工具-首选项-OCI库&#xff08;自动检测为空&#xff09;2.3 下载 instantclient2.4 配置环境变量2.5 配置 PLSQL 3 测试 1 概述 1.1 使用场景 场景&#xff1a;只需要连接服务器上的 Oracle&#xff0c;而…

C++:多态二

在面向对象方法中&#xff0c;所谓多态性就是不同对象收到相同消息&#xff0c;产生不同的行为。在C程序设计中&#xff0c;多态性是指用一个名字定义不同的函数&#xff0c;这些函数执行不同但又类似的操作&#xff0c;这样就可以用同一个函数名调用不同内容的函数。换言之&am…

虚拟机ubuntu22.04找不到ttyUSB*端口

问题描述&#xff1a; 在虚拟机上运行Ubuntu22.04&#xff0c;使用 ls /dev/ttyUSB* 发现查不着不到相关的端口文件。 排查问题及解决办法&#xff1a; 问题1&#xff1a;排查数据线是否只是单纯的充电线&#xff0c;单纯充电线无法进行数据传输&#xff0c;需要替换为数据…

怎么申请IP SSL证书?

申请 IP SSL 证书的过程通常涉及以下几个步骤。下面是一个概括性的指南&#xff0c;具体细节可能会根据不同的证书颁发机构&#xff08;CA&#xff09;而有所不同。以下步骤是基于 JoySSL 的流程&#xff0c;但大部分 CA 的申请流程都会有类似的要求&#xff1a; 1、确认IP地址…

介绍一个基于Ring 3 的rootkit

首先先科普用户态内核态 两者的在指令上的区别 一般来说&#xff0c;ring0权限下开放的指令有&#xff1a;IO读写、网卡访问、申请内存、访问硬件资源。 一般来说&#xff0c;ring3权限下开放的指令有&#xff1a;普通的计算指令等 两者在空间权限的区别 用户态和内核态…

装修装饰行业4G/5G无线视频监控技术方案

目录 一、引言 二、技术优势 三、系统方案设计 1、系统架构 2、监控前端 3、监控中心 四、系统功能 1、基本功能 &#xff08;1&#xff09;实时视频监控 &#xff08;2&#xff09;录像存储回放 &#xff08;3&#xff09;报警联动 &#xff08;4&#xff09;语音…

超越sd3!比肩Midjourney-v6?AI绘画大模型FLUX1.0详细评测与本地部署方法(附安装文件)

​ FLUX.1模型是什么&#xff1f; FLUX模型是一个开源的AI图像生成模型&#xff0c;由黑森林工作室研发。 堪比sd3以及Midjourney-v6 背景/backdrop 黑森林工作室&#xff08;Black Forest Labs&#xff09;由前Stability AI核心成员团队成立&#xff0c;专注于开发高级生成式…

脚本:自动生成精准的Oracle AWR报告

很多朋友把AWR报告发过来让我帮忙分析Oracle数据库的性能&#xff0c;但很多报告都有一个共同的缺陷&#xff1a;就是这些报告覆盖的时间范围太广&#xff0c;导致性能问题的数据被严重稀释。 英文原文&#xff1a;Script: Generating Focused AWR Reports 为了解决这个问题&a…

多模态大模型 intern_vl 2.0版本解读

目录 更大规模的语言模型 多模态输入 多任务输出 性能表现 github:GitHub - OpenGVLab/InternVL: [CVPR 2024 Oral] InternVL Family: A Pioneering Open-Source Alternative to GPT-4o. 接近GPT-4o表现的可商用开源多模态对话模型 论文&#xff1a;https://arxiv.org/pdf…

TypeScript循环2

循环2 for(开始条件&#xff0c;结束条件&#xff0c;变量更新){} for使程序能够重复执行某段代码&#xff0c;直至满足特定条件为至。 // 打印1~100for(let i:number0;i<100;i){console.log(i);}死循环,程序中要避免出现 即使需要你使用&#xff0c;也需要有退出条件 …

Windows系统cmd黑窗口cd命令不起作用的解决办法

一般这种情况是通过win r 输入cmd唤起得窗口是在c盘&#xff0c;而想切换到其他磁盘目录却发现命令并不生效&#xff0c;例如&#xff1a; 解决的办法就是先切换磁盘&#xff0c;再cd到文件夹目录&#xff0c;比如我切换到E盘&#xff0c;就是E&#xff1a; 然后再cd目标目录…

探索Linux世界之Linux环境开发工具的使用

一、yum -- Linux软件包管理器 1、什么是yum yum(Yellow dog Updater, Modified)&#xff1a; 是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上。 在Linux上安装软件的方式&#xff1a; 源代码直接安装&#xff1a;在Linux下安装软件, 一个通…

存储实验:FC-SAN实验与光交配置(GUICLI)

目录 目的环境介绍拓扑环境规划环境解释 实验流程0. FC-SAN存储 WWN查看1. FC-SAN业务主机&#xff08;linux&#xff09;配置1.1 IP配置1.2 查看wwn号 2. 光交配置2.1 GUI2.1.1 跳板机配置2.1.1.1 配置IP2.1.1.2 安装jdk2.1.1.3 浏览器登录光交IP 2.1.2 光交-Alias配置2.1.2.0…

【目标检测类】YOLOv5网络模型结构基本原理讲解

1. 基本概念 YOLOv5模型结构主要包括以下组成部分&#xff1a;‌ 输入端&#xff1a;‌YOLOv5的输入端采用了多种技术来增强模型的性能&#xff0c;‌包括Mosaic数据增强、‌自适应锚框计算、‌以及自适应图片缩放。‌这些技术有助于提高模型的泛化能力和适应不同尺寸的输入图…

springboot+vue+mybatis汽车租赁管理+PPT+论文+讲解+售后

汽车租赁系统是针对目前汽车租赁管理的实际需求&#xff0c;从实际工作出发&#xff0c;对过去的汽车租赁管理系统存在的问题进行分析&#xff0c;完善客户的使用体会。采用计算机系统来管理信息&#xff0c;取代人工管理模式&#xff0c;查询便利&#xff0c;信息准确率高&…

Unity补完计划 之 SpriteRender

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 1.SpriteRenderer是什么 渲染精灵用的&#xff0c;是渲染的核心组件&#xff0c;有许多重要参数所以要详细讲一讲 Spri…

大语言模型VRAM估算指南和工具介绍

为了有效地执行大型语言模型(LLM)推理&#xff0c;了解GPU VRAM需求至关重要。VRAM对于存储模型参数、激活、处理批量大小和精度设置至关重要。估算VRAM使用情况的基本公式是:参数数(精度/ 8) 1.2。现代优化技术和框架可以进一步减少VRAM的需求。像VRAM Estimator, Hugging Fac…

Harbor 仓库一键安装

文章目录 一、场景说明二、脚本职责三、参数说明四、操作示例五、注意事项 一、场景说明 本自动化脚本旨在为提高研发、测试、运维快速部署应用环境而编写。 脚本遵循拿来即用的原则快速完成 CentOS 系统各应用环境部署工作。 统一研发、测试、生产环境的部署模式、部署结构、…

H5页面返回时提示用户返回将丢失信息

效果图 代码&#xff0c;组件封装弹窗 <template><div><van-popup v-model"show" :close-on-click-overlay"false" class"popup"><div class"content"><div class"title">提示:</div>…