您现在的位置是:首页 > 文章详情

【Java 演示灵活导出数据】

日期:2024-05-14点击:148

演示灵活导出数据

背景今天临时起兴打开稀土掘金导航栏看到页面推广gitee项目恰巧最近也在学习python了解到python爬虫很厉害,想着能不能用Java把数据爬下来,于是在原先框架wu-easy-excel-starter基础上新增demo进行演示测试

实现过程

获取需要获取数据的接口

 curl 'https://e.juejin.cn/resources/gitee' \\  -H 'accept: */*' \\  -H 'accept-language: zh-CN,zh;q=0.9' \\  -H 'content-type: application/json' \\  --data-raw '{"lang":"java","offset":0,"limit":30,"cursor":"0"}'

::: 告诉一个你们都不知道的工具ApiPost 里面有个可以一键将curl命令转换成不同语言的代码

找到生成代码按钮

选择你想要的语言

TODO 开源中国图片不合规(不知道为啥)

安装Java wu-easy-excel-starter 依赖

这里使用的是快照哦(快照仓库地址放在最下面了)

  <dependency>  <groupId>top.wu2020groupId>  <artifactId>wu-easy-excel-starterartifactId>  <version>1.2.6-JDK17-SNAPSHOTversion>  dependency>

编写代码

获取接口数据

  HttpRequest request = HttpRequest.newBuilder()  .uri(URI.create("https://e.juejin.cn/resources/gitee"))  .header("accept", "*/*")  .header("accept-language", "zh-CN,zh;q=0.9")  .header("content-type", "application/json")  .method("POST", HttpRequest.BodyPublishers.ofString("{\\"lang\\":\\"java\\",\\"offset\\":0,\\"limit\\":30,\\"cursor\\":\\"0\\"}"))  .build();  HttpResponse<byte[]> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofByteArray());  byte[] body = response.body();    // 需要导出的数据  Map map = JsonUtils.parseObject(body, LinkedHashMap.class);  System.out.println(map);

输出格式

 {  "code": 200,  "data": [  {  "id": 13010970,  "title": "小诺/Snowy",  "username": "",  "url": "https://gitee.com/xiaonuobase/snowy",  "date": {  "__type": "Date",  "iso": "2024-05-10T11:45:16.000Z"  },  "summary": "最新:💖国内首个国密前后分离快速开发平台💖,采用Vue3+AntDesignVue3 + Vite+SpringBoot+Mp+HuTool+SaToken。集成国密加解密插件,在前后分离框架中,实现前后分离“密”不可分;同时实现国产化机型、中间件、数据库适配,是您的不二之选;最后官网提供工作流、多租户、多数据源、Vue3表单设计器等丰富插件灵活使用。",  "language": "Java",  "category": "",  "img": [],  "view": 0,  "comment": 0,  "like": 0,  "hot": 0,  "collect": 0,  "langColor": "#b07219"  }  ] }

导出数据参数配置

配置导出字段

  • 属性数据导出如:user.id
  • 集合数据导出:userList.$id
  • 字段导出:id

::: tip 如下导出数据中的data中集合属性ID为数据ID、title属性为标题 :::

  // 需要导出的数据设置信息  List<ExportFieldCommand> exportFieldCommands = new ArrayList<>();  exportFieldCommands.add(new ExportFieldCommand("data.$id","数据ID"));  exportFieldCommands.add(new ExportFieldCommand("data.$title","标题"));  exportFieldCommands.add(new ExportFieldCommand("data.$username","用户"));  exportFieldCommands.add(new ExportFieldCommand("data.$url","地址"));  exportFieldCommands.add(new ExportFieldCommand("data.$summary","描述"));  exportFieldCommands.add(new ExportFieldCommand("data.$language","语言"));  exportFieldCommands.add(new ExportFieldCommand("data.$category","类型"));  List<EasyExcelFiledPoint> easyExcelFiledPointList = ExportFieldCommandUtils.exportFieldCommandList2EasyExcelFiledPointList(exportFieldCommands); 

导出数据

  // 设置导出数据信息  DynamicEasyExcelContextHolder.pushOnlyExportField(easyExcelFiledPointList); // easyExcelPoint.setExcelFiledPointList(easyExcelFiledPointList);  // 声明导出文件地址  FileOutputStream fileOutputStream = new FileOutputStream(easyExcelWorkbookTest.getPath());  // 执行导出  excelExcelServiceAdapter.exportExcel(map,easyExcelPoint,fileOutputStream);

