JAVA操作word 读取模板文件

想做一个java操作word的程序,实现读取模板文件,修改部分内容,生成新文件这样的功能。

package zb;
import java.io.File;

import java.io.FileInputStream;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.PrintWriter;

import com.zb.j.UserDate;

 
/**
 * 操作word
 * 读取模板文件
 * 
 * @author Administrator
 *
 */
public class xinxiribao {

 

	/**

	* 字符串转换为rtf编码

	* @param content

	* @return

	*/

	public String strToRtf(String content){

		char[] digital = "0123456789ABCDEF".toCharArray();

        StringBuffer sb = new StringBuffer("");

        byte[] bs = content.getBytes();

        int bit;

        for (int i = 0; i < bs.length; i++) {

            bit = (bs[i] & 0x0f0) >> 4;

        	sb.append("\\'");

            sb.append(digital[bit]);

            bit = bs[i] & 0x0f;

            sb.append(digital[bit]);

        }

        return sb.toString();

	}

	

	/**

	* 替换文档的可变部分

	* @param content

	* @param replacecontent

	* @param flag

	* @return

	*/

	public String replaceRTF(String content,String replacecontent,int flag){

		String rc = strToRtf(replacecontent);

		String target = "";

		/*if(flag==0){

			target = content.replace("$time$",rc);

		}*/

		if(flag==0){

			target = content.replace("$mm$",rc);

		}

		if(flag==1){

			target = content.replace("$ri$",rc);

		}

		if(flag==2){

			target = content.replace("$y1$",rc);

		}

		if(flag==3){

			target = content.replace("$m1$",rc);

		}

		if(flag==4){

			target = content.replace("$d1$",rc);

		}

		if(flag==5){

			target = content.replace("$y2$",rc);

		}

		if(flag==6){

			target = content.replace("$m2$",rc);

		}

		if(flag==7){

			target = content.replace("$d2$",rc);

		}

		if(flag==8){

			target = content.replace("$baojishi$",rc);

		}

		if(flag==9){

			target = content.replace("$hanzhongshi$",rc);

		}

		if(flag==10){

			target = content.replace("$weinanshi$",rc);

		}

		if(flag==11){

			target = content.replace("$xianyangshi$",rc);

		}

		if(flag==12){

			target = content.replace("$shangluoshi$",rc);

		}

		if(flag==13){

			target = content.replace("$tongchuanshi$",rc);

		}

		if(flag==14){

			target = content.replace("$yanan$",rc);

		}

		if(flag==15){

			target = content.replace("$yulin$",rc);

		}

		if(flag==16){

			target = content.replace("$ankang$",rc);

		}

		if(flag==17){

			target = content.replace("$longxian$",rc);

		}

		if(flag==18){

			target = content.replace("$lueyang$",rc);

		}

		if(flag==19){

			target = content.replace("$yangling$",rc);

		}

		if(flag==20){

			target = content.replace("$hancheng$",rc);

		}

		if(flag==21){

			target = content.replace("$ziwu$",rc);

		}

		if(flag==22){

			target = content.replace("$maoxi$",rc);

		}

		if(flag==23){

			target = content.replace("$zhouzhijing$",rc);

		}

		if(flag==24){

			target = content.replace("$guangji$",rc);

		}

		if(flag==25){

			target = content.replace("$qianlin$",rc);

		}
		
		if(flag==26){

			target = content.replace("$panxi$",rc);

		}

		if(flag==27){

			target = content.replace("$shangwang$",rc);

		}

		if(flag==28){

			target = content.replace("$hanzhong$",rc);

		}

		if(flag==29){

			target = content.replace("$813$",rc);

		}

		if(flag==30){

			target = content.replace("$405$",rc);

		}

		if(flag==31){

			target = content.replace("$mianxian$",rc);

		}

		if(flag==32){

			target = content.replace("$luonan$",rc);

		}

		if(flag==33){

			target = content.replace("$ankang$",rc);

		}

		if(flag==34){

			target = content.replace("$ningshan$",rc);

		}

		if(flag==35){

			target = content.replace("$heyang$",rc);

		}

		if(flag==36){

			target = content.replace("$jingyang$",rc);

		}

		if(flag==37){

			target = content.replace("$kouzhen$",rc);

		}

		if(flag==38){

			target = content.replace("$dali$",rc);

		}

		if(flag==39){

			target = content.replace("$shuangwang$",rc);

		}

		if(flag==40){

			target = content.replace("$yulin$",rc);

		}

		if(flag==41){

			target = content.replace("$mail1$",rc);

		}

		if(flag==42){

			target = content.replace("$mail2$",rc);

		}

		if(flag==43){

			target = content.replace("$ip$",rc);

		}

		if(flag==44){

			target = content.replace("$web$",rc);

		}

		if(flag==45){

			target = content.replace("$user$",rc);

		}


		return target;

	}

	

