功能描述
本文是解析execl,获取excel信息,然后写成 sql 建表命令的text文本,最后使用navicat直接导入即可; 本文主要是postgres的导入,其他数据库只需修改部分代码即可
使用hutool
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.5</version>
</dependency>
准备excel
代码
package com.example.ph_tools;
import cn.hutool.core.io.file.FileWriter;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import lombok.Data;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.util.List;
public class ExcelCreatePsqlTable {
@Data
public static class ExcelEntity{
/** 字段名称 */
private String 字段;
/** 字段类型 */
private String 类型;
/** 字段注释 */
private String 注释;
/** 是否非空 */
private boolean 非空;
/** 是否主键 */
private boolean 主键;
}
@Test
void createTable(){
// excel目录
String excelUrl = "C:\test\建表.xlsx";
//生成sql目录
String destUrl = "C:\test\createTable.sql";
//创建到指定模块
String schema = ""public".";
// 使用hutool的文件写入流工具写入
FileWriter writer = new FileWriter(new File(destUrl));
// 获取excel的多个sheet
ExcelUtil.getReader(new File(excelUrl)).getSheetNames().forEach(e ->{
// 读取指定sheet
ExcelReader reader = ExcelUtil.getReader(excelUrl,e);
//获取的表名
String tableName = """+reader.readCellValue(0,0).toString().trim()+""";
String nameAndPoint = tableName+".";
//读取excel内容从第二行开始
List<ExcelEntity> list = reader.read(1,1,ExcelEntity.class);
// 记录备注
StringBuffer comment = new StringBuffer();
// 开始建表
writer.append("CREATE TABLE "+tableName+"(\n");
comment.append("COMMENT ON TABLE "+schema+tableName+" IS "+"'"+e+"';\n");
// for循环获取多个字段信息
for (int i = 0; i < list.size(); i++) {
ExcelEntity bean = list.get(i);
// 最后一个字段没有",",并加上");"
if (i<list.size()-1){
writer.append("\t\t\t\t"+bean.字段+" "+bean.类型+(bean.主键?" PRIMARY KEY":"")+(bean.非空?" NOT NULL":"")+",\n");
}else {
writer.append("\t\t\t\t"+bean.字段+" "+bean.类型+(bean.主键?" PRIMARY KEY":"")+(bean.非空?" NOT NULL":"")+");\n");
}
comment.append("COMMENT ON COLUMN "+schema+nameAndPoint+"""+bean.字段+"" IS '"+bean.注释+"';\n");
}
//建表命令完成,加上备注
writer.append(comment.toString());
});
}
}
结果
生成的sql文件
sql文件直接拖动到navicat表中
到此成功!!!