poi替换word模板.docx
- 文档编号:14168510
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:9
- 大小:17.48KB
poi替换word模板.docx
《poi替换word模板.docx》由会员分享,可在线阅读,更多相关《poi替换word模板.docx(9页珍藏版)》请在冰点文库上搜索。
poi替换word模板
竭诚为您提供优质文档/双击可除
poi替换word模板
篇一:
如何使用poi解决word20xx中字符替换问题
poi==word07
近日在工作中遇到如何使用poi导出word07的问题,在各大网站上对此问题的解决几乎为空白,通过努力,本人有幸解决了此类问题,仅供参考。
首先就是要明白解决的方案是:
先删后添。
就是利用paragraph创建run,在创建完毕后循
环遍历tablerowcell,获得到cell里的值,即cell.gettext();在这里注意cell中value的长度,建议打出来看看已在后面于替换后的cell的值做对比。
同时我们应该多多关注底层文件和源码,这样可以更加方便的了解他的底层构造。
可以将word的后缀名改为zip然后打开找到word/document.xml文件,查看构造尤其是表的结构(比如说多关注关注--
---
02
)这样有助于思维的扩展;
下面是我的一个小测试,大家可以交流交流,有不同意见可以卡到我的邮箱:
c736059315@12;
(现在d盘建立一个word,里面要有表格的哦,切记word文档是20xx版的,如果20xx版可以使用range对象就能轻松解决哦,网上很多的)
packagetest;
importjava.io.Fileoutputstream;
importjava.util.iterator;
importjava.util.list;
importorg.apache.poi.poixmldocument;
importorg.apache.poi.openxml4j.opc.opcpackage;
importorg.apache.poi.xwpf.usermodel.xwpFdocument;
importorg.apache.poi.xwpf.usermodel.xwpFparagraph;
importorg.apache.poi.xwpf.usermodel.xwpFRun;
importorg.apache.poi.xwpf.usermodel.xwpFtable;
importorg.apache.poi.xwpf.usermodel.xwpFtablecell;
importorg.apache.poi.xwpf.usermodel.xwpFtableRow;
publicclasstest{
/***@paramargs*/publicstaticvoidmain(string[]args){try{opcpackagepack=poixmldocument.ope(poi替换word模板)npackage("d:
/c.docx");xwpFdocumentdoc=newxwpFdocument(pack);iteratorit=doc.gettablesiterator();while(it.hasnext()){xwpFtabletable=it.next();listrows=table.getRows();for(xwpFtableRowrow:
rows){
listcells=row.gettablecells();for(xwpFtablecellcell:
cells){/*system.out.println(cell.gettext());system.out.println(cell.gettext().length()+":
length");*///
system.out.println(cell.addparagraph().gettext().length()+":
--------------");//xx
//获得传过来的字符串的长度
//这里是判断替换的条件,
if(cell.gettext().equals("00")){
//关键的一步,删掉原有的段落
cell.removeparagraph(0);
//给段落重新赋值,不用担心要重新创建段落,他会自动创建的
cell.settext("爱爱");/*system.out.println(cell.gettext().length()+"====================");*/}//在这里,主要问题不是判断的问题。
而是在判断后如何把原有的之用心之替换掉的问题,
/*if(cell.gettext().equals("00")){
system.out.println();cell.settext("啊啊");//
system.out.println(cell.gettext().length()+"====================");}*/
//===========================段落可以不要====================================
}}}}Fileoutputstreamfos=newFileoutputstream("d:
/bbb.docx");doc.write(fos);fos.flush();fos.close();//todoauto-generatedcatchblocke.printstacktrace();}listpars=cell.getparagraphs();for(xwpFparagraphpar:
pars){listruns=par.getRuns();for(xwpFRunrun:
runs){run.removebreak();}/*system.out.println(par.gettext());system.out.println(par.getstyle()+"no4");system.out.println(par.getctp()+"no7");system.out.println(par.getFootnotetext()+"no1");system.out.println(par.getparagraphtext()+"no2");system.out.println(par.getpicturetext()+"no3");system.out.println(par.getstyleid()+"no5");system.out.println(par.getalignment()+"no6");system.out.println(par.getdocument()+"no8");system.out.println(par.getelementtype()+"no9");*/}}}catch(exceptione){
篇二:
poi调用word动态传参
poi调用word动态传参
1功能描述
实现动态传参给word模板,然后替换模板中的参数,最后生成目的文档;传入参数分别是源文件路径,目的文件路径和匹配map
2实现所需jaR包
poi-scratchpad-3.8-20xx0326.jar(文档最后有提供)
3代码实现:
//替换word中需要替换的特殊字符
publicstaticbooleanreplaceword(stringsrcpath,
stringdestpath,mapmap){
string[]sp=srcpath.split("\\.");
string[]dp=destpath.split("\\.");
if((sp.length>0)//替换段落中的指定文字
iteratoritpara=document
.getparagraphsiterator();
while(itpara.hasnext()){
xwpFparagraphparagraph=(xwpFparagraph)itpara.next();
stringstr=paragraph.gettext();
for(map.entryentry:
map
.entryset()){
str=str.replace(
entry.getkey(),entry.getValue());
}
listruns=paragraph.getRuns();
for(inti=0;i if(runs.get(i)!
=null){
runs.get(i).settext("",0);//将所有的xwpFRun都置空
}
if(i==0){
runs.get(i).settext(str,0);//将第一个xwpFRun的值存整个xwpFparagraph的字符串
}
}
}
//替换表格中的指定文字
iteratorittable=document.gettablesiterator();while(ittable.hasnext()){
xwpFtabletable=(xwpFtable)ittable.next();
intrcount=table.getnumberofRows();
for(inti=0;i xwpFtableRowrow=table.getRow(i);
listcells=row.gettablecells();for(xwpFtablecellcell:
cells){
stringcelltextstring=cell.gettext();
for(entrye:
map.entryset()){if(celltextstring.contains(e.getkey()))celltextstring=celltextstring.replace(e.getkey(),e.getValue());}
cell.removeparagraph(0);
cell.settext(celltextstring);
}
}
}
Fileoutputstreamoutstream=null;
outstream=newFileoutputstream(destpath);
document.write(outstream);
outstream.close();
returntrue;
}catch(exceptione){
e.printstacktrace();
returnfalse;
}
}else
{
returnfalse;
}
}else{
returnfalse;
}
}
调用参考如下:
stringfilepathstring="d:
/2.docx";
stringdestpathstring="d:
/2ttt.docx";
mapmap=newhashmap();map.put("${bankname}","中信");
map.put("${bank}","中信银行");
map.put("${tRanname}","亿量");
map.put("${lawyeR}","周攀");
map.put("${yeaR}","20xx");
map.put("${month}","09");
map.put("${day}","14");
system.out.println(replaceword(filepathstring,destpathstring,map));
4模板和jar包
2.do
cx
篇三:
poi操作word
mon.poi;
importjava.io.File;
importjava.io.Fileinputstream;
importjava.io.FilenotFoundexception;
importjava.io.Fileoutputstream;
importjava.io.ioexception;
importjava.util.arraylist;
importjava.util.hashmap;
importjava.util.iterator;
importjava.util.list;
importjava.util.map;
importjava.util.map.entry;
importorg.apache.poi.poixmldocument;
importorg.apache.poi.openxml4j.exceptions.invalidFormatexception;
importorg.apache.poi.xwpf.usermodel.paragraphalignment;
importorg.apache.poi.xwpf.usermodel.xwpFdocument;
importorg.apache.poi.xwpf.usermodel.xwpFparagraph;
importorg.apache.poi.xwpf.usermodel.xwpFRun;
importorg.apache.poi.xwpf.usermodel.xwpFtable;
importorg.apache.poi.xwpf.usermodel.xwpFtablecell;
importorg.apache.poi.xwpf.usermodel.xwpFtableRow;
importorg.apache.xmlbeans.xmlexception;
importorg.apache.xmlbeans.xmltoken;
importorg.openxmlformats.schemas.drawingml.x20xx.main.ctnonVisualdrawingprops;importorg.openxmlformats.schemas.drawingml.x20xx.main.ctpositivesize2d;
importorg.openxmlformats.schemas.drawingml.x20xx.wordprocessingdrawing.ctinline;
publicclasspoiwordtemplate{
privatexwpFdocumentdocument;publicxwpFdocumentgetdocument(){}returndocument;publicvoidsetdocument(stringtemplatepath){try{this.document=newxwpFdocument(poixmldocument.openpackage(templatepath));}catch(ioexceptione){}//todoauto-generatedcatchblocke.printstacktrace();
//this.document=document;
}
/**
*往模板中插入图片
*@paramdocument
*@parammapimage
*@paramwidth
*@paramheight
*/
publicvoidreplacetexttoimage(mapmapimage,intwidth,intheight){listlistparagraphs=this.document.getparagraphs();
for(inti=0;i for(entryentry:
mapimage.entryset()){
if(listparagraphs.get(i).gettext().trim().indexof(entry.getkey())!
=-1){ctinlineinline
listparagraphs.get(i).createRun().getctR().addnewdrawing().addnewinline();
try{
insertpicture(entry.getValue(),inline,width,height);
}catch(invalidFormatexceptione){
//todoauto-generatedcatchblock
e.printstacktrace();
}catch(FilenotFoundexceptione){
//todoauto-generatedcatchblock
e.printstacktrace();
}
}
}
}
}
/**
*替换word中的文字
*@paramdocument
*@parammapValue*@paramnewtext
*/
publicvoidreplacetexttotext(mapmapValue){
listlistRun;
listlistparagraphs=this.document.getparagraphs();
for(inti=0;i listRun=listparagraphs.get(i).getRuns();
for(intj=0;j if(mapValue.get(listRun.get(j).gettext(0))!
=null||"null".equals(mapValue.get(listRun.get(j).gettext(0)))){
listRun.get(j).settext(mapValue.get(listRun.get(j).gettext(0)),0);}
}
}}/***往表格中插入数据*@paramdocument*@paramlist*@paramposition*/publicvoidsettablesValue(list>list,intposition,intcolumnnum){iteratorit=this.document.gettablesiterator();
intcount=0;
mapcolumnmap=newhashmap();
while(it.hasnext()){
xwpFtabletable=(xwpFtable)it.next();
if(count==position){
xwpFtableRowfirstRow=table.getRow
(1);
listrowcell=firstRow.gettablecells();
for(inti=0;i columnmap.put(i+"",rowcell.get(i).gettext().trim());}table.removeRow
(1);//删除第二行for(inti=0;i row.setheight(30);
/*for(intj=0;j row.addnewtablecell();
}*/一个cell
}intrcount=table.getnumberofRows();for(inti=1;icells=newRow.gettablecells();for(intj=0;j cells.get(j).settext(list.get(i-1).get(columnmap.get(j+""))+"");//标题栏不用改变单元格的值
}
}
}
count++;
}
}
/***设置用电建议书里的基本信息第一个表格*/
publicvoidsetofferborkbasicinfo(mapmap,list>list,intposition){
iteratorit=this.document.gettablesiterator();
intcount=0;
mapcolumnmap=newhashmap();
while(it.hasnext()){
xwpFtabletable=(xwpFtable)it.next();
if(count==position){
intrcount=table.getnumberofRows();
for(inti=0;icells=newRow.gettablecells();for(intj=0;jrowcell=sixRow.gettablecells();for(inti=0;i xwpFtableRowrow=table.createRow();//创建新的一行时创建了第
row.setheight(35);
for(intj=0;j row.addnewtablecell();
}
一个cell
}table.removeRow(6);//删除模板中的字段行introwcount=table.getnumberofRows();intk=0;for(inti=6;icells=tempRow.gettablecells();for(intj=0;j }
}
count++;
}
}
/***生成用电分析结果与优化用电建议*@paramlist*@paramposition*/publicvoidsetananlyResulttbl(listlist,intposition){iteratorit=this.document.gettablesiterator();
intcount=0;
while(it.hasnext()){
xwpFtabletable=(xwpFtable)it.next();if(count==position){xwpFtableRowtempRow=table.getRow
(1);listcelllist=tempRow.gettablecells();xwpFtablecellcell=celllist.get(0);listlistgraph=cell.getparagraphs();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- poi 替换 word 模板