java使用esayExcel

这篇具有很好参考价值的文章主要介绍了java使用esayExcel。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

导出

依赖

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>easyexcel</artifactId>
  <version>2.2.4</version>
</dependency>

后端代码

controller

@RequestMapping("/exportDemo")
public void exportDemo(@RequestBody Map<String, String> params,
 HttpServletResponse response) {
  testService.exportDemo(params, response);
}

service

public void exportDemo(Map<String, String> params,
 HttpServletResponse response) {
  List<Map<String, Object>> dataList = getDataList(params);
  try {
    response.reset();
    response.setHeader("Content-type", "application/octet-stream");
    response.setHeader("Content-Disposition", "attachment;filename=" +
        URLEncoder.encode("表名称-" +
         DateUtils.format(new Date(),
          "yyyyMMddHHmmss") + ".xls", "utf-8"));

    // 表内容样式
    WriteCellStyle writeCellStyleContent = new WriteCellStyle();
    //垂直居中,水平居中
    writeCellStyleContent .setVerticalAlignment(VerticalAlignment.CENTER);
    writeCellStyleContent .setHorizontalAlignment(HorizontalAlignment.CENTER);
    writeCellStyleContent .setBorderLeft(BorderStyle.THIN);
    writeCellStyleContent .setBorderTop(BorderStyle.THIN);
    writeCellStyleContent .setBorderRight(BorderStyle.THIN);
    writeCellStyleContent .setBorderBottom(BorderStyle.THIN);
    //设置 自动换行
    writeCellStyleContent .setWrapped(true);
    
    WriteFont writeFont = new WriteFont();
    writeFont.setFontHeightInPoints((short) 12);
    writeFont.setFontName("宋体");
    writeCellStyleContent.setWriteFont(writeFont);
    //表头样式
    WriteCellStyle writeCellStyleHead = new WriteCellStyle();
    writeFont = new WriteFont();
    writeFont.setFontHeightInPoints((short) 12);
    writeFont.setBold(true);
    writeFont.setFontName("宋体");
    writeCellStyleHead.setWriteFont(writeFont);

    ExcelWriter writer = EasyExcel.write(response.getOutputStream()).build();

    List<List<String>> head = new ArrayList<List<String>>() {{
      add(new ArrayList<String>() {{
        add("单位单位单位");
      }});
      add(new ArrayList<String>() {{
        add("语文");
        add("已");
      }});
      add(new ArrayList<String>() {{
        add("数学");
        add("未");
      }});
      add(new ArrayList<String>() {{
        add("时间");
      }});
    }};
    WriteSheet ajSheet1 = EasyExcel.writerSheet(0, "sheetName")
        .head(head)
        .registerWriteHandler(new ExcelWidthStyleStrategy())
        .registerWriteHandler(
          new HorizontalCellStyleStrategy(
            writeCellStyleHead,writeCellStyleContent
          )
         )
        .build();
    writer.write(getData(dataList), ajSheet1);

    writer.finish();
  } catch (IOException e) {
    e.printStackTrace();
  }
}

单元格宽度配置类

package com.utils;

import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
import org.apache.poi.ss.usermodel.Cell;
import org.springframework.util.CollectionUtils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ExcelWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {
    private Map<Integer, Map<Integer,Integer>> CACHE = new HashMap<>();

    @Override
    protected void setColumnWidth(WriteSheetHolder writeSheetHolder,
     List<CellData> list, Cell cell, Head head,
     Integer integer, Boolean aBoolean) {
        boolean needSetWidth = aBoolean || !CollectionUtils.isEmpty(list);
        int columnIndex = cell.getColumnIndex();
        if (needSetWidth) {
            Map<Integer, Integer> maxColumnWidthMap
             = CACHE.get(writeSheetHolder.getSheetNo());
            if (maxColumnWidthMap == null) {
                maxColumnWidthMap = new HashMap<>();
                CACHE.put(writeSheetHolder.getSheetNo(),maxColumnWidthMap);
            }
            Integer columnWidth = dataLength(list, cell, aBoolean);
            if (columnWidth >=0) {
                if (columnWidth > 150) {
                    columnWidth = 150;
                }
                Integer maxColumnWidth = maxColumnWidthMap.get(columnIndex);
                if (maxColumnWidth == null || columnWidth > maxColumnWidth) {
                    maxColumnWidthMap.put(columnIndex,columnWidth);
                    writeSheetHolder
                    .getSheet()
                    .setColumnWidth(columnIndex,columnWidth * 500);
                }
            }
        }
    }
    
    private Integer dataLength (List<CellData> cellDataList,
      Cell cell,Boolean isHead) {
        if (isHead) {
            int bytesLength = cell.getStringCellValue()
            .getBytes().length;
            if (bytesLength < 10) {
                return bytesLength;
            } else {
                int stringLength = cell.getStringCellValue().length();
                Double v = (bytesLength + stringLength) * 0.5;
                return v.intValue();
            }
        } else {
            CellData cellData = cellDataList.get(0);
            CellDataTypeEnum type = cellData.getType();
            if (type == null) {
                return -1;
            } else {
                switch (type) {
                    case STRING:
                        int bytesLength = cellData.getStringValue()
                        .getBytes().length;
                        if (bytesLength < 10) {
                            return bytesLength;
                        } else {
                            int stringLength = cellData.getStringValue().length();
                            Double v = (bytesLength + stringLength) * 0.3;
                            return v.intValue();
                        }
                    case BOOLEAN:
                        return cellData.getBooleanValue()
                        .toString().getBytes().length;
                    case NUMBER:
                        return cellData.getNumberValue()
                        .toString().getBytes().length;
                    default:
                        return -1;
                }
            }
        }
    }
}

