首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Laravel 使用Excel导出的文件中,指定列数据格式为日期,方便后期的数据筛选操作

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

作者头像
泥豆芽儿 MT
发布于 2024-08-07 06:23:07
发布于 2024-08-07 06:23:07
1.2K00
代码可运行
举报
运行总次数:0
代码可运行
  • 背景 最近,后台运维要求导出的 Excel文件,对于时间的筛选,能满足年份、月份的选择 通过了解,发现: 先前导出的文件,默认列数据都是字符串(文本)格式 同时,因为用的是 Laravel-excel 控件版本的问题,要实现的方式也不同 在此,根据版本不同,进行步骤整理,以便能帮助到有需要的小伙伴 …

  • 所要达成的目标
  • 框架
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Laravel 版本:	Laravel5.8
Excel   版本:	[maatwebsite/excel v2.1.*]  [maatwebsite/excel 3.1]

实现步骤

安装 Laravel-Excel

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
composer require maatwebsite/excel
①. laravel-excel2.1 版本下实现方式

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

  • 提示
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. 根据实际操作,发现,对于下单日期的写入,需计算从 1900-01-01到目标日期的天数
2. 但是,还需多添加两天(容错处理)
3. 并且,无需手动 在天数后面拼接一个"\t"
  • 调用参考
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//指定下单日期,需要计算从 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()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * @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 版本下实现方式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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,
            // ...其他格式
        ];
    }
}
  • 参考,绑定的数据源获取方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * @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 调用方法,参考如下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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';
    }
}
  • 导出文件,参考截图如下:

附录

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Laravel-Excel导出功能文档
可以在闭包中修改一些属性,很多属性可在配置文件中设置默认值 config/excel.php
Tayloryu
2018/07/25
13.6K0
Laravel-Excel导出功能文档
Laravel 后台批量导出 Excel 文件,示例代码
泥豆芽儿 MT
2024/05/31
2830
Python实例篇:自动操作Excel文件(既简单又特别实用)
大家平时在工作与学习中都会操作到Excel文件格式,特别是很多数据的时候,靠人力去识别操作非常容易出错。今天就带大家用Python来处理Excel文件,让你成为一个别人眼中的秀儿~
润森
2022/09/22
2.9K0
Thinkphp使用PhpSpreadsheet导入&导出Excel(适用各种Excel操作场景)
最近公司要做报表功能,各种财务报表、工资报表、考勤报表等,复杂程度让人头大,于是特地封装适用各大场景的导入&导出操作,希望各界大神支出不足之处,以便小弟继续完善。
程序猿的栖息地
2022/04/29
3.8K0
基于前端JS导出Excel文件(减轻服务端压力)
在很多OA或者CRM项目中,基本上都会涉及到Excel的导入导出的问题。 首先想到了POI和阿里的EasyExcel。 如果是小打小闹,导几千数据玩玩,服务器本身基本没什么压力,但如果高并发的情况下,且每次导出量不大服务器肯定是吃不消的(这里指的是没有对导出Excel服务器做优化或者负载处理)
Parker
2020/07/22
15.3K0
基于前端JS导出Excel文件(减轻服务端压力)
帮老婆系列-关于计算Excel表去除指定时间段后的时间差
老婆给了个小小的任务,说是把工单的有效流转时长给计算出来,工单的有效流转时长=工单的开始时间-工单的结束时间-非工作时间段,看起来很简单的一件事情,耗费了我好几个小时,又用了个把小时用python实现了一遍。
python与大数据分析
2022/05/19
1.6K0
帮老婆系列-关于计算Excel表去除指定时间段后的时间差
ThinkPHP5.1 框架下 PhpSpreadsheet 操作 Excel 表的导入导出
相对来说,这个需求是简单的,在此讲解一下鄙人的操作思路: 首先,设置一个 一维的 "目标数据"ThinkPHP5
泥豆芽儿 MT
2022/01/06
3.4K1
ThinkPHP5.1 框架下 PhpSpreadsheet 操作 Excel 表的导入导出
全自动化处理每月缺卡数据,输出缺卡人员信息
不管是上学还是上班都会统计考勤,有些学校或公司会对每月缺卡次数过多(比如三次以上)的人员进行处罚。
阿黎逸阳
2022/11/11
1.9K1
全自动化处理每月缺卡数据,输出缺卡人员信息
java相关工具类(excel导出)
工具类 package com.longrise.SWMS.Util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.L
java攻城狮
2020/10/10
2.6K0
Npoi导入导出Excel操作
    之前公司的一个物流商系统需要实现对订单的批量导入和导出,翻阅了一些资料,最后考虑使用NPOI实现这个需求。 在winform上面实现excel操作:http://www.cnblogs.com/CallmeYhz/p/4920293.html,NPOI的主页:http://npoi.codeplex.com/ 简介 NPOI 是 POI 项目的 .NET 版本。POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目, 使用 NPOI 你就可以在没有安装 Office 或者相应
