【Java 演示灵活导出数据】

来源: 投稿
2024-05-14 15:34:00

演示灵活导出数据

背景今天临时起兴打开稀土掘金导航栏看到页面推广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>
展开阅读全文
点击引领话题📣 发布并加入讨论🔥
0 评论
3 收藏
分享
返回顶部
顶部