java从数据库生成word文档_Java 导出数据库表信息生成Word文档

一、前言

最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~

先来看看生成的word文档效果吧

b37997078c92f5df3e788e57d18b9867.png

下面我们也来一起简单的实现吧

二、Java 导出数据库表信息生成Word文档

温馨小提示:下面只是简单的展示一些主要代码,详情可参考文末给出的案例demo源码

基本环境

spring-boot 2.1.8

mybatis-plus 2.2.0

mysql 数据库

1、新增依赖

com.lowagie

itext

2.1.7

com.itextpdf

itext-asian

5.2.0

com.lowagie

itext-rtf

2.1.7

2、查询表数据信息

@Mapper

public interface TableMapper {

/**

* 获取指定数据库下所有表名和注释

*

* @param dbName:数据库名

* @return: java.util.List

*/

@Select("select table_name as name,table_comment as comment from information_schema.tables where table_schema =#{dbName} order by table_name")

List getAllTables(@Param("dbName") String dbName);

/**

* 获取指定表信息

*

* @param tableName:表

* @return: java.util.List

*/

@Select("SHOW FULL FIELDS FROM ${tableName}")

List getTable(@Param("tableName") String tableName);

}

3、生成word文档实现类

@Service

public class TableService implements ITableService {

@Autowired

private TableMapper tableMapper;

@Autowired

private TableToWordUtil tableToWordUtil;

@Override

public String getTableInfo() {

// 1、获取数据库所有表信息

List tables = tableMapper.getAllTables(Constants.DATABASE);

// 2、生成文件名信息 - 年月日时分秒

String date = null;

try {

date = DateTimeUtils.dateFormat(new Date(), DateTimeUtils.PARSE_PATTERNS[12]);

} catch (ParseException e) {

e.printStackTrace();

}

String docFileName = Constants.FILE_PATH + "\\" + Constants.FILE_NAME + "-" + date + ".doc";

// 3、调用工具类生成文件

tableToWordUtil.toWord(tables, docFileName, Constants.FILE_NAME);

// 4、返回文件地址

String filePath = docFileName.replaceAll("\\\\", "/");

return filePath;

}

}

4、其中生成word文档工具类

@Service

