Java查询数据库表信息导出Word

news2025/4/25 22:49:31

参考: POI生成Word多级标题格式_poi设置word标题-CSDN博客

1.概述

        使用jdbc查询数据库把表信息导出为word文档, 导出为word时需要下载word模板文件。

已实现数据库: 

  • KingbaseES, 实现代码: 点击跳转

2.效果图

2.1.生成word内容

所有数据库合并

数据库不合并

2.2.生成文件列表

3.代码文件结构

4.代码实现

4.1.dto

4.1.1.DbInfoDTO.java

package cn.nordrassil.db2doc.dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;


@Data
@AllArgsConstructor
@NoArgsConstructor
public class DbInfoDTO {
    private String dbName;
    private String dbDescribe;
    private List<TableInfo> tableInfos;


    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class TableInfo {
        private String tableName;
        private String tableDescribe;
        private List<TableField> tableFields;
        private List<List<String>> tableContents;

        public TableInfo(String tableName, String tableDescribe, List<TableField> tableFields) {
            this.tableName = tableName;
            this.tableDescribe = tableDescribe;
            this.tableFields = tableFields;
        }
    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class TableField {
        private String name;
        private String type;
        private Integer length;
        private String allowEmpty;
        private String isPrimaryKey;
        private String defaultValue;
        private String describe;
    }

}

4.1.2.DbConnParamDTO.java

package cn.nordrassil.db2doc.dto;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class DbConnParamDTO {
    private String host;
    private Integer port;
    private String username;
    private String password;
    // 随机填一个数据库即可
    private String randomDatabase;
    // 数据库前缀过滤
    private String dbPrefixFilter;
    // 等于true是只会导出第一张表
    private Boolean testRun;
}

4.1.3.ExportWordParamDTO

package cn.nordrassil.db2doc.dto;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ExportWordParamDTO {

    // 数据信息
    private List<DbInfoDTO> ds;
    // 导出word模板文件
    private String wordTemplateFile;
    // 导出目录
    private String exportFolder;
    // 所有数据库是否合并到一个文档, 默认每个数据库一个文档
    private Boolean merge = Boolean.FALSE;
}

4.2.util

4.2.1.CommonUtil.java

package cn.nordrassil.db2doc.util;

import java.io.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class CommonUtil {

    private static DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
    private static DateTimeFormatter dateFormatter2 = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss");

    public static String readByLineRs(String path) {
        StringBuffer sb = new StringBuffer();
        File file = new File(path);
        BufferedReader reader = null;
        String temp = null;
        try {
            reader = new BufferedReader(new FileReader(file));
            while ((temp = reader.readLine()) != null) {
                sb.append(temp).append("\n");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return sb.toString();
    }


    /**
     * 依次替换{}
     * 例 : join("a={},b={}",1,2) => a=1,b=2
     *
     * @param str
     * @param param
     * @return
     */
    public static String join(String str, Object... param) {
        try {
            for (Object p : param) {
                String processedParam = p.toString().replace("\\", "\\\\");
                str = str.replaceFirst("\\{\\}", processedParam);
            }
        } catch (Exception e) {
            for (Object p : param) {
                str = str + p;
            }
        }
        return str;
    }

    public static void writeString(String content, String path) {
        try {
            File file = new File(path);
            if (!file.exists()) {
                file.createNewFile();
            }
            FileWriter fw = new FileWriter(file.getAbsoluteFile());
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write(content);
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static void info(String str, Object... param) {
        System.out.println(LocalDateTime.now().format(dateFormatter) + "|" + join(str, param));
    }

    public static String getDayTime() {
        return LocalDateTime.now().format(dateFormatter2);
    }


    public static void createDirectoryIfNotExists(String absolutePath) {
        File file = new File(absolutePath);
        // 获取文件所在的目录
        File parentDir = file.getParentFile();
        if (parentDir != null && !parentDir.exists()) {
            // 创建目录
            parentDir.mkdirs();
        }
    }

}

4.3.service

4.3.1.DbInfoExportWordService.java

package cn.nordrassil.db2doc;

import cn.nordrassil.db2doc.dto.DbInfoDTO;
import cn.nordrassil.db2doc.dto.ExportWordParamDTO;
import com.alibaba.fastjson.JSONObject;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyles;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import static cn.nordrassil.db2doc.util.CommonUtil.*;


// 参考: https://blog.csdn.net/qq_37945565/article/details/121518330

public class DbInfoExportWordService {

    public static List<String> tableTitles = new ArrayList<String>() {{
        add("序号");
        add("字段名");
        add("字段类型");
        add("长度");
        add("非空");
        add("主键");
        add("默认值");
        add("注释");
    }};

    public static List<String> fields = new ArrayList<String>() {{
        add("name");
        add("type");
        add("length");
        add("allowEmpty");
        add("isPrimaryKey");
        add("defaultValue");
        add("describe");
    }};

    public static void generateWord(ExportWordParamDTO paramDTO) throws Exception {
        // 获得模板文档的整体样式
        XWPFDocument template = new XWPFDocument(new FileInputStream(paramDTO.getWordTemplateFile()));
        CTStyles wordStyles = template.getStyle();

        int totalTableCount = 0;
        int index = 1;
        List<DbInfoDTO> ds = paramDTO.getDs();
        XWPFDocument document = null;
        boolean merge = paramDTO.getMerge() != null && paramDTO.getMerge();
        if (merge) {
            document = new XWPFDocument();
        }
        for (DbInfoDTO d : ds) {
            info("执行第[{}/{}]生成word文档...表数量:{}", index, ds.size(), d.getTableInfos().size());
            if (!merge) {
                document = new XWPFDocument();
            }
            // 获取新建文档对象的样式
            XWPFStyles newStyles = document.createStyles();
            // 关键行// 修改设置文档样式为静态块中读取到的样式
            newStyles.setStyles(wordStyles);
            if (merge) {
                XWPFParagraph title1 = document.createParagraph();
                title1.setStyle("2");
                XWPFRun titleRun1 = title1.createRun();
                String dbText = index + "." + d.getDbName();
                if (d.getDbDescribe() != null) {
                    dbText += "(" + d.getDbDescribe().replaceAll("\r\n", "").replaceAll("\r", "").replaceAll("\n", "") + ")";
                }
                titleRun1.setText(dbText);
            }

            List<DbInfoDTO.TableInfo> tableInfos = d.getTableInfos();
            totalTableCount += tableInfos.size();
            for (int k = 0; k < tableInfos.size(); k++) {
                DbInfoDTO.TableInfo tableInfo = tableInfos.get(k);
                XWPFParagraph title2 = document.createParagraph();
                XWPFRun titleRun2 = title2.createRun();
                String tableText;
                if (merge) {
                    title2.setStyle("3");
                    tableText = index + "." + (k + 1) + "." + tableInfo.getTableName();
                } else {
                    title2.setStyle("2");
                    tableText = (k + 1) + "." + tableInfo.getTableName();
                }
                if (tableInfo.getTableDescribe() != null) {
                    tableText += "(" + tableInfo.getTableDescribe().replaceAll("\r\n", "").replaceAll("\r", "").replaceAll("\n", "") + ")";
                }
                titleRun2.setText(tableText);
                // 创建表格(第一列为序号)
                List<DbInfoDTO.TableField> tableFields = tableInfo.getTableFields();
                XWPFTable table = document.createTable(tableFields.size(), 8);
                int titleFontSize = 10;
                int textFontSize = 8;
                // 设置表格标题样式
                for (int i = 0; i < table.getRows().get(0).getTableCells().size(); i++) {
                    XWPFTableCell cell = table.getRows().get(0).getCell(i);
                    XWPFParagraph cellParagraph = cell.getParagraphs().get(0);
                    cellParagraph.setIndentationLeft(0); // 设置左侧缩进为0
                    cellParagraph.setIndentationRight(0); // 设置右侧缩进为0
                    cellParagraph.setIndentationFirstLine(0); // 设置首行缩进为0
                    cellParagraph.setIndentationLeft(0);

                    // 设置单元格背景色为灰色
                    CTTcPr cellPr = cell.getCTTc().addNewTcPr();
                    CTShd shd = cellPr.addNewShd();
                    shd.setFill("D3D3D3");
                    cellParagraph.setAlignment(ParagraphAlignment.CENTER);
                    XWPFRun cellRun = cellParagraph.createRun();
                    cellRun.setBold(true);
                    cellRun.setText(tableTitles.get(i));
                    cellRun.setFontSize(titleFontSize);

                }
                // 写入表格内容
                for (int row = 1; row < table.getNumberOfRows(); row++) {
                    for (int col = 0; col < table.getRow(row).getTableCells().size(); col++) {
                        XWPFTableCell cell = table.getRow(row).getCell(col);
                        XWPFParagraph cellParagraph = cell.getParagraphs().get(0);
                        XWPFRun cellRun = cellParagraph.createRun();
                        if (col == 0) {
                            cellRun.setText(row + "");
                        } else {
                            DbInfoDTO.TableField tableField = tableFields.get(row - 1);
                            JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(tableField));
                            cellRun.setText(jsonObject.getString(fields.get(col - 1)));
                        }
                        CTTcPr tcPr = cell.getCTTc().getTcPr();
                        if (tcPr == null) {
                            tcPr = cell.getCTTc().addNewTcPr();
                        }
                        if (!tcPr.isSetTcMar()) {
                            tcPr.addNewTcMar();
                        }
                        tcPr.getTcMar().addNewLeft().setW(0);
                        tcPr.getTcMar().addNewRight().setW(0);
                        tcPr.getTcMar().addNewTop().setW(0);
                        tcPr.getTcMar().addNewBottom().setW(0);
                        cellRun.setFontSize(textFontSize);
                        cellParagraph.setIndentationLeft(0);
                        // 设置段落左对齐
                        cellParagraph.setAlignment(ParagraphAlignment.LEFT);
                        // 设置左缩进为 0
                        cellParagraph.setIndentationLeft(0);
                    }
                }
            }

            if (!merge) {
                // 保存文档
                String outputFile = paramDTO.getExportFolder() + File.separator + d.getDbName() + ".docx";
                createDirectoryIfNotExists(outputFile);
                try (FileOutputStream out = new FileOutputStream(outputFile)) {
                    document.write(out);
                    info("第[{}/{}]数据库信息生成word文档完成, 文档路径:{}", index, ds.size(), outputFile);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            index++;
        }
        if (merge) {
            // 保存文档
            String outputFile = paramDTO.getExportFolder() + File.separator + getDayTime() + "_all_db.docx";
            createDirectoryIfNotExists(outputFile);
            try (FileOutputStream out = new FileOutputStream(outputFile)) {
                document.write(out);
                info("所有数据库信息生成word文档完成, 文档路径:{}", outputFile);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        info("数据库已导出为word文档完成, 数据库数量:{}, 所有表总数量:{}", ds.size(), totalTableCount);
    }
}

4.3.2.GetDbInfoService.java

package cn.nordrassil.db2doc;

import cn.nordrassil.db2doc.dto.DbConnParamDTO;
import cn.nordrassil.db2doc.dto.DbInfoDTO;

import java.util.List;

public interface GetDbInfoService {

    List<DbInfoDTO> get(DbConnParamDTO dto);
}

5.依赖 

5.1.mave依赖

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
            <scope>provided</scope>
        </dependency>
        <!-- Apache Commons Compress 用于处理多种归档文件格式 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-compress</artifactId>
            <version>1.24.0</version>
        </dependency>
        <!-- Apache Commons IO 提供了 IO 操作的工具类 -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.13.0</version>
        </dependency>
        <dependency>
            <groupId>com.github.junrar</groupId>
            <artifactId>junrar</artifactId>
            <version>7.5.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.2.3</version>
        </dependency>

5.2.word文档模板

word/word模板.docx · 楽焫旒璡/public-share - 码云 - 开源中国

6.测试

6.1.MyTest.java

package cn.nordrassil.db2doc;

import cn.nordrassil.db2doc.dto.DbConnParamDTO;
import cn.nordrassil.db2doc.dto.DbInfoDTO;
import cn.nordrassil.db2doc.dto.ExportWordParamDTO;
import cn.nordrassil.db2doc.impl.GetDbInfoKingBaseEsService;
import cn.nordrassil.db2doc.util.CommonUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class MyTest {

    public static void main(String[] args) throws Exception {
        String exportFolder = System.getProperty("user.dir") + File.separator + "files";
        String templateFile = "F:\\文档\\开发\\word模板.docx";
        String resultFile = exportFolder + File.separator + "result.json";
        //getDbInfo(resultFile);

        List<DbInfoDTO> ds = readData(resultFile);
        ExportWordParamDTO exportWordParamDTO = new ExportWordParamDTO(
                ds, templateFile, exportFolder, true
        );
        //DbInfoExportWordService.generateWord(exportWordParamDTO);
    }

    public static void getDbInfo(String resultFile) throws Exception {
        GetDbInfoService getDbInfoService = new GetDbInfoKingBaseEsService();
        List<DbInfoDTO> dbInfoDTOS = getDbInfoService.get(new DbConnParamDTO(
                "192.168.1.1",
                5432,
                "root",
                "123456",
                "test",
                "test",
                true
        ));
        CommonUtil.writeString(JSONObject.toJSONString(dbInfoDTOS), resultFile);
    }

    public static List<DbInfoDTO> readData(String resultFile) {
        JSONArray jas = JSONObject.parseArray(CommonUtil.readByLineRs(resultFile));
        List<DbInfoDTO> ds = new ArrayList<>();
        for (int i = 0; i < jas.size(); i++) {
            JSONObject ja = jas.getJSONObject(i);
            DbInfoDTO dbInfo = new DbInfoDTO();
            dbInfo.setDbName(ja.getString("dbName"));
            dbInfo.setDbDescribe(ja.getString("dbDescribe"));
            List<DbInfoDTO.TableInfo> tableInfos = new ArrayList<>();
            dbInfo.setTableInfos(tableInfos);
            JSONArray tis = ja.getJSONArray("tableInfos");
            for (int k = 0; k < tis.size(); k++) {
                JSONObject ti = tis.getJSONObject(k);
                DbInfoDTO.TableInfo tableInfo = new DbInfoDTO.TableInfo();
                tableInfos.add(tableInfo);
                tableInfo.setTableName(ti.getString("tableName"));
                tableInfo.setTableDescribe(ti.getString("tableDescribe"));
                JSONArray tfs = ti.getJSONArray("tableFields");
                List<DbInfoDTO.TableField> tableFields = new ArrayList<>();
                tableInfo.setTableFields(tableFields);
                for (int j = 0; j < tfs.size(); j++) {
                    JSONObject tf = tfs.getJSONObject(j);
                    tableFields.add(new DbInfoDTO.TableField(
                            tf.getString("name"),
                            tf.getString("type"),
                            tf.getInteger("length"),
                            tf.getString("allowEmpty"),
                            tf.getString("isPrimaryKey"),
                            tf.getString("defaultValue"),
                            tf.getString("describe")
                    ));
                }
            }
            ds.add(dbInfo);
        }
        return ds;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3588平台用v4l工具调试USB摄像头实践(亮度,饱和度,对比度,色相等)

目录 前言:v4l-utils简介 一&#xff1a;查找当前的摄像头设备 二&#xff1a;查看当前摄像头支持的v4l2-ctl调试参数 三根据提示设置对应参数&#xff0c;在提示范围内设置 四&#xff1a;常用调试命令 五:应用内执行命令方法 前言:v4l-utils简介 v4l-utils工具是由Linu…

在Linux中,使用read函数去读取写入文件空洞部分时,读取出来的内容是什么?为什么这样操作,以及应用场景?

使用 read 函数读取文件空洞&#xff08;hole&#xff09;部分时&#xff0c;读取到的内容会被系统填充为 \0&#xff08;即零字节&#xff09;。文件空洞是稀疏文件中未实际分配磁盘空间的区域&#xff0c;但逻辑上表现为连续的零字节。 1.在指定空洞部分后&#xff0c;写入数…

Qt6笔记-对Qt6中对CMakeLists.txt的解析

首先&#xff0c;新建Qt Console Application项目。 下面对CMakeLists.txt进行次理解。新建好后&#xff0c;Qt Creator会生成CMakeLists.txt&#xff0c;具体内容如下&#xff1a; cmake_minimum_required(VERSION 3.16)project(EasyCppMain LANGUAGES CXX)set(CMAKE_AUTOUIC…

CIFAR10图像分类学习笔记(三)---数据加载load_cifar10

新创建一个load_cifar10源文件 需要导入的包 import glob from torchvision import transforms from torch.utils.data import DataLoader ,Dataset import os #读取工具 from PIL import Image import numpy as np 01同样定义10个类别的标签名数组 label_name ["airpl…

计算机视觉cv入门之答题卡自动批阅

前边我们已经讲解了使用cv2进行图像预处理与边缘检测等方面的知识&#xff0c;这里我们以答题卡自动批阅这一案例来实操一下。 大致思路 答题卡自动批阅的大致流程可以分为这五步&#xff1a;图像预处理-寻找考试信息区域与涂卡区域-考生信息区域OCR识别-涂卡区域填涂答案判断…

Java学习手册:JSON 数据格式基础知识

1. JSON 简介 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于阅读和编写&#xff0c;也易于机器解析和生成。它最初来源于 JavaScript&#xff0c;但如今已被许多语言所采用&#xff0c;包括 Java、Python、C 等。JSON 以…

《重塑AI应用架构》系列: Serverless与MCP融合创新,构建AI应用全新智能中枢

在人工智能飞速发展的今天&#xff0c;数据孤岛和工具碎片化问题一直是阻碍AI应用高效发展的两大难题。由于缺乏统一的标准&#xff0c;AI应用难以无缝地获取和充分利用数据价值。 为了解决这些问题&#xff0c;2024年AI领域提出了MCP&#xff08;Model Context Protocol模型上…

深度图可视化

import cv2# 1.读取一张深度图 depth_img cv2.imread("Dataset_depth/images/train/1112_0-rgb.png", cv2.IMREAD_UNCHANGED) print(depth_img.shape) cv2.imshow("depth", depth_img) # (960, 1280) print(depth_img)# 读取一张rgb的图片做对比 input_p…

微软Edge浏览器字体设置

前言 时间&#xff1a;2025年4月 自2025年4月起&#xff0c;微软Edge浏览器的默认字体被微软从微软雅黑替换成了Noto Sans&#xff0c;如下图。Noto Sans字体与微软雅黑风格差不多&#xff0c;但在4K以下分辨率的显示器上较微软雅黑更模糊&#xff0c;因此低分辨率的显示器建议…

Vue生命周期详细解析

前言 Vue.js作为当前最流行的前端框架之一&#xff0c;其生命周期钩子函数是每个Vue开发者必须掌握的核心概念。本文将全面解析Vue的生命周期&#xff0c;帮助开发者更好地理解Vue实例的创建、更新和销毁过程。 一、Vue生命周期概述 Vue实例从创建到销毁的整个过程被称为Vue…

基于c#,wpf,ef框架,sql server数据库,音乐播放器

详细视频: 【基于c#,wpf,ef框架,sql server数据库&#xff0c;音乐播放器。-哔哩哔哩】 https://b23.tv/ZqmOKJ5

前端项目搭建集锦:vite、vue、react、antd、vant、ts、sass、eslint、prettier、浏览器扩展,开箱即用,附带项目搭建教程

前端项目搭建集锦&#xff1a;vite、vue、react、antd、vant、ts、sass、eslint、prettier、浏览器扩展&#xff0c;开箱即用&#xff0c;附带项目搭建教程 前言&#xff1a;一、Vue项目下载快速通道二、React项目下载快速通道三、BrowserPlugins项目下载快速通道四、项目搭建教…

什么是Maven

Maven的概念 Maven是一个一键式的自动化的构建工具。Maven 是 Apache 软件基金会组织维护的一款自动化构建工具&#xff0c;专注服务于Java 平台的项目构建和依赖管理。Maven 这个单词的本意是&#xff1a;专家&#xff0c;内行。Maven 是目前最流行的自动化构建工具&#xff0…

neo4j中节点内的名称显示不全解决办法(如何让label在节点上自动换行)

因为节点过多而且想让节点中所有文字都显示出来而放大节点尺寸 从neo4j中导出png,再转成PDF来查看时&#xff0c;要看清节点里面的文字就得放大5倍才行 在网上看了很多让里面文字换行的办法都不行 然后找到一个比较靠谱的办法是在要显示的标签内加换行符 但是我的节点上显示的是…

【GIT】github中的仓库如何删除?

你可以按照以下步骤删除 GitHub 上的仓库&#xff08;repository&#xff09;&#xff1a; &#x1f6a8; 注意事项&#xff1a; ❗️删除仓库是不可恢复的操作&#xff0c;所有代码、issue、pull request、release 等内容都会被永久删除。 &#x1f9ed; 删除 GitHub 仓库步骤…

3台CentOS虚拟机部署 StarRocks 1 FE+ 3 BE集群

背景&#xff1a;公司最近业务数据量上去了&#xff0c;需要做一个漏斗分析功能&#xff0c;实时性要求较高&#xff0c;mysql已经已经不在适用&#xff0c;做了个大数据技术栈选型调研后&#xff0c;决定使用StarRocks StarRocks官网&#xff1a;StarRocks | A High-Performa…

【HCIA】简易的两个VLAN分别使用DHCP分配IP

前言 之前我们通过 静态ip地址实现了Vlan间通信 &#xff0c;现在我们添加一个常用的DHCP功能。 文章目录 前言1. 配置交换机2. 接口模式3. 全局模式后记修改记录 1. 配置交换机 首先&#xff0c;使用DHCP&#xff0c;需要先启动DHCP服务&#xff1a; [Huawei]dhcp enable I…

艾蒙顿桌面app下载-Emotn UI下载安装-emotn ui官方tv版安卓固件

在智能电视桌面应用的领域里&#xff0c;Emotn UI 凭借其简洁无广告、可自定义等特点&#xff0c;赢得了不少用户的关注。然而&#xff0c;小编深入了解后发现了一款更好用的电视桌面——乐看家桌面在诸多方面更具优势&#xff0c;能为你带来更优质的大屏体验。 乐看家桌面内置…

3、ArkTS语言介绍

目录 基础知识函数函数声明可选参数Rest参数返回类型箭头函数&#xff08;又名Lambda函数&#xff09;闭包 类字段字段初始化getter和setter继承父类访问方法重写方法重载签名可见性修饰符&#xff08;Public、Private、protected&#xff09; 基础知识 ArkTS是一种为构建高性…

修改了Element UI中组件的样式,打包后样式丢失

修改了Element UI中组件的样式&#xff0c;在本地运行没有问题&#xff0c;但是打包到线上发现样式丢失&#xff08;样式全部不生效、或者有一部分生效&#xff0c;一部分不生效&#xff09;&#xff0c;问题在于css的加载顺序导致代码编译后样式被覆盖了&#xff0c; 解决办法…