util

private List<Map<String, Object>>
 getDataList(Map<String, String> params) {
  List<Map<String, Object>> reuslt = new ArrayList<>();
  Map<String, Object> map = new HashMap<>();
  map.put("dw","测试单位");
  map.put("y","10");
  map.put("w","800");
  map.put("sj","2023-07-01 12:12:00");
  reuslt.add(map);
  return reuslt;
}

private List<List<String>>
 getData(List<Map<String, Object>> dataList) {
  List<List<String>> result = new ArrayList<>();
  for (Map<String, Object> map : dataList) {
    List<String> list = new ArrayList<>();
    list.add(map.get("dw").toString());
    list.add(map.get("y").toString());
    list.add(map.get("w").toString());
    list.add(map.get("sj").toString());
    result.add(list);
  }
  return result;
}

前端代码

exportXlsx () {
  this.$axios({
  method: 'post',
  url: '/test/exportDemo',
  responseType: 'blob',
  data: {
    ...this.params
  }
  }).then(response => {
  let filename = response.headers['content-disposition']
  const blob = new Blob([response.data])
  var downloadElement = document.createElement('a')
  var href = window.URL.createObjectURL(blob)
  downloadElement.href = href
  downloadElement.download = decodeURIComponent(filename.split('filename=')[1])
  document.body.appendChild(downloadElement)
  downloadElement.click()
  document.body.removeChild(downloadElement)
  window.URL.revokeObjectURL(href)
  }).catch(reject => {})
}

文章来源地址https://www.toymoban.com/news/detail-846429.html

到了这里,关于java使用esayExcel的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • BsinCopilot:Java版端到端大语言模型开发框架

    BsinCopilot是基于BsinPaaS开源框架构建的大语言模型应用SaaS服务,借鉴langchain的框架思想,引入  langchian4j组件,微前端微服务的架构设计,可快速助您构建和体验端到端的AI应用。 概念 说明 Bsin 毕昇缩写,毕昇,中国北宋发明家,活字印刷术的发明者。毕昇出身平民,长期在

    2024年03月13日
    浏览(61)
  • Android 安卓开发语言kotlin与Java该如何选择

            如今在Android开发中,应用层开发语言主要是Java和Kotlin,Kotlin是后来加入的,主导的语言还是Java。kotlin的加入仿佛让会kotlin语言的开发者更屌一些,其实不然。         有人说kotlin的引入是解决开发者复杂的逻辑,并且对空指针控制的比较友好,但是我们在开

    2024年02月11日
    浏览(66)
  • 【Java】后端开发语言Java和C#,两者对比注解和属性的区别以及作用

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《Java》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年01月16日
    浏览(53)
  • 【Java】学习一门开发语言,从TA的Hello World开始

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《Java》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年01月23日
    浏览(55)
  • 编程开发8大语言详解,为什么Java是我最推荐的?

    很多没有接触过编程语言的同学,都会觉得编程开发特别高端和神奇,担心理解不了更担心学不会。 当然,也有人会认为,你既然是做编程的,那么你应该什么都会,什么软件的开发都能完成,这是平哥经常听到的两种声音。 在此,平哥需要给大家科普一下, 编程确实改变

    2024年02月05日
    浏览(73)
  • 【Java】十年老司机转开发语言,新小白从学习路线图开始

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《Java》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年01月17日
    浏览(52)
  • Java转Go:java开发者转学go语言,请给我一些建议和学习推荐

    在做开发时遇到最无理的需求就是部门没了😂 遇到最无理的需求就是部门没了😂,差点人也在这个公司没了,但好在是跟着大部队换了一个部门,就是要转go,也可能要用js和solidity开发 一开始知道部门没了,第一时间一定是会担心,甚至后面知道有的同事要被毕业,有的同

    2024年02月13日
    浏览(52)
  • 使用Go语言进行安卓开发

    本文将介绍如何使用Go语言进行安卓开发。我们将探讨使用Go语言进行安卓开发的优点、准备工作、基本概念和示例代码。通过本文的学习,你将了解如何使用Go语言构建高效的安卓应用程序。 随着移动互联网的快速发展,安卓应用程序的需求越来越旺盛。使用传统的Java和K

    2024年02月06日
    浏览(46)
  • 【go语言开发】redis简单使用

    本文主要介绍redis安装和使用。首先安装redis依赖库,这里是v8版本;然后连接redis,完成基本配置;最后测试封装的工具类 欢迎大家访问个人博客网址:https://www.maogeshuo.com,博主努力更新中… 参考文件: Yaml文件配置,Config使用 Log日志封装 常用工具类封装 命令行安装redis

    2024年03月12日
    浏览(60)
  • Java/Python/Go不同开发语言在进程、线程和协程的设计差异

    在多线程项目开发时,最常用、最常遇到的问题是 1,线程、协程安全 2,线程、协程间的通信和控制 本文主要探讨不同开发语言go、java、python在进程、线程和协程上的设计和开发方式的异同。 进程 进程是 操作系统进行资源分配的基本单位,每个进程都有自己的独立内存空

    2024年01月23日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包