想做一个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$这样的形式,并且要设置为“宋体”,这样就不会出现中午乱码~~