【Java 演示灵活导出数据】

演示灵活导出数据

🎉🎉🎉🎉🎉🎉【小吴小吴bug全无开通公众号】关注公众号获取第一时间博客动态

在这里插入图片描述

背景今天临时起兴打开稀土掘金导航栏看到页面推广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命令转换成不同语言的代码

找到生成代码按钮

在这里插入图片描述

选择你想要的语言

在这里插入图片描述

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

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

        <dependency>
            <groupId>top.wu2020</groupId>
            <artifactId>wu-easy-excel-starter</artifactId>
            <version>1.2.6-JDK17-SNAPSHOT</version>
        </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);
查看数据

在这里插入图片描述

完整代码

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.snapshots</id>
            <name>oss.sonatype.org</name>
            <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/626332.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

eNSP PRO全面安装教程来了(文末附下载方式)

华为eNSP PRO已经全面开放了&#xff0c;这意味着用户可以自由地访问和使用这个模拟器&#xff0c;来进行以下活动&#xff1a; 「学习和培训」&#xff1a;对于正在准备华为认证&#xff08;如HCIA、HCIP、HCIE&#xff09;的专业人士来说&#xff0c;eNSP PRO提供了一个实际…

129.哈希表:有效的字母异位词(力扣)

242. 有效的字母异位词 - 力扣&#xff08;LeetCode&#xff09; 题目描述 代码解决以及思路 这个方法的时间复杂度为O(N)&#xff0c;其中N是字符串的长度&#xff0c;空间复杂度为O(1)&#xff08;因为辅助数组的大小是固定的26&#xff09;。 class Solution { public:bo…

MySQL、JDBC复盘及规划

数据库仍有习题尚未做完&#xff0c;策略从一天做完改为每天5到10题&#xff0c;以此达到掌握和复习的效果&#xff0c;JDBC的六部仍需每天练习&#xff0c;从明天开始正式进行JavaWeb的学习&#xff0c;预计持续到七月中旬&#xff0c;还会完成一个书城项目&#xff0c;六月底…

听说SOLIDWORKS科研版可以节约研发成本?

近几年来&#xff0c;政府越来越重视科研带动产业&#xff0c;绩效优良的产业技术研究院对于国家和地区的学术成果转化、技术创新、产业发展等具有不可忽视的促进和带动作用。研究院会承担众多新产业的基础研究工作&#xff0c;而常规的基础研究需要长期的积累&#xff0c;每个…

虚拟化软件栈面临的安全威胁主要涉及几个方面

1.基于虚拟层&#xff08;Hypervisor&#xff09;的攻击&#xff1a;VM Escape&#xff1a;攻击者利用虚拟化软件允许多个操作系统共享单个硬件处理器的漏洞。这使得黑客可以在受控制的虚拟层上攻击宿主机上的每个虚拟机。 VM sprawl&#xff1a;当网络上的虚拟机数量超过管理…

(done) 关于 pytorch 代码里常出现的 batch_first 到底是啥?

参考文章&#xff1a;https://pytorch.org/docs/stable/generated/torch.nn.utils.rnn.pad_sequence.html 首先看参考文章里的解释&#xff0c;如下图 从文章描述来看&#xff0c;当 batch_first True 时&#xff0c;输出的张量的 size 是 B x T x *。当 batch_first False…

Vue实战技巧 —— 企业开发实战中的常见疑难问题

Vue企业开发实战中的常见疑难问题 1. 解决Vue动态路由参数变化&#xff0c;页面数据不更新2. vue组件里定时器销毁问题3. vue实现按需加载组件的两种方式4. 组件之间&#xff0c;父子组件之间的通信方案5. Vue中获取当前父元素&#xff0c;子元素&#xff0c;兄弟元素6. 开发环…

JVM 双亲委派机制详解

文章目录 1. 双亲委派机制2. 证明3. 优势与劣势 1. 双亲委派机制 类加载器用来把类加载到 Java 虚拟机中。从JDK1.2版本开始&#xff0c;类的加载过程采用双亲委派机制&#xff0c;这种机制能更好地保证 Java 平台的安全。 1.定义 如果一个类加载器在接到加载类的请求时&…

最新极空间部署iCloudpd教程,实现自动同步iCloud照片到NAS硬盘

【iPhone福利】最新极空间部署iCloudpd教程&#xff0c;实现自动同步iCloud照片到NAS硬盘 哈喽小伙伴们好&#xff0c;我是Stark-C~ 我记得我前年的时候发过一篇群晖使用Docker部署iCloudpd容器来实现自动同步iCloud照片的教程&#xff0c;当时热度还很高&#xff0c;可见大家…

