使用POI设计一个限制导出日期为三十天,且导出文件为excel

这篇具有很好参考价值的文章主要介绍了使用POI设计一个限制导出日期为三十天,且导出文件为excel。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用POI设计一个限制导出日期为三十天,且导出文件为excel,前端使用Vue的element ui进行设计,前端可以通过选择时间来导出具体的表格数据,根据用户选择的时间进行Excel文件的数据导出。
按照需求来设计代码,根据element ui对前端代码进行设计。

后端使用 Java,依赖 Apache POI 库。前端使用 Vue 框架和 Element UI 库。

后端 Java 代码:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.bind.annotation.*;

import java.io.FileOutputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/export")
public class ExcelExportController {

    @PostMapping("/data")
    public String exportExcel(@RequestBody ExportRequestDto exportRequestDto) {
        LocalDate startDate = exportRequestDto.getStartDate();
        LocalDate endDate = exportRequestDto.getEndDate();

        // 模拟从数据库或其他数据源获取数据
        List<ExcelData> data = fetchDataFromDataSource(startDate, endDate);

        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Data");

        // 创建表头
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("ID");
        headerRow.createCell(1).setCellValue("Name");

        // 填充数据
        int rowNum = 1;
        for (ExcelData item : data) {
            Row row = sheet.createRow(rowNum++);
            row.createCell(0).setCellValue(item.getId());
            row.createCell(1).setCellValue(item.getName());
        }

        // 导出文件
        String filePath = "path/to/your/file.xlsx";
        try (FileOutputStream outputStream = new FileOutputStream(filePath)) {
            workbook.write(outputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return filePath;
    }

    private List<ExcelData> fetchDataFromDataSource(LocalDate startDate, LocalDate endDate) {
        // 模拟从数据库或其他数据源查询数据
        // 返回符合日期范围的数据列表
        List<ExcelData> dummyData = new ArrayList<>();
        // ... 查询数据库或数据源 ...
        return dummyData;
    }

    // 数据对象类
    private static class ExcelData {
        private int id;
        private String name;

        public ExcelData(int id, String name) {
            this.id = id;
            this.name = name;
        }

        // getter 和 setter 方法省略...
    }
}

在上述代码中,我们使用了 Spring Boot 的注解 @RestController@RequestMapping 来创建一个简单的后端控制器。ExportRequestDto 是一个包含开始日期和结束日期的请求数据对象。

<template>
  <div>
    <el-date-picker
      v-model="startDate"
      type="date"
      placeholder="选择开始日期"
    ></el-date-picker>
    <el-date-picker
      v-model="endDate"
      type="date"
      placeholder="选择结束日期"
    ></el-date-picker>
    <el-button @click="exportData">导出 Excel</el-button>
  </div>
</template>

<script>
import axios from "axios";

export default {
  data() {
    return {
      startDate: "",
      endDate: "",
    };
  },
  methods: {
    exportData() {
      const exportRequest = {
        startDate: this.startDate,
        endDate: this.endDate,
      };
      axios
        .post("/export/data", exportRequest, {
          responseType: "blob",
        })
        .then((response) => {
          const url = window.URL.createObjectURL(new Blob([response.data]));
          const link = document.createElement("a");
          link.href = url;
          link.setAttribute("download", "exported_data.xlsx");
          document.body.appendChild(link);
          link.click();
          document.body.removeChild(link);
        });
    },
  },
};
</script>

好的,页面我们也创建好了,接下来,我们利用当前页面来实现对需要导出的文件在前端页面上进行限制,在上述代码中,我们使用了 Vue 的 Element UI 库,用el-date-picker组件让用户选择开始日期和结束日期。el-button 组件绑定了 exportData 方法,并通过 Axios 发送 POST 请求到后端的 /export/data 路由,请求的数据包括开始日期和结束日期。

后端接收到请求后,根据日期范围从数据库或其他数据源获取对应的数据,并使用 Apache POI 创建并填充 Excel 文件。最后,将文件保存到指定路径,并通过响应返回文件路径。

前端通过 Axios 的 responseType: "blob" 设置响应类型为二进制流,接收到响应后将二进制流转换为下载链接,并触发下载操作。

在上述前端Vue界面中做限制,限制选择的开始时间到结束时间为30天,且开始时间不能大于结束时间

<template>
  <div>
    <el-date-picker
      v-model="startDate"
      type="date"
      placeholder="选择开始日期"
      :picker-options="pickerOptions"
      @input="handleStartDateChange"
    ></el-date-picker>
    <el-date-picker
      v-model="endDate"
      type="date"
      placeholder="选择结束日期"
      :picker-options="pickerOptions"
      :disabled="startDate === ''" // 禁用结束日期输入框,直到选择了开始日期
    ></el-date-picker>
    <el-button :disabled="!isDateRangeValid" @click="exportData">导出 Excel</el-button>
  </div>
</template>

<script>
import axios from "axios";

export default {
  data() {
    return {
      startDate: "",
      endDate: "",
      pickerOptions: {
        disabledDate: (time) => {
          // 禁用当前日期之后的日期
          const today = new Date();
          today.setHours(0, 0, 0, 0);
          return time.getTime() > today.getTime();
        },
      },
    };
  },
  computed: {
    isDateRangeValid() {
      // 验证日期范围是否合法,开始日期不能大于结束日期且不超过30天
      if (!this.startDate || !this.endDate) {
        return false; // 如果开始日期或结束日期为空,返回 false
      }
      const startDate = new Date(this.startDate);
      const endDate = new Date(this.endDate);
      const timeDiff = endDate.getTime() - startDate.getTime();
      const daysDiff = timeDiff / (1000 * 3600 * 24); // 计算天数差值
      return startDate <= endDate && daysDiff <= 30;
    },
  },
  methods: {
    handleStartDateChange() {
      // 验证开始日期和结束日期
      if (this.startDate && this.endDate) {
        const startDate = new Date(this.startDate);
        const endDate = new Date(this.endDate);
        if (startDate > endDate) {
          // 如果开始日期大于结束日期,重置结束日期
          this.endDate = "";
        } else {
          const timeDiff = endDate.getTime() - startDate.getTime();
          const daysDiff = timeDiff / (1000 * 3600 * 24); // 计算天数差值
          if (daysDiff > 30) {
            // 如果日期范围超过30天,重置结束日期
            this.endDate = "";
          }
        }
      }
    },
    exportData() {
      // 导出数据逻辑,同上
    },
  },
};
</script>

在上述代码中,我们添加了一个 isDateRangeValid 计算属性来验证日期范围是否合法,开始日期不能大于结束日期。我们在 isDateRangeValid 计算属性中添加了额外的验证逻辑来确保日期范围不超过30天。我们计算了开始日期和结束日期之间的天数差值,并通过比较此差值和30来验证日期范围是否合法。

handleStartDateChange 方法中,我们在验证开始日期和结束日期的基础上,还验证了日期范围是否超过30天。如果日期范围大于30天,我们会将结束日期重置为空,以确保选择的日期范围是有效的。
请在你的实际项目中进行适当的测试和调整。同样,前端验证只是提供用户友好的提示,后端也应该进行相应的验证,以确保数据的完整性和安全性。文章来源地址https://www.toymoban.com/news/detail-617857.html

到了这里,关于使用POI设计一个限制导出日期为三十天,且导出文件为excel的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java使用apache.poi导出word文件

    功能说明: 将试卷导出word,并可以打印,装订,效果图: 下面是实现代码:

    2024年02月15日
    浏览(49)
  • java中使用POI生成Excel并导出

    注:本文章中代码均为本地Demo版本,若后续代码更新将不会更新文章 根据从数据库查询出的数据,将其写入excel表并导出 我的想法是通过在实体属性上写自定义注解的方式去完成。因为我们在代码中可以通过反射的方式去获取实体类中全部的注解及属性名称等等。我们可以

    2024年02月16日
    浏览(48)
  • 使用Apache POI数据导出及EasyExcel进行十万、百万的数据导出

    Apache POI 是基于 Office Open XML 标准( OOXML )和 Microsoft 的 OLE 2 复合⽂档 格式( OLE2 )处理各种⽂件格式的开源项⽬。 简⽽⾔之,您可以使⽤ Java 读写 MS Excel ⽂件,可以使⽤ Java 读写 MS Word 和 MS PowerPoint ⽂件。 1.HSSF - 提供读写 Microsoft Excel XLS 格式 (Microsoft Excel 97 (-2003)) 档案

    2024年02月15日
    浏览(42)
  • 使用POI和EasyExcel来实现excel文件的导入导出

    废话不多说咱们直接上干货!!!! 一.读取Excel表格 【1】使用POI读取excel表格中的数据 POI还可以操作我们这个word文档等等,他不仅仅只能弄Excel,而JXI只能操作excel 1.POI的结构,我们可以更具文件的类去选择 相关的对象我当前是使用的XLSX来操作的 HSSF - 提供读写Microsoft

    2024年02月05日
    浏览(59)
  • JAVA:使用POI SXSSFWorkbook方式导出Excel大数据文件

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java对Microsoft Office格式档案读和写的功能。POI组件可以提供Java操作Microsoft Office的API,导出格式为Office 2003时POI调用的HSSF包,导出格式为Office 2007时,调用XSSF包,而SXSSF包是POI3.8版本之上对XSSF的一个扩展,用

    2024年02月11日
    浏览(50)
  • java使用poi-tl导出word及转换PDF后的合并导出pdf

    为某单位开发的一款项目申报审批系统,用户需求在申报阶段填写的信息资料能够导出PDF。且项目申报的报告正文为用户上传,所以需要合并导出。 在项目初期阶段使用的是PDF的预设模板导出,因为以前使用过,比较熟悉。所以优先选择此方法,但项目测试阶段发现问题,因

    2024年02月06日
    浏览(82)
  • 使用原生POI和EasyPoi根据word模板导出word工具类

    前两天接了个需求,要求将数据导出成word,里边有边个,有其他的东西,怎么说这,这个需求最开始就是上传word,下载附件就行了,非得改成上传数据然后支持下载word。有股脱裤子放屁的感觉 而且呢,当时做的时候前任开发在数据库存了一个巨大的Json文件,解析也挺费劲的

    2024年01月25日
    浏览(58)
  • Java使用poi导出excel针对不同数据列配置设置不同单元格格式(适用于通用导出excel数据)

    公司大部分业务都是查询相关的业务, 所以建了一个项目专门做数据查询, 数据中转等抽象通用的业务, 有一天给我安排了一个功能, 做excel导出, 配置好查询sql和表头字段映射后即可导出excel, 无需修改代码 后来因为导出数据要求保留几位小数或者转换成百分比等设置单元格格

    2024年02月07日
    浏览(55)
  • elementPlus使用 el-date-picker ,限制选择的开始日期和结束日期的差在7天范围内。

    在使用el-date-picker时,想要以下需求: 选中第一个日期后(如:12月15日),第二个日期=第一个日期-7,或者第二个日期=第一个日期+7,即第二个日期选择范围如图:(前后7天可选) 只能选择今天以及今天之前的日期。 或者使用dayJs, disabledDate 可以改为

    2024年01月19日
    浏览(64)
  • POI 导出 树形结构

     参考文章: (327条消息) Excel树状数据绘制导出_excel导出树形结构_Deja-vu xxl的博客-CSDN博客 https://blog.csdn.net/weixin_45873182/article/details/120132409?spm=1001.2014.3001.5502 导出样式

    2024年02月15日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包