java生成word文档.docx
- 文档编号:3812377
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:13
- 大小:17.72KB
java生成word文档.docx
《java生成word文档.docx》由会员分享,可在线阅读,更多相关《java生成word文档.docx(13页珍藏版)》请在冰豆网上搜索。
java生成word文档
先下载jacob_1.10.1.zip。
解压后将jacob.dll放到windows/system32下面或\j2sdk\bin下面。
将jacob.jar加入项目。
/*
*Java2word.java
*
*Createdon2007年8月13日,上午10:
32
*
*Tochangethistemplate,chooseTools|TemplateManager
*andopenthetemplateintheeditor.
*/
/*
*传入数据为HashMap对象,对象中的Key代表word模板中要替换的字段,Value代表用来替换的值。
*word模板中所有要替换的字段(即HashMap中的Key)以特殊字符开头和结尾,如:
$code$、$date$……,
以免执行错误的替换。
*所有要替换为图片的字段,Key中需包含image或者Value为图片的全路径(目前只判断文件后缀名为:
.bmp、
.jpg、.gif)。
*要替换表格中的数据时,HashMap中的Key格式为“table$R@N”,其中:
R代表从表格的第R行开始替换,N代表
word模板中的第N张表格;Value为ArrayList对象,ArrayList中包含的对象统一为String[],一条String[]代
表一行数据,ArrayList中第一条记录为特殊记录,记录的是表格中要替换的列号,如:
要替换第一列、第三列、
第五列的数据,则第一条记录为String[3]{“1”,”3”,”5”}。
*/
packagecom.word.util;
/**
*
*@authorkdl
*/
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.Iterator;
importcom.jacob.activeX.ActiveXComponent;
import.Dispatch;
import.Variant;
publicclassJava2word{
privatebooleansaveOnExit;
/**
*word文档
*/
Dispatchdoc=null;
/**
*word运行程序对象s
*/
private ActiveXComponentword;
/**
*所有word文档
*/
private Dispatchdocuments;
/**
*构造函数
*/
publicJava2word(){
if(word==null){
word=newActiveXComponent("Word.Application");
word.setProperty("Visible",newVariant(false));
}
if(documents==null)
documents=word.getProperty("Documents").toDispatch();
saveOnExit=false;
}
/**
*设置参数:
退出时是否保存
*@paramsaveOnExitbooleantrue-退出时保存文件,false-退出时不保存文件
*/
publicvoidsetSaveOnExit(booleansaveOnExit){
this.saveOnExit=saveOnExit;
}
/**
*得到参数:
退出时是否保存
*@returnbooleantrue-退出时保存文件,false-退出时不保存文件
*/
publicbooleangetSaveOnExit(){
returnsaveOnExit;
}
/**
*打开文件
*@paraminputDocString要打开的文件,全路径
*@returnDispatch打开的文件
*/
publicDispatchopen(StringinputDoc){
returnDispatch.call(documents,"Open",inputDoc).toDispatch();
//returnDispatch.invoke(documents,"Open",Dispatch.Method,newObject[]{inputDoc},newint[1]).toDispatch();
}
/**
*选定内容
*@returnDispatch选定的范围或插入点
*/
publicDispatchselect(){
returnword.getProperty("Selection").toDispatch();
}
/**
*把选定内容或插入点向上移动
*@paramselectionDispatch要移动的内容
*@paramcountint移动的距离
*/
publicvoidmoveUp(Dispatchselection,intcount){
for(inti=0;i Dispatch.call(selection,"MoveUp"); } /** *把选定内容或插入点向下移动 *@paramselectionDispatch要移动的内容 *@paramcountint移动的距离 */ publicvoidmoveDown(Dispatchselection,intcount){ for(inti=0;i Dispatch.call(selection,"MoveDown"); } /** *把选定内容或插入点向左移动 *@paramselectionDispatch要移动的内容 *@paramcountint移动的距离 */ publicvoidmoveLeft(Dispatchselection,intcount){ for(inti=0;i Dispatch.call(selection,"MoveLeft"); } } /** *把选定内容或插入点向右移动 *@paramselectionDispatch要移动的内容 *@paramcountint移动的距离 */ publicvoidmoveRight(Dispatchselection,intcount){ for(inti=0;i Dispatch.call(selection,"MoveRight"); } /** *把插入点移动到文件首位置 *@paramselectionDispatch插入点 */ publicvoidmoveStart(Dispatchselection){ Dispatch.call(selection,"HomeKey",newVariant(6)); } /** *从选定内容或插入点开始查找文本 *@paramselectionDispatch选定内容 *@paramtoFindTextString要查找的文本 *@returnbooleantrue-查找到并选中该文本,false-未查找到文本 */ publicbooleanfind(Dispatchselection,StringtoFindText){ //从selection所在位置开始查询 Dispatchfind=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"); //查找并选中 returnDispatch.call(find,"Execute").getBoolean(); } /** *把选定内容替换为设定文本 *@paramselectionDispatch选定内容 *@paramnewTextString替换为文本 */ publicvoidreplace(Dispatchselection,StringnewText){ //设置替换文本 Dispatch.put(selection,"Text",newText); } /** *全局替换 *@paramselectionDispatch选定内容或起始插入点 *@paramoldTextString要替换的文本 *@paramnewTextString替换为文本 */ publicvoidreplaceAll(Dispatchselection,StringoldText,ObjectreplaceObj){ //移动到文件开头 moveStart(selection); if(oldText.startsWith("table")||replaceObjinstanceofArrayList) replaceTable(selection,oldText,(ArrayList)replaceObj); else{ StringnewText=(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"); } } } } /** *替换图片 *@paramselectionDispatch图片的插入点 *@paramimagePathString图片文件(全路径) */ publicvoidreplaceImage(Dispatchselection,StringimagePath){ Dispatch.call(Dispatch.get(selection,"InLineShapes").toDispatch(),"AddPicture",imagePath); } /** *替换表格 *@paramselectionDispatch插入点 *@paramtableNameString表格名称,形如table$1@1、table$2@1...table$R@N,R代表从表格中的第N行开始填充,N代表word文件中的第N张表 *@paramfieldsHashMap表格中要替换的字段与数据的对应表 */ publicvoidreplaceTable(Dispatchselection,StringtableName,ArrayListdataList){ if(dataList.size()<=1){ System.out.println("Emptytable! "); return; } //要填充的列 String[]cols=(String[])dataList.get(0); //表格序号 StringtbIndex=tableName.substring(tableName.lastIndexOf("@")+1); //从第几行开始填充 intfromRow=Integer.parseInt(tableName.substring(tableName.lastIndexOf("$")+1,tableName.lastIndexOf("@"))); //所有表格 Dispatchtables=Dispatch.get(doc,"Tables").toDispatch(); //要填充的表格 Dispatchtable=Dispatch.call(tables,"Item",newVariant(tbIndex)).toDispatch(); //表格的所有行 Dispatchrows=Dispatch.get(table,"Rows").toDispatch(); //填充表格 for(inti=1;i //某一行数据 String[]datas=(String[])dataList.get(i); //在表格中添加一行 if(Dispatch.get(rows,"Count").getInt() Dispatch.call(rows,"Add"); //填充该行的相关列 for(intj=0;j //得到单元格 Dispatchcell=Dispatch.call(table,"Cell",Integer.toString(fromRow+i-1),cols[j]).toDispatch(); //选中单元格 Dispatch.call(cell,"Select"); //设置格式 Dispatchfont=Dispatch.get(selection,"Font").toDispatch(); Dispatch.put(font,"Bold","0"); Dispatch.put(font,"Italic","0"); //输入数据 Dispatch.put(selection,"Text",datas[j]); } } } /** *保存文件 *@paramoutputPathString输出文件(包含路径) */ publicvoidsave(StringoutputPath){ Dispatch.call(Dispatch.call(word,"WordBasic").getDispatch(),"FileSaveAs",outputPath); } /** *关闭文件 *@paramdocumentDispatch要关闭的文件 */ publicvoidclose(Dispatchdoc){ Dispatch.call(doc,"Close",newVariant(saveOnExit)); word.invoke("Quit",newVariant[]{}); word=null; } /** *根据模板、数据生成word文件 *@paraminputPathString模板文件(包含路径) *@paramoutPathString输出文件(包含路径) *@paramdataHashMap数据包(包含要填充的字段、对应的数据) */ publicvoidtoWord(StringinputPath,StringoutPath,HashMapdata){ StringoldText; ObjectnewValue; try{ if(doc==null) doc=open(inputPath); Dispatchselection=select(); Iteratorkeys=data.keySet().iterator(); while(keys.hasNext()){ oldText=(String)keys.next(); newValue=data.get(oldText); replaceAll(selection,oldText,newValue); } save(outPath); }catch(Exceptione){ System.out.println("操作word文件失败! "); e.printStackTrace(); }finally{ if(doc! =null) close(doc); } } publicsynchronizedstaticvoidword(StringinputPath,StringoutPath,HashMapdata){ Java2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 生成 word 文档
![提示](https://static.bdocx.com/images/bang_tan.gif)