




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
java 根据word模板生成word 文档先下载jacob_1.10.1.zip。解压后将jacob.dll放到windows/system32下面或j2sdkbin下面。将jacob.jar加入项目。/* Java2word.java* To change this template, choose Tools | Template Manager* and open the template in the editor.*/* 传入数据为HashMap对象,对象中的Key代表word模板中要替换的字段,Value代表用来替换的值。* word模板中所有要替换的字段(即HashMap中的Key)以特殊字符开头和结尾,如:$code$、$date$,以免执行错误的替换。* 所有要替换为图片的字段,Key中需包含image或者Value为图片的全路径(目前只判断文件后缀名为:.bmp、.jpg、.gif)。* 要替换表格中的数据时,HashMap中的Key格式为“table$RN”,其中:R代表从表格的第R行开始替换,N代表word模板中的第N张表格;Value为ArrayList对象,ArrayList中包含的对象统一为String,一条String代表一行数据,ArrayList中第一条记录为特殊记录,记录的是表格中要替换的列号,如:要替换第一列、第三列、第五列的数据,则第一条记录为String3 “1”,”3”,”5”。*/package com.word.util;/* author kdl*/import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import com.jacob.activeX.ActiveXComponent;import .Dispatch;import .Variant;public class Java2word private boolean saveOnExit; /* * word文档 */ Dispatch doc = null; /* * word运行程序对象s */ private ActiveXComponent word; /* * 所有word文档 */ private Dispatch documents; /* * 构造函数 */ public Java2word() if(word=null) word = new ActiveXComponent(Word.Application); word.setProperty(Visible,new Variant(false); if(documents=null) documents = word.getProperty(Documents).toDispatch(); saveOnExit = false; /* * 设置参数:退出时是否保存 * param saveOnExit boolean true-退出时保存文件,false-退出时不保存文件 */ public void setSaveOnExit(boolean saveOnExit) this.saveOnExit = saveOnExit; /* * 得到参数:退出时是否保存 * return boolean true-退出时保存文件,false-退出时不保存文件 */ public boolean getSaveOnExit() return saveOnExit; /* * 打开文件 * param inputDoc String 要打开的文件,全路径 * return Dispatch 打开的文件 */ public Dispatch open(String inputDoc) return Dispatch.call(documents,Open,inputDoc).toDispatch(); /return Dispatch.invoke(documents,Open,Dispatch.Method,new ObjectinputDoc,new int1).toDispatch(); /* * 选定内容 * return Dispatch 选定的范围或插入点 */ public Dispatch select() return word.getProperty(Selection).toDispatch(); /* * 把选定内容或插入点向上移动 * param selection Dispatch 要移动的内容 * param count int 移动的距离 */ public void moveUp(Dispatch selection,int count) for(int i = 0;i count;i +) Dispatch.call(selection,MoveUp); /* * 把选定内容或插入点向下移动 * param selection Dispatch 要移动的内容 * param count int 移动的距离 */ public void moveDown(Dispatch selection,int count) for(int i = 0;i count;i +) Dispatch.call(selection,MoveDown); /* * 把选定内容或插入点向左移动 * param selection Dispatch 要移动的内容 * param count int 移动的距离 */ public void moveLeft(Dispatch selection,int count) for(int i = 0;i count;i +) Dispatch.call(selection,MoveLeft); /* * 把选定内容或插入点向右移动 * param selection Dispatch 要移动的内容 * param count int 移动的距离 */ public void moveRight(Dispatch selection,int count) for(int i = 0;i count;i +) Dispatch.call(selection,MoveRight); /* * 把插入点移动到文件首位置 * param selection Dispatch 插入点 */ public void moveStart(Dispatch selection) Dispatch.call(selection,HomeKey,new Variant(6); /* * 从选定内容或插入点开始查找文本 * param selection Dispatch 选定内容 * param toFindText String 要查找的文本 * return boolean true-查找到并选中该文本,false-未查找到文本 */ public boolean find(Dispatch selection,String toFindText) /从selection所在位置开始查询 Dispatch find = word.call(selection,Find).toDispatch(); /设置要查找的内容 Dispatch.put(find,Text,toFindText); /向前查找 Dispatch.put(find,Forward,True); /设置格式 Dispatch.put(find,Format,True); /大小写匹配 Dispatch.put(find,MatchCase,True); /全字匹配 Dispatch.put(find,MatchWholeWord,True); /查找并选中 return Dispatch.call(find,Execute).getBoolean(); /* * 把选定内容替换为设定文本 * param selection Dispatch 选定内容 * param newText String 替换为文本 */ public void replace(Dispatch selection,String newText) /设置替换文本 Dispatch.put(selection,Text,newText); /* * 全局替换 * param selection Dispatch 选定内容或起始插入点 * param oldText String 要替换的文本 * param newText String 替换为文本 */ public void replaceAll(Dispatch selection,String oldText,Object replaceObj) /移动到文件开头 moveStart(selection); if(oldText.startsWith(table) | replaceObj instanceof ArrayList) replaceTable(selection,oldText,(ArrayList) replaceObj); else String newText = (String) replaceObj; if(newText=null) newText=; if(oldText.indexOf(image) != -1&!newText.trim().equals() | newText.lastIndexOf(.bmp) != -1 | newText.lastIndexOf(.jpg) != -1 | newText.lastIndexOf(.gif) != -1) while(find(selection,oldText) replaceImage(selection,newText); Dispatch.call(selection,MoveRight); else while(find(selection,oldText) replace(selection,newText); Dispatch.call(selection,MoveRight); /* * 替换图片 * param selection Dispatch 图片的插入点 * param imagePath String 图片文件(全路径) */ public void replaceImage(Dispatch selection,String imagePath) Dispatch.call(Dispatch.get(selection,InLineShapes).toDispatch(),AddPicture,imagePath); /* * 替换表格 * param selection Dispatch 插入点 * param tableName String 表格名称,形如table$11、table$21.table$RN,R代表从表格中的第N行开始填充,N代表word文件中的第N张表 * param fields HashMap 表格中要替换的字段与数据的对应表 */ public void replaceTable(Dispatch selection,String tableName,ArrayList dataList) if(dataList.size() = 1) System.out.println(Empty table!); return; /要填充的列 String cols = (String) dataList.get(0); /表格序号 String tbIndex = tableName.substring(tableName.lastIndexOf() + 1); /从第几行开始填充 int fromRow = Integer.parseInt(tableName.substring(tableName.lastIndexOf($) + 1,tableName.lastIndexOf(); /所有表格 Dispatch tables = Dispatch.get(doc,Tables).toDispatch(); /要填充的表格 Dispatch table = Dispatch.call(tables,Item,new Variant(tbIndex).toDispatch(); /表格的所有行 Dispatch rows = Dispatch.get(table,Rows).toDispatch(); /填充表格 for(int i = 1;i dataList.size();i +) /某一行数据 String datas = (String) dataList.get(i); /在表格中添加一行 if(Dispatch.get(rows,Count).getInt() fromRow + i - 1) Dispatch.call(rows,Add); /填充该行的相关列 for(int j = 0;j datas.length;j +) /得到单元格 Dispatch cell = Dispatch.call(table,Cell,Integer.toString(fromRow + i - 1),colsj).toDispatch(); /选中单元格 Dispatch.call(cell,Select); /设置格式 Dispatch font = Dispatch.get(selection,Font).toDispatch(); Dispatch.put(font,Bold,0); Dispatch.put(font,Italic,0); /输入数据 Dispatch.put(selection,Text,datasj); /* * 保存文件 * param outputPath String 输出文件(包含路径) */ public void save(String outputPath) Dispatch.call(Dispatch.call(word,WordBasic).getDispatch(),FileSaveAs,outputPath); /* * 关闭文件 * param document Dispatch 要关闭的文件 */ public void close(Dispatch doc) Dispatch.call(doc,Close,new Variant(saveOnExit); word.invoke(Quit,new Variant); word = null; /* * 根据模板、数据生成word文件 * param inputPath String 模板文件(包含路径) * param outPath String 输出文件(包含路径) * param data HashMap 数据包(包含要填充的字段、对应的数据) */ public void toWord(String inputPath,String outPath,HashMap data) String oldText; Object newValue; try if(doc=null) doc = open(inputPath); Dispatch selection = select(); Iterator keys = data.keySet().iterator(); while(keys.hasNext() oldText = (String) keys.next(); newValue = data.get(oldText); replaceAll(selection,oldText,newValue); save(outPath); catch(Exception e) System.out.println(操作word文件失败!); e.printStackTrace(); finally if(doc != null) close(doc); public synchronized static void word(String inputPath,String outPath,HashMap data) Java2word j2w = new Java2word(); j2w.toWord(inputPath,outPath,data); public static void main(String args) HashMap data = new HashMap(); data.put($reportDept$,2007-8-1); data.put($findDate$,2007-8-2); data.put($finder$,kdl); data.put($lineName$,5号线); data.put($voltageRate$,11月13日); data.put($towerNumberBound$,2004年
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消化性溃疡患者用药护理
- 公司职工安全培训总结课件
- 面部皮肤护理概述
- 结构化书面汇报
- 小学数学教师秋季学期教学工作计划2021年
- 公司级安全教育培训材料课件
- 电商运营助理年度工作总结
- 美妆年度工作总结
- 公司福利新员工入职课件
- 公司电气安全培训课件
- 宫外孕大出血护理
- 皮纹分析师培训
- 起重机械操作规程(4篇)
- 初级关务水平测试题库500题(含答案)
- 医疗设备应急管理与替代程序
- DB62-T 4913.1-2024温室气体排放核算方法与报告指南 第1部分:污水处理厂
- 手印鉴定书模板
- DB11T 065-2022 电气防火检测技术规范
- 人教版八年级历史上册第一次月考试题(附答案)第一单元
- 基本不等式课件-高三数学一轮复习
- DL∕T 2568-2022 电力行业数字化审计平台功能构件与技术要求
评论
0/150
提交评论