	/**

	* 获取文件路径

	* @param flag

	* @return

	*/

	public String getSavePath() {

		

		String path = "D:\\值班模板";

		

		File fDirecotry = new File(path);

		if (!fDirecotry.exists()) {

			fDirecotry.mkdirs();

		}

		return path;

	}

	

	/**

	* 半角转为全角

	*/

	public String ToSBC(String input){

	   char[] c = input.toCharArray();

	   for (int i = 0; i < c.length; i++){

	       if (c[i] == 32){

	           c[i] = (char) 12288;

	           continue;

	       }

	       if (c[i] < 127){

	       	c[i] = (char) (c[i] + 65248);

	       }

	   }

	   return new String(c);

	}

	

	public void rgModel(String content) {

		// TODO Auto-generated method stub

		/*  构建生成文件名 targetname:陕西省信息网络运行日报-3月22日.rtf */

		UserDate ud = new UserDate();
		
		String td = ud.getLocalDate();

		String targetname = "陕西省信息网络运行日报-" + td.substring(5,7) + "月";

		targetname += td.substring(8,10) + "日.rtf";


		

		/* 字节形式读取模板文件内容,将结果转为字符串 */

		String strpath = getSavePath();

		String sourname = strpath+"\\"+"信息模板.rtf";

		String sourcecontent = "";

		InputStream ins = null;

		try{

			ins = new FileInputStream(sourname);

			byte[] b = new byte[1024];

	        if (ins == null) {

	             System.out.println("源模板文件不存在");

	        }

	        int bytesRead = 0;

	        while (true) {

	            bytesRead = ins.read(b, 0, 1024); // return final read bytes counts

	            if(bytesRead == -1) {// end of InputStream

	           	System.out.println("读取模板文件结束");

	           	break;

	            }

	            sourcecontent += new String(b, 0, bytesRead); // convert to string using bytes

	         }

		}catch(Exception e){

			e.printStackTrace();

		}

		/* 修改变化部分 */

		String targetcontent = "";

		/**

		* 拆分之后的数组元素与模板中的标识符对应关系

		* array[0]:timetop    

		* array[1]:info		

		* array[2]:idea		

		* array[3]:advice		

		* array[4]:infosend	

		*/

		String array[] = content.split("~");
		
		/**

		* 2008年11月27日:更新模板之后时间无需自动填充

		*/


		for(int i=0;i<array.length;i++){

			/*if(i==0){

				targetcontent = documentDoc.replaceRTF(sourcecontent,nowtime,i);

			}else{

				targetcontent = documentDoc.replaceRTF(targetcontent,array[i-1],i);

			}*/

			if(i==0){
				
				targetcontent = replaceRTF(sourcecontent, array[i], i);

			}else{

				targetcontent = replaceRTF(targetcontent, array[i], i);

			}

			

		}	

		/* 结果输出保存到文件 */

		try {

			FileWriter fw = new FileWriter(getSavePath()+"\\" + targetname,true);

            PrintWriter out = new PrintWriter(fw);

            if(targetcontent.equals("")||targetcontent==""){

            	out.println(sourcecontent);

            }else{

            	out.println(targetcontent);

            }

            out.close();

            fw.close();

            System.out.println(getSavePath()+"  该目录下生成文件" + targetname + " 成功");

		} catch (IOException e) {

			// TODO Auto-generated catch block

			e.printStackTrace();

		}

	}

	

	

	

	

	public static void main(String[] args) {

		// TODO Auto-generated method stub

		xinxiribao xxrb = new xinxiribao();

		/**

		* 被替换内容以"~"符号分割,处理的时候将其拆分为数组即可

		*/
		
		UserDate ud = new UserDate();
		
		String td = ud.getLocalDate();
		String yd = ud.getYesterday();
		
		String yy = td.substring(0, 4);
		String mm = td.substring(5, 7);
		String dd = td.substring(8, 10);
		
		String y1 = yd.substring(0, 4);
		String m1 = yd.substring(5, 7);
		String d1 = yd.substring(8, 10);
		
		String y2 = yy;
		String m2 = mm;
		String d2 = dd;

		String content = mm+"~"+dd+"~"+y1+"~"+m1+"~"+d1+"~"+y2+"~"+m2+"~"+d2+"~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~100~230~78~0~0~李瑞华";

		System.out.println(content);
		xxrb.rgModel(content);

 

	}

 


}

 

 

在模板中,需要修改的内容写成$mm$这样的形式,并且要设置为“宋体”,这样就不会出现中午乱码~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值