这篇文章简单介绍一下怎么通过easyexcel做数据的导出,使用之前easyui构建的歌曲列表crud应用,添加一个导出按钮,点击的时候直接连接后端接口地址,在后端的接口完成数据的导出功能。
前端页面完整代码
- let editingId;
- let requestUrl;
- let base = "http://localhost:8083";
- let pageList = [20, 50, 100, 500, 1000];
-
- // 定义一个json对象保存歌曲数据
- let data = {};
-
- function addHandler() {
- requestUrl = "/song/insert";
-
- $.post(base + requestUrl, {
- name: "*****",
- singer: "*****",
- note: "*****"
- }, function () {
- $("#song_list").datagrid("reload");
- }, "json");
- }
-
- function editHandler() {
- let datagrid = $("#song_list");
- let row = datagrid.datagrid("getSelected");
-
- if (editingId != null && editingId != "") {
- datagrid.datagrid("selectRow", editingId);
- } else {
- if (row) {
- // 获取行索引,这个索引从0开始
- let rowIndex = datagrid.datagrid("getRowIndex", row);
-
- editingId = rowIndex;
- requestUrl = "/song/updateById";
-
- datagrid.datagrid("beginEdit", rowIndex);
- }
- }
- }
-
- function saveHandler() {
- if (editingId) {
- // 只有结束编辑才能获取到最新的值
- $("#song_list").datagrid("endEdit", editingId);
-
- $.post(base + requestUrl, data, function (res) {
- $.messager.show({
- title: '系统消息',
- timeout: 5000,
- showType: 'slide',
- msg: res.message,
- });
-
- editingId = "";
- }, "json");
- }
- }
-
- function cancelHandler() {
- // editingId != null条件防止刷新页面带来的问题
- if (editingId != null && editingId !== "") {
- $("#song_list").datagrid("cancelEdit", editingId);
-
- editingId = "";
- }
- }
-
- function exportHandler() {
- location.href = base + "/song/export";
- }
-
- function deleteHandler() {
- let rowData = $("#song_list").datagrid("getSelected");
-
- if (rowData) {
- $.messager.confirm("提示", "删除后数据无法恢复,是否确认删除?", function(bool) {
- if (bool) {
- $.get(base + "/song/deleteById/" + rowData.id, {}, function(res) {
- $.messager.show({
- title: '系统消息',
- timeout: 5000,
- showType: 'slide',
- msg: res.message,
- });
-
- $("#song_list").datagrid("reload");
- }, "json");
- }
- });
- } else {
- $.messager.alert("请选择要删除的数据!", "warning");
- }
- }
-
- $(document).ready(function() {
- let datagrid = $("#song_list").datagrid({
- url: base + "/song/selectByPage",
- title: "歌曲列表",
- height: 810,
- striped: true,
- fitColumns: true,
- singleSelect: true,
- pagination: true,
- remoteFilter: true,
- clientPaging: false,
- pageSize: pageList[0],
- pageList: pageList,
- loadFilter: function(res) {
- if (res.code == 200) {
- return res.data;
- } else {
- return null;
- }
- },
- onAfterEdit: function (rowIndex, rowData, changes) { // 结束行内编辑事件
- data = {
- id: rowData.id,
- name: changes.name ? changes.name : rowData.name,
- note: changes.note ? changes.note : rowData.note,
- singer: changes.singer ? changes.singer : rowData.singer
- };
- },
- toolbar: [{
- iconCls: 'icon-add',
- text: '添加',
- handler: function() {
- addHandler();
- }
- }, '-', {
- iconCls: 'icon-edit',
- text: '修改',
- handler: function() {
- editHandler();
- },
- }, "-", {
- iconCls: "icon-save",
- text: "保存",
- handler: function() {
- saveHandler();
- }
- }, "-", {
- iconCls: "icon-cancel",
- text: "取消",
- handler: function() {
- cancelHandler();
- }
- }, '-', {
- iconCls: 'icon-ok',
- text: '导出',
- handler: function() {
- exportHandler();
- }
- }, '-', {
- iconCls: 'icon-delete',
- text: '删除',
- handler: function() {
- deleteHandler();
- },
- }],
- columns: [[
- {field: 'id', title: 'id', width: 200},
- {field: 'name', title: 'name', width: 200, editor: "textbox"},
- {field: 'singer', title: 'singer', width: 200, editor: "textbox"},
- {field: 'note', title: 'note', width: 200, editor: "textbox"},
- {field: 'lastUpdateTime', title: 'lastUpdateTime', width: 200},
- ]]
- });
-
- datagrid.datagrid('enableFilter', [{
- field: 'name',
- type: 'textbox',
- op: ['equal', 'contains']
- }, {
- field: 'singer',
- type: 'textbox',
- op: ['equal', 'contains'],
- }, {
- field: 'note',
- type: 'textbox',
- op: ['equal', 'contains']
- }]);
-
- });
添加依赖
- <dependency>
- <groupId>com.alibabagroupId>
- <artifactId>easyexcelartifactId>
- <version>3.3.2version>
- dependency>
修改实体类,添加列注解
- package com.example.springboot.entity;
-
- import com.alibaba.excel.annotation.ExcelIgnore;
- import com.alibaba.excel.annotation.ExcelProperty;
- import com.baomidou.mybatisplus.annotation.IdType;
- import com.baomidou.mybatisplus.annotation.TableField;
- import com.baomidou.mybatisplus.annotation.TableId;
- import com.baomidou.mybatisplus.annotation.TableName;
- import com.fasterxml.jackson.annotation.JsonFormat;
- import lombok.Data;
-
- import java.io.Serializable;
- import java.time.LocalDateTime;
-
- /**
- * 歌曲
- * @author heyunlin
- * @version 1.0
- */
- @Data
- @TableName("song")
- public class Song implements Serializable {
- private static final long serialVersionUID = 18L;
-
- @ExcelIgnore
- @TableId(type = IdType.INPUT)
- private String id;
-
- /**
- * 歌曲名
- */
- @ExcelProperty("歌曲名")
- private String name;
-
- /**
- * 歌手
- */
- @ExcelProperty("歌手")
- private String singer;
-
- /**
- * 描述信息
- */
- @ExcelProperty("描述信息")
- private String note;
-
- /**
- * 最后一次修改时间
- */
- @TableField("last_update_time")
- @ExcelProperty("最后一次修改时间")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
- private LocalDateTime lastUpdateTime;
- }
参考官网的案例代码,完成后端controller接口具体代码实现
- package com.example.springboot.service.impl;
-
- import com.alibaba.excel.EasyExcel;
- import com.example.springboot.entity.Song;
- import com.example.springboot.mapper.SongMapper;
- import com.example.springboot.restful.JsonResult;
- import com.example.springboot.service.SongService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
-
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.util.List;
-
- /**
- * @author heyunlin
- * @version 1.0
- */
- @Service
- public class SongServiceImpl implements SongService {
-
- private final SongMapper songMapper;
-
- @Autowired
- public SongServiceImpl(SongMapper songMapper) {
- this.songMapper = songMapper;
- }
-
- // 其他代码...
-
- @Override
- public void export(HttpServletResponse response) {
- String fileName = "song.xlsx";
-
- response.setCharacterEncoding("utf-8");
- response.setHeader("Content-disposition", "attachment;filename=" + fileName);
- response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
-
- try {
- List
songs = songMapper.selectList(null); -
- EasyExcel.write(response.getOutputStream(), Song.class).sheet("歌曲列表").doWrite(songs);
- } catch (Exception e) {
- e.printStackTrace();
-
- response.reset();
- response.setContentType("application/json;charset=utf-8");
- JsonResult
jsonResult = JsonResult.success("数据导出异常"); -
- try {
- response.getWriter().write(jsonResult.toString());
- } catch (IOException ioException) {
- ioException.printStackTrace();
- }
- }
- }
-
- }