用户1055830
2018/01/18
3.9K2
Npoi导入导出Excel操作
Excel解析工具easyexcel全面探索
之前我们想到Excel解析一般是使用POI,但POI存在一个严重的问题,就是非常消耗内存。所以阿里人员对它进行了重写从而诞生了easyexcel,它解决了过于消耗内存问题,也对它进行了封装让使用者使用更加便利
老梁
2019/10/25
4.7K0
Excel解析工具easyexcel全面探索
Excel文件导入导出操作
日常开发工作中对于文件的相关操作大家多少都会涉及:上传解析、数据导出等。此篇内容主要分享一下工作中常用的Excel文件的解析和导出工作类实现。
沁溪源
2020/10/13
1.4K0
Python Excel操作
最近公司要把Excel导入到mysql数据库,查了几篇博文,这几项是非常有用的,记录下来。 一、安装xlrd模块 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境。 二、使用介绍 1、导入模块 import xlrd 2、打开Excel文件读取数据 data = xlrd.open_workbook('excelFile.xls') 3、使用技巧 获取一个工作表 table =
机器学习AI算法工程
2018/03/12
1.6K0
EasyExcel,让excel导入导出更加简单
在做excel导入导出的时候,发现项目中封装的工具类及其难用,于是去gitHub上找了一些相关的框架,最终选定了EasyExcel。之前早有听闻该框架,但是一直没有去了解,这次借此学习一波,提高以后的工作效率。
全栈程序员站长
2021/06/29
2.1K0
excel 导出json_导出的数据格式不对
但是用这种方式会出现一种问题,就是当你的table有分页的情况下,只能抓取当前分页的数据。
全栈程序员站长
2022/09/20
1.4K0
excel 导出json_导出的数据格式不对
PhpSpreadsheet导出Excel超过26列解决办法
使用PhpSpreadsheet导出excel文件的时候,发现报了一个错误,后来查询问题才发现是列数超过26列的问题。
美团骑手
2021/12/24
1.1K0
【黄啊码】PHP配合xlswriter实现无限表头层级Excel导出
本文介绍基于PHP扩展xlswriter的Vtiful\Kernel\Excel类可以支持无限层级的复杂表头导出!后续也可能会持续更新优化
黄啊码
2022/05/12
8490
【黄啊码】PHP配合xlswriter实现无限表头层级Excel导出
vue实现excel导出
1.引入组件: npm install file-saver xlsx -S 2.在需要的页面引入: import FileSaver from 'file-saver' import XLSX from 'xlsx' 3.封装组件 <template> <transition name="fadeIn" > <div v-show='false'> <el-table :id="exportExcelInfo.excelId" :data="tableDat
安德玛
2022/03/05
6810
springboot项目导出excel 合并单元格表格
六月的雨在Tencent
2024/03/28
3230
springboot项目导出excel 合并单元格表格
php导出excel表格_phpspreadsheet导出
单个sheet页Excel2003版最大行数是65536行。Excel2007开始的版本最大行数是1048576行。Excel2003的最大列数是256列,2007以上版本是16384列。
全栈程序员站长
2022/09/30
24.9K1
php导出excel表格_phpspreadsheet导出
相关推荐
Laravel-Excel导出功能文档
更多 >
LV.0
这个人很懒,什么都没有留下~
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档