public class TableToWordUtil {

@Autowired

TableMapper tableMapper;

/**

* 生成word文档

*

* @param tables:该数据库下所有表信息

* @param fileName:生成文件地址

* @param title:文件内容标题

* @return: void

*/

public void toWord(List tables, String fileName, String title) {

Document document = new Document(PageSize.A4);

try {

// 创建文件夹

File dir = new File(Constants.FILE_PATH);

dir.mkdirs();

// 创建文件

File file = new File(fileName);

if (file.exists() && file.isFile()) {

file.delete();

}

file.createNewFile();

// 写入文件信息

RtfWriter2.getInstance(document, new FileOutputStream(fileName));

document.open();

Paragraph ph = new Paragraph();

Font f = new Font();

Paragraph p = new Paragraph(title, new Font(Font.NORMAL, 24, Font.BOLDITALIC, new Color(0, 0, 0)));

p.setAlignment(1);

document.add(p);

ph.setFont(f);

for (int i = 0; i < tables.size(); i++) {

String table_name = tables.get(i).getName();

String table_comment = tables.get(i).getComment();

List fileds = tableMapper.getTable(tables.get(i).getName());

String all = "" + (i + 1) + " 表名称:" + table_name + "(" + table_comment + ")";

Table table = new Table(6);

document.add(new Paragraph(""));

table.setBorderWidth(1);

table.setPadding(0);

table.setSpacing(0);

//添加表头的元素,并设置表头背景的颜色

Color chade = new Color(176, 196, 222);

Cell cell = new Cell("编号");

addCell(table, cell, chade);

cell = new Cell("字段名");

addCell(table, cell, chade);

cell = new Cell("类型");

addCell(table, cell, chade);

cell = new Cell("是否非空");

addCell(table, cell, chade);

cell = new Cell("是否主键");

addCell(table, cell, chade);

cell = new Cell("注释");

addCell(table, cell, chade);

table.endHeaders();

// 表格的主体

for (int k = 0; k < fileds.size(); k++) {

addContent(table, cell, (k + 1) + "");

addContent(table, cell, fileds.get(k).getField());

addContent(table, cell, fileds.get(k).getType());

addContent(table, cell, fileds.get(k).getNull().equals("YES") ? "否" : "是");

addContent(table, cell, fileds.get(k).getKey() != "" ? "是" : "否");

addContent(table, cell, fileds.get(k).getComment());

}

Paragraph pheae = new Paragraph(all);

//写入表说明

document.add(pheae);

//生成表格

document.add(table);

}

document.close();

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 添加表头到表格

*

* @param table

* @param cell

* @param chade

*/

private void addCell(Table table, Cell cell, Color chade) {

cell.setHorizontalAlignment(Element.ALIGN_CENTER);

cell.setBackgroundColor(chade);

table.addCell(cell);

}

/**

* 添加内容到表格

*

* @param table

* @param content

*/

private void addContent(Table table, Cell cell, String content) {

cell = new Cell(content);

cell.setHorizontalAlignment(Element.ALIGN_CENTER);

table.addCell(cell);

}

}

5、其中的一些常量参数

public class Constants {

/**

* 需要生成word文档的数据库

*/

public static final String DATABASE = "demo";

/**

* 生成文件名前缀

*/

public static final String FILE_NAME = "测试数据库";

/**

* 生成文件地址

*/

public static String FILE_PATH = "D:\\www";

}

三、测试生成效果

小编在demo中提供了一个get请求的接口http://localhost:8080/api/tableToWord

73f894b31db2806e2765b05a10709670.png

接下来我们就可以去返回的地址中查看生成文件了

b97c3cd237cbbb1c96f7aea9a61d7fe4.png

b433996c602b269133460a389f9cd850.png

案例demo源码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要使用Java动态获取数据库信息生成Word文档(包含格和柱状图),并且实现下载功能,可以按照以下步骤进行: 1. 连接数据库:使用Java的JDBC连接数据库,可以使用相关的驱动程序来实现。通过建立数据库连接,可以执行SQL查询语句来获取需要的数据。 2. 生成Word文档:使用Java的Apache POI库来创建和编辑Word文档。通过POI库提供的API,可以创建一个新的Word文档,并添加所需的内容,包括格和图。 3. 添加格:使用POI库提供的API,可以创建格对象并设置格的行数和列数。然后,通过遍历数据库查询结果,将数据逐行填充到格中。 4. 添加柱状图:使用POI库提供的API,可以创建柱状图对象,并设置图的标题、数据源以及数据系列。通过遍历数据库查询结果,将需要的数据添加到图的数据系列中。 5. 下载生成Word文档:可以使用Java的Servlet或Spring MVC等Web框架,在用户请求下载时生成Word文档,并将生成的文档通过HTTP响应返回给用户。可以设置适当的HTTP响应头,以使浏览器将响应内容作为文件下载。 总结: 通过JDBC连接数据库获取数据,使用Apache POI库生成Word文档,并根据数据库信息生成格和柱状图。最后通过Web框架下载生成的文档。这种方法可以实现动态生成和下载数据库信息Word文档,方便用户查看和使用。 ### 回答2: 在Java中,可以使用Apache POI库来生成Word文档,并使用JFreeChart库来生成柱状图。下面是一个大致的步骤来实现动态获取数据库信息生成Word文档(包含格和柱状图)并下载: 1. 首先,需要在Java项目中引入Apache POI以及JFreeChart的相关依赖。 2. 获取数据库中的数据,可以使用JDBC连接数据库,并执行SQL语句,将查询结果保存在一个数据集中。 3. 使用Apache POI的XWPFDocument类创建一个新的Word文档。 4. 在Word文档中创建一个格,根据查询结果的行数和列数创建对应大小的格。可以使用Apache POI的XWPFTable类来实现格的创建,以及设置格的样式和内容。 5. 将查询结果填充到格中,使用Apache POI的XWPFTableCell类来设置格中每个单元格的内容和样式。 6. 使用JFreeChart来生成柱状图,并将其插入到Word文档中。可以使用JFreeChart的相关类来创建柱状图,设置图的样式和标题,并将图导出为一个图片文件。 7. 使用Apache POI的XWPFParagraph类创建一个段落,并将生成的柱状图的图片插入到段落中。 8. 将段落添加到Word文档中。 9. 将生成Word文档保存到服务器的指定目录下,可以使用Apache POI的XWPFDocument类的write方法将文档写入到硬盘上的一个文件中。 10. 将生成Word文档提供给用户下载,可以使用Java的文件下载功能,将生成Word文档以文件流的形式返回给用户。 以上是动态获取数据库信息生成Word文档(包含格和柱状图)并下载的大致步骤,具体的实现需要根据项目的需求进行适当的调整和完善。 ### 回答3: 要实现动态获取数据库信息生成Word并下载,可以按照以下步骤进行操作: 1. 导入所需的Java库,如Apache POI(用于操作Word文档)和JFreeChart(用于生成柱状图)。 2. 连接数据库并查询需要的数据。使用Java数据库连接库(如JDBC)连接到数据库,并编写SQL查询语句。 3. 使用Apache POI创建Word文档,并插入格。使用POI的API逐行读取数据库查询结果,并将数据插入到Word格中。 4. 使用JFreeChart生成柱状图。根据从数据库中查询到的数据,使用JFreeChart库生成相应的柱状图。 5. 将格和柱状图插入到Word文档中。使用POI的API将格和柱状图插入到创建的Word文档中。 6. 设置下载功能。将生成Word文档保存到服务器上的指定路径。 7. 提供下载链接。将生成Word文档路径返回给前端,前端通过点击链接即可下载。 8. 设置下载文件的内容类型和文件名。在响应给前端的HTTP头中设置Content-Type为"application/msword",并设置Content-Disposition的attachment属性,指定下载的文件名。 通过以上步骤,可以实现动态获取数据库信息生成Word文档(包含格和柱状图),并提供下载功能。用户可以通过点击链接下载生成Word文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值