掘金 后端 ( ) • 2024-06-16 16:34

这是一篇介绍如何通过将代码内容转成excel表格的文章,为啥要转excel呢?虽然用 swagger 可以自动生成 API 文档,但是会有一些公司需要按照指定的格式整理接口文档进行归档(emmmm不要问我为什么知道有。。)这些指定的格式一般都是基于word或者excel的,而诸如字段名、字段类型、字段含义基本都是采取表格的形式,今天的文章就手把手带实现DO对象转excel表格~

二话不说,先上代码(仅需要实现功能的同学可以直接拿去用~想要了解具体实现逻辑思路的可以继续往下看^^)

完整代码

public class Main {


    public static void main(String[] args) {
        String txtFilePath = "txt文件绝对路径";

        // 读取文本文件中的内容
        String content = null;
        try {
            content = new String(Files.readAllBytes(Paths.get(txtFilePath)));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        String[] splits = content.split("#");
        for (int i = 1; i < splits.length; i++) {
            System.out.println(splits[i]);
            String[] split = splits[i].split("@TableField");
            String cn = split[0].replace("*/","").trim();
            System.out.println("cn: " + cn);
            String[] split2 = split[1].split("\s+");
            String type = split2[2];
            System.out.println("type: " + type);
            String en = split2[3].substring(0, split2[3].length() - 2);
            System.out.println("en: " + en);

            System.out.println("--------------------");
        }

       
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Data");
        
        Row titleRow = sheet.createRow(0);
        titleRow.createCell(0).setCellValue("EN");
        titleRow.createCell(1).setCellValue("Type");
        titleRow.createCell(2).setCellValue("CN");

        for (int rowNum = 1; rowNum < splits.length; rowNum++) {
            String[] split = splits[rowNum].split("@TableField");
            String cn = split[0].replace("*/","").trim();
            System.out.println("cn: " + cn);
            String[] split2 = split[1].split("\s+");
            String type = split2[2];
            System.out.println("type: " + type);
            String en = split2[3].substring(0, split2[3].length() - 2);
            System.out.println("en: " + en);

           
            Row dataRow = sheet.createRow(rowNum);
            dataRow.createCell(0).setCellValue(en);
            dataRow.createCell(1).setCellValue(type);
            dataRow.createCell(2).setCellValue(cn);
        }

     
        try (FileOutputStream outputStream = new FileOutputStream("output.xlsx")) {
            workbook.write(outputStream);
            workbook.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

我们捋下上述代码 的基本流程:先创建一个新的 Excel 工作簿,然后创建一个工作表(sheet),写入标题,然后通过for循环开始写入数据,行号从 1 开始,因为第一行是标题,每完成一行,创建一个新的行,将数据写入同一行的指定列,最后for循环结束,将工作簿写入到文件中。

具体使用流程

  1. 安装插件

打开编辑中的设置选项

找到插件(Plugins),搜索 MyBatisX 安装即可

  1. 使用插件生成DO对象

找到 Database

点击 Database 中的“+”,选择数据源中的 MySQL(如何找到 Database )

配置数据库信息

右键单击你要创建的表选择 “MybatisX-Generator”

填充创建信息

选好属性,点击完成即可

这样生成的DO对象一般长这样

值得注意的是这里生成的字段上都有个@TableField的注解,这个注解是用于指定普通字段与数据库表字段的映射关系的,其他相关的还有@TableName@TableId,其中@TableName 用于指定实体类对应的数据库表名,而@TableId 则用于标识主键字段及其生成策略(诸如自增ID等)。

ps:如果不一样文章开头的代码就不能直接拿去用,需要做兼容处理(不过基本都是长这个样子,想用其他方式的可以参考我之前的那篇【保姆级】手把手带你用MyBatis Plus制作代码生成https://juejin.cn/post/7367192073097330722)

  1. 导入至 txt 中处理

将所有字段复制到一个txt文本中,将“* ”替换成“#"(注意“*”后面有一个空格),替换后的效果如下图:

  1. 执行代码

将代码中的文件路径改为你这个,然后执行即可,执行后的效果:

然后直接拷贝进模板即可,当然你也可以按照自身的需求做各种兼容和调整~~

这是一个比较直接并且有些笨的实现,也希望有更好实现方式的朋友可以多交流下~不胜感激~~~