JAVA动态生成word文档

本文介绍如何使用Java进行数据库连接,并从数据库中获取数据生成Word文档。通过MySQL数据库连接,查询需求信息并利用FreeMarker模板引擎填充数据,最终生成包含特定格式日期的Word文档。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、创建数据库连接

	private static Connection conn = null;
	private static String url = "jdbc:mysql://127.0.0.1:3306/pm?useUnicode=true&characterEncoding=utf8"; 
	private static String userName = "root";
	private static String password = "root";
	
	//创建连接
	public static Connection MysqlConnect() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			// 驱动 Connection
			try {
				conn = DriverManager.getConnection(url, userName, password);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			System.out.println("数据库连接失败!");
		}
		return conn;
	}

二、生成word文档

public static String toWord(){
		
		Connection mysqlConnect = MysqlConnect();
		
		String RE_INITIATOR = "1";
		String RE_INITIATOR_DEP = "1";
		String RE_START_TIME = "1";
		String RE_END_TIME = "1";
		String RE_RELATED_DEP = "1";
		String RE_IS_CROSS_DEP = "1";
		String RE_DISCREPTION = "1";
		
		try {
			Statement sts = null;
			String sql = "select * from pm_requirement where RE_ID = '1' ";
			ResultSet resul = null;

			try {
				sts = (Statement) mysqlConnect.createStatement();
				resul = sts.executeQuery(sql);
			} catch (SQLException e) {
				e.printStackTrace();
			}
			System.out.println("查询的结果如下:");
			while(resul.next()){
				RE_INITIATOR = resul.getString("RE_INITIATOR");
				//RE_INITIATOR_DEP = resul.getString("RE_INITIATOR_DEP");
				RE_START_TIME = resul.getString("RE_START_TIME");
				RE_END_TIME = resul.getString("RE_END_TIME");
				//RE_RELATED_DEP = resul.getString("RE_RELATED_DEP");
				//RE_IS_CROSS_DEP = resul.getString("RE_IS_CROSS_DEP");
				RE_DISCREPTION = resul.getString("RE_DISCREPTION");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		
        Map<String,Object> dataMap = new HashMap<String, Object>();
        String fileurl=null;
        try {
            //日期
            dataMap.put("RE_START_TIME", new SimpleDateFormat("yyyy年MM月dd日").format(new SimpleDateFormat("yyyy-MM-dd").parse(RE_START_TIME)));
            dataMap.put("RE_END_TIME", new SimpleDateFormat("yyyy年MM月dd日").format(new SimpleDateFormat("yyyy-MM-dd").parse(RE_END_TIME)));
            
            dataMap.put("RE_INITIATOR", RE_INITIATOR);
            dataMap.put("RE_INITIATOR_DEP", RE_INITIATOR_DEP);
            //dataMap.put("RE_START_TIME", RE_START_TIME);
            //dataMap.put("RE_END_TIME", RE_END_TIME);
            dataMap.put("RE_RELATED_DEP", RE_RELATED_DEP);
            dataMap.put("RE_IS_CROSS_DEP", RE_IS_CROSS_DEP);
            dataMap.put("RE_DISCREPTION", RE_DISCREPTION);
            
            //Configuration 用于读取ftl文件
            Configuration configuration = new Configuration();
            configuration.setDefaultEncoding("utf-8");
            //指定路径的第二种方式,我的路径是C:/a.ftl
            configuration.setDirectoryForTemplateLoading(new File("D:/"));
            //输出文档路径及名称
            File outFile = new File("D:/业务需求单.doc");
            //以utf-8的编码读取ftl文件
            Template template = configuration.getTemplate("requirement.ftl", "utf-8");
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240);
            template.process(dataMap, out);
            out.close();
            fileurl = "D:/业务需求单.doc";
        } catch (Exception e) {
            e.printStackTrace();
        }

附:word模板制作

第一步:手动创建一个doc模板;

第二步:将world中需要动态生成的部分用${}替换

第三步:将world另存为xml文件

第四步:打开xml看一下${XXX}标签是否分开,如果分开了,将${}中间无用的代码删掉,重命名.xml 改为 .ftl

pom.xml引入freemarker.jar 

        <dependency>
             <groupId>org.freemarker</groupId>
             <artifactId>freemarker</artifactId>
             <version>2.3.20</version>
         </dependency>

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值