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 & 0x0f0) >> 4; sb.append("\\'"); sb.append(digital); bit = bs & 0x0f; sb.append(digital); } 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 == 32){ c = (char) 12288; continue; } if (c < 127){ c = (char) (c + 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; 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:timetop * array:info* array:idea* array:advice* array: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);}*/if(i==0){targetcontent = replaceRTF(sourcecontent, array, i);}else{targetcontent = replaceRTF(targetcontent, array, 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 blocke.printStackTrace();}}public static void main(String[] args) {// TODO Auto-generated method stubxinxiribao 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$这样的形式,并且要设置为“宋体”,这样就不会出现中午乱码~~
页:
[1]