MySQL旧表做分区流程

1. 为什么做分区 数据库分区是将数据库中的数据划分成独立的部分&#xff0c;每个部分称为一个分区。分区可以根据特定的标准&#xff0c;如范围、列表或哈希值&#xff0c;将数据分隔到不同的物理存储位置中。数据库表分区可以在多种情况下提供显著的好处。以下是一些应该考虑…

如何对基本公共服务均等化进行统计监测

党的十九大指出“履行好政府再分配调节职能&#xff0c;加快推进基本公共服务均等化&#xff0c;缩小收入分配差距”&#xff0c;提出到2035年基本公共服务均等化基本实现。国务院相继于2012年和2017年发布了《国家基本公共服务体系“十二五”规划》和《“十三五”推进基本公共…

Windows里使用ollama本地大模型部署

下载 ollama官网进行下载 下载完后下一步下一步即可 安装完成后验证是否成功&#xff0c;打开命令行输入ollama&#xff0c;有该指令即安装成功 环境变量配置 配置模型下载位置 看自己电脑硬盘情况配置 打开所有ip接口访问权限 如果想要远程调用ollama接口&#xff0c;…

Output directory is not specified

场景&#xff1a;从GitHub拉取Java项目使用IDEA打开运行的时候抛出 java: 写入com.common.exception.ChatException时出错: Output directory is not specified网上大部分是说在项目结构增加编译器输出路径&#xff0c;但我在实际开发的项目的时候这里为空&#xff0c;包括我加…

测试用例设计方法:招式组合,因果判定出世

1 引言 上篇讲了等价类划分和边界值分析法&#xff0c;而这两种方法只考虑了单个的输入条件&#xff0c;并未考虑输入条件的各种组合、输入条件之间的相互制约关系的场景。基于此短板&#xff0c;因果图法和判定表法应运而生。 2 因果图法 2.1 概念及原理 2.1.1 定义 一种…

分布式光伏监控系统功能模块详解

目前&#xff0c;分布式光伏发电系统的总容量比较小&#xff0c;并且光伏电站的功率受外界环境影响容易出现大起大落的现象。这使电压调整变得很困难。光伏电站运行维护人员不足&#xff0c;长时间不保养维护会影响光伏电站的发电效率。针对上述问题&#xff0c;鹧鸪云基于无线…

汇聚荣科技:拼多多开店没有流量应该怎么办?

拼多多开店没有流量是一个常见的问题&#xff0c;许多新手商家都会遇到这样的困境。那么&#xff0c;如何解决这个问题呢?下面从四个方面进行详细阐述。 一、优化店铺和商品 首先&#xff0c;要确保店铺和商品的质量。店铺要有自己独特的风格和特色&#xff0c;商品要有高质量…

Airtest核心API汇总

2024.2.25更新&#xff1a;新增剪切板、Airtest1.3.3touch/swipe支持绝对坐标和相对坐标 2023.9.3更新&#xff1a;Airtest1.2.7新增14个断言、断开连接API&#xff1b;Airtest1.2.10.2新增录屏API&#xff1b; 以下基于airtest1.2.0(截止2021.7.12&#xff0c;最新版本) https…

如何将公众号添加到CSDN个人主页

1. 创作中心- 推广管理 输入个人公众号名字并开启微信公众号推广 2. 将公众号的二维码图片加入拓展信息 个人主页的左下角就能看到推广 如果希望能看到是二维码 操作如下&#xff1a; 写篇文章贴上二维码 然后点击鼠标右键获得此页面链接 &#xff0c;例如我的个人公众号 htt…

洗地机哪款好用?希亦、追觅、顺造、米家等高品质洗地机推荐

家用洗地机已经成为家庭清洁的重要利器&#xff0c;其多功能性能帮助您轻松应对各种清洁任务&#xff0c;从而保持家居环境的清洁整洁。然而&#xff0c;市场上品牌繁多、功能各异的洗地机让人眼花缭乱。为了帮助大家做出明智的选择&#xff0c;我们将在本文中提供全面的选购指…

力扣98.验证二叉搜索树

法一&#xff08;自己思路&#xff0c;复杂了&#xff09;&#xff1a; from collections import dequeclass Solution(object):def isValidBST(self, root):""":type root: TreeNode:rtype: bool"""queue deque()if root.left!None:queue.app…