当前位置: 首页 > news >正文

网络公司网站做的不错的在线网站seo诊断

网络公司网站做的不错的,在线网站seo诊断,如何经营电商平台,网站建设要钞钱简介 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中…

简介

Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。
easyexcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;03版依赖POI的sax模式,在上层做了模型转换的封装,让使用者更加简单方便

网站

  • 官方网站:EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel
  • github地址:GitHub - alibaba/easyexcel: 快速、简洁、解决大文件内存溢出的java处理Excel工具
  • gitee地址:easyexcel: 快速、简洁、解决大文件内存溢出的java处理Excel工具。

16M内存23秒读取75M(46W行25列)的Excel(3.2.1+版本)

当然还有极速模式能更快,但是内存占用会在100M多一点 

img

快速开始​

读Excel​

DEMO代码地址:https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java

    /*** 最简单的读* <p>1. 创建excel对应的实体对象 参照{@link DemoData}* <p>2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoDataListener}* <p>3. 直接读即可*/@Testpublic void simpleRead() {String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();}

写Excel​

DEMO代码地址:https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java

    /*** 最简单的写* <p>1. 创建excel对应的实体对象 参照{@link com.alibaba.easyexcel.test.demo.write.DemoData}* <p>2. 直接写即可*/@Testpublic void simpleWrite() {String fileName = TestFileUtil.getPath() + "write" + System.currentTimeMillis() + ".xlsx";// 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭// 如果这里想使用03 则 传入excelType参数即可EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());}

web上传、下载​

DEMO代码地址:https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java

   /*** 文件下载(失败了会返回一个有部分数据的Excel)* <p>* 1. 创建excel对应的实体对象 参照{@link DownloadData}* <p>* 2. 设置返回的 参数* <p>* 3. 直接写,这里注意,finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大*/@GetMapping("download")public void download(HttpServletResponse response) throws IOException {// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postmanresponse.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");EasyExcel.write(response.getOutputStream(), DownloadData.class).sheet("模板").doWrite(data());}/*** 文件上传* <p>1. 创建excel对应的实体对象 参照{@link UploadData}* <p>2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link UploadDataListener}* <p>3. 直接读即可*/@PostMapping("upload")@ResponseBodypublic String upload(MultipartFile file) throws IOException {EasyExcel.read(file.getInputStream(), UploadData.class, new UploadDataListener(uploadDAO)).sheet().doRead();return "success";

实体中的使用

1.集成easyExcel

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

2定义导入导出实体:

实体与excel列的映射
创建实体类使用 @ExcelProperty、@ExcelIgnore 等注解标识导出列;
@ExcelIgnore 表示忽略此字段
@ExcelProperty 用于标识列 value属性设置列的名称,index属性设置设置列的序号 从 0 开始
 

@Data
@NoArgsConstructor
@AllArgsConstructor
public class GamesExcelVO {/***  @description: 使用@ExcelIgnore注解忽略此字段**/@ExcelIgnoreprivate String id;/*** @description: 使用@ExcelProperty标识列* value属性设置列的名称,index属性设置设置列的序号 从  0 开始**/@ExcelProperty(value = "名称",index = 0)private String name;@ExcelProperty(value = "类型",index = 1)private String type;@ExcelProperty(value = "价格",index = 2)private BigDecimal price;}

导出excel的代码:

@GetMapping("/excelExport")public void excelExport(HttpServletResponse response) throws IOException {try{//导出数据(这里使用假数据用来测试)List<GamesExcelVO> list = Arrays.asList(new GamesExcelVO(UUID.randomUUID().toString().replace("-", ""),"荒野大镖客:救赎2","开放世界、剧情",new BigDecimal("299.5")),new GamesExcelVO(UUID.randomUUID().toString().replace("-", ""),"上古卷轴5:天际","开放世界、冒险",new BigDecimal("199.5")),new GamesExcelVO(UUID.randomUUID().toString().replace("-", ""),"塞尔达传说:王国之泪","开放世界、冒险",new BigDecimal("399.5")));//使用easyExcel导出表格EasyExcel.write(response.getOutputStream(),GamesExcelVO.class).sheet("游戏价格") //sheet页名称.doWrite(list); //将要导出的数据}catch (Exception e){log.error("导出失败",e);}finally {//关闭流response.flushBuffer();}}

导出的文件:

3.Excel复杂表头导出

可将@ExcelProperty注解的value属性指定为一个数组来实现复杂表头的导出

与实体的映射

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ClassesExcelVO {/*** @description: 可将@ExcelProperty注解的value属性指定为一个数组来实现复杂表头的导出**/@ExcelProperty(value = {"1级表头","2"},index = 0)private Integer title1;@ExcelProperty(value = {"1级表头","3"},index = 1)private Integer title2;@ExcelProperty(value = {"1级表头","4"},index = 2)private Integer title3;@ExcelProperty(value = {"1级表头","5"},index = 3)private Integer title4;@ExcelProperty(value = {"1级表头","2级表头","6"},index = 4)private Integer title5;@ExcelProperty(value = {"1级表头","2级表头","7"},index = 5)private Integer title6;@ExcelProperty(value = {"1级表头","8"},index = 6)private Integer title7;@ExcelProperty(value = {"1级表头","9"},index = 7)private Integer title8;}

导出代码

/*** @description: easyExcel复杂表头导出* @author: Vinci* @date: 2023/8/18 13:04**/@GetMapping("/complexExcelExport")public void complexExcelExport(HttpServletResponse response) throws IOException {try{//与简单easyExcel导出的方式一样,仅导出对象方式发生变化//创建用于测试的假数据ArrayList<ClassesExcelVO> list = new ArrayList<>();for (int i = 0; i < 1000; i++) {list.add(new ClassesExcelVO(i,i,i,i,i,i,i,i));}//使用easyExcel导出表格EasyExcel.write(response.getOutputStream(),ClassesExcelVO.class).sheet("复杂表头导出测试") //sheet页名称.doWrite(list); //将要导出的数据}catch (Exception e){log.error("导出失败",e);}finally {//关闭流response.flushBuffer();}}

导出的文件:

4.Excel导入

我们使用 标题3 excel复杂表头导出的excel文件来进行测试,代码如下:

@GetMapping("/excelImport")public void excelImport(@RequestParam("file") MultipartFile file){//使用刚刚的复杂导入模板来测试easyExcel导入try {List<ClassesExcelVO> datas = EasyExcel.read(file.getInputStream(), ClassesExcelVO.class, null).excelType(ExcelTypeEnum.XLSX) //可指定文件的导入类型.sheet(0)//读取sheet页码,读取多个sheet页可利用循环来进行读取,页码从0开始.headRowNumber(4) //设置表头,可理解为 读取行 - 1.autoTrim(false) //读取数据时忽略空格,默认忽略.doReadSync();//读取到的数据datas.forEach(System.out::println);} catch (Exception e) {log.error("导入失败:",e);}}

http://www.tj-hxxt.cn/news/89594.html

相关文章:

  • 天津建站软件资阳市网站seo
  • 苏州论坛型网站建设seo排名怎么优化软件
  • 网站设计实验目的淘宝运营培训多少钱
  • 佛山做网站公司有哪些产品营销策划方案怎么做
  • 一个域名怎么做多个网站会计培训班多少钱
  • 海东网站建设怎么做营销
  • 仿券妈妈券老大网站开发淘宝关键词排名优化
  • 搞个竞拍网站怎么做今日新闻事件
  • 自动做网站怎么开通网站
  • 纸箱包装设计承德seo
  • 仿webqq织梦管理网站后台模板全国免费发布广告信息
  • 想要提高网站排名应该怎么做品牌宣传策划方案
  • 信息网络公司经营范围河北电子商务seo
  • 免费ppt网站 不要收费的培训心得体会范文大全1000字
  • 品质好货惠州seo网站排名
  • 网站维护建设软文营销ppt
  • 青岛知名网站建设哪家好搜索引擎优化特点
  • 微官网是网站吗上海最新事件
  • 专门做批发的网站吗宁波seo网站排名
  • 二级域名做非法网站汕头网站推广
  • 网络设计与制作是什么意思长沙网站seo技术厂家
  • 北京网站建设服务器维护百度网盘网页版入口官网
  • 网站做引流企业网站推广策略
  • 注册网站应注意事项搜索引擎营销的基本方法
  • 中国城乡建设三农委员会官方网站seo关键词优化平台
  • 网站策划模版如何使用免费b站推广网站
  • 如何加快网站收录武汉网站提升排名
  • 番禺网站设计公司福州百度分公司
  • 广告制作服务方案seo关键词排名优化联系方式
  • 湖南做网站 要上磐石网络百度推广怎么收费标准