查看数据

// TODO 开源中国图片不合规(不知道为啥)

完整代码

 package com.wu.framework.easy; import com.fasterxml.jackson.databind.ObjectMapper; import org.wu.framework.core.utils.FileUtil; import org.wu.framework.core.utils.JsonUtils; import org.wu.framework.easy.excel.adapter.ExcelExcelServiceAdapter; import org.wu.framework.easy.excel.endpoint.EasyExcelFiledPoint; import org.wu.framework.easy.excel.endpoint.EasyExcelPoint; import org.wu.framework.easy.excel.endpoint.ExportFieldCommand; import org.wu.framework.easy.excel.factory.ExcelExcelServiceAdapterFactory; import org.wu.framework.easy.excel.toolkit.DynamicEasyExcelContextHolder; import org.wu.framework.easy.excel.util.EasyWorkbookTest; import org.wu.framework.easy.excel.util.ExportFieldCommandUtils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /**  * 自定义 表头数据导出  */ public class CustomerDataExportTest {  public static void main(String[] args) throws IOException, InterruptedException {  HttpRequest request = HttpRequest.newBuilder()  .uri(URI.create("https://e.juejin.cn/resources/gitee"))  .header("accept", "*/*")  .header("accept-language", "zh-CN,zh;q=0.9")  .header("content-type", "application/json")  .method("POST", HttpRequest.BodyPublishers.ofString("{\\"lang\\":\\"java\\",\\"offset\\":0,\\"limit\\":30,\\"cursor\\":\\"0\\"}"))  .build();  HttpResponse<byte[]> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofByteArray());  byte[] body = response.body();  // 需要导出的数据  Map map = JsonUtils.parseObject(body, LinkedHashMap.class);  System.out.println(map);  // 创建一个导出适配器  ExcelExcelServiceAdapter excelExcelServiceAdapter = ExcelExcelServiceAdapterFactory.excelExcelServiceAdapter();  // 演示导出文件到本地  String localClassPath = FileUtil.readLocalClassFolder(CustomerDataExportTest.class);  File easyExcelWorkbookTest = FileUtil.createFile(localClassPath, "CustomerDataExportTest.xls");  EasyExcelPoint easyExcelPoint = new EasyExcelPoint();  easyExcelPoint.setSheetName("导出稀土掘金首页Gitee推荐");  easyExcelPoint.setUseAnnotation(false);// 不使用注解导出  // 需要导出的数据设置信息  List<ExportFieldCommand> exportFieldCommands = new ArrayList<>();  exportFieldCommands.add(new ExportFieldCommand("data.$id","数据ID"));  exportFieldCommands.add(new ExportFieldCommand("data.$title","标题"));  exportFieldCommands.add(new ExportFieldCommand("data.$username","用户"));  exportFieldCommands.add(new ExportFieldCommand("data.$url","地址"));  exportFieldCommands.add(new ExportFieldCommand("data.$summary","描述"));  exportFieldCommands.add(new ExportFieldCommand("data.$language","语言"));  exportFieldCommands.add(new ExportFieldCommand("data.$category","类型"));  List<EasyExcelFiledPoint> easyExcelFiledPointList = ExportFieldCommandUtils.exportFieldCommandList2EasyExcelFiledPointList(exportFieldCommands);  // 设置导出数据信息  DynamicEasyExcelContextHolder.pushOnlyExportField(easyExcelFiledPointList); // easyExcelPoint.setExcelFiledPointList(easyExcelFiledPointList);  // 声明导出文件地址  FileOutputStream fileOutputStream = new FileOutputStream(easyExcelWorkbookTest.getPath());  // 执行导出  excelExcelServiceAdapter.exportExcel(map,easyExcelPoint,fileOutputStream);  System.out.println(map);  } } 

当前使用框架地址

快照仓库地址

  <repositories>  <repository>  <id>oss.snapshotsid>  <name>oss.sonatype.orgname>  <url>https://oss.sonatype.org/content/repositories/snapshots/url>  <releases>  <enabled>falseenabled>  releases>  <snapshots>  <enabled>trueenabled>  snapshots>  repository>  repositories>
原文链接:https://www.oschina.net/news/292388
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章