栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

java导出word特殊符号

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java导出word特殊符号

packagecom.xfzx.test.POI.main;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjava.util.Map.Entry;importjava.util.regex.Matcher;importjava.util.regex.Pattern;importorg.apache.poi.POIXMLDocument;importorg.apache.poi.hwpf.HWPFDocument;importorg.apache.poi.hwpf.usermodel.Range;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;public classWordPOI {//返回Docx中需要替换的特殊字符,没有重复项//推荐传入正则表达式参数"\$\{[^{}]+\}"

public ArrayListgetReplaceElementsInWord(String filePath,

String regex) {

String[] p= filePath.split("\.");if (p.length > 0) {//判断文件有无扩展名//比较文件扩展名

if (p[p.length - 1].equalsIgnoreCase("doc")) {

ArrayList al = new ArrayList<>();

File file= newFile(filePath);

HWPFDocument document= null;try{

InputStream is= newFileInputStream(file);

document= newHWPFDocument(is);

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}

Range range=document.getRange();

String rangeText=range.text();

CharSequence cs= rangeText.subSequence(0, rangeText.length());

Pattern pattern=Pattern.compile(regex);

Matcher matcher=pattern.matcher(cs);int startPosition = 0;while(matcher.find(startPosition)) {if (!al.contains(matcher.group())) {

al.add(matcher.group());

}

startPosition=matcher.end();

}returnal;

}else if (p[p.length - 1].equalsIgnoreCase("docx")) {

ArrayList al = new ArrayList<>();

XWPFDocument document= null;try{

document= newXWPFDocument(

POIXMLDocument.openPackage(filePath));

}catch(IOException e) {

e.printStackTrace();

}//遍历段落

Iterator itPara =document

.getParagraphsIterator();while(itPara.hasNext()) {

XWPFParagraph paragraph=(XWPFParagraph) itPara.next();

String paragraphString=paragraph.getText();

CharSequence cs= paragraphString.subSequence(0,

paragraphString.length());

Pattern pattern=Pattern.compile(regex);

Matcher matcher=pattern.matcher(cs);int startPosition = 0;while(matcher.find(startPosition)) {if (!al.contains(matcher.group())) {

al.add(matcher.group());

}

startPosition=matcher.end();

}

}//遍历表

Iterator itTable =document.getTablesIterator();while(itTable.hasNext()) {

XWPFTable table=(XWPFTable) itTable.next();int rcount =table.getNumberOfRows();for (int i = 0; i < rcount; i++) {

XWPFTableRow row=table.getRow(i);

List cells =row.getTableCells();for(XWPFTableCell cell : cells) {

String cellText= "";

cellText=cell.getText();

CharSequence cs= cellText.subSequence(0,

cellText.length());

Pattern pattern=Pattern.compile(regex);

Matcher matcher=pattern.matcher(cs);int startPosition = 0;while(matcher.find(startPosition)) {if (!al.contains(matcher.group())) {

al.add(matcher.group());

}

startPosition=matcher.end();

}

}

}

}returnal;

}else{return null;

}

}else{return null;

}

}

//替换word中需要替换的特殊字符

public static booleanreplaceAndGenerateWord(String srcPath,

String destPath, Mapmap) {

String[] sp= srcPath.split("\.");

String[] dp= destPath.split("\.");if ((sp.length > 0) && (dp.length > 0)) {//判断文件有无扩展名//比较文件扩展名

if (sp[sp.length - 1].equalsIgnoreCase("docx")) {try{

XWPFDocument document= newXWPFDocument(

POIXMLDocument.openPackage(srcPath));//替换段落中的指定文字

Iterator itPara =document

.getParagraphsIterator();while(itPara.hasNext()) {

XWPFParagraph paragraph=(XWPFParagraph) itPara.next();

List runs =paragraph.getRuns();for (int i = 0; i < runs.size(); i++) {

String oneparaString=runs.get(i).getText(

runs.get(i).getTextPosition());for (Map.Entryentry : map

.entrySet()) {

oneparaString=oneparaString.replace(

entry.getKey(), entry.getValue());

}

runs.get(i).setText(oneparaString,0);

}

}//替换表格中的指定文字

Iterator itTable =document.getTablesIterator();while(itTable.hasNext()) {

XWPFTable table=(XWPFTable) itTable.next();int rcount =table.getNumberOfRows();for (int i = 0; i < rcount; i++) {

XWPFTableRow row=table.getRow(i);

List cells =row.getTableCells();for(XWPFTableCell cell : cells) {

String cellTextString=cell.getText();for (Entrye : map.entrySet()) {if(cellTextString.contains(e.getKey()))

cellTextString=cellTextString

.replace(e.getKey(),

e.getValue());

}

cell.removeParagraph(0);

cell.setText(cellTextString);

}

}

}

FileOutputStream outStream= null;

outStream= newFileOutputStream(destPath);

document.write(outStream);

outStream.close();return true;

}catch(Exception e) {

e.printStackTrace();return false;

}

}else

//doc只能生成doc,如果生成docx会出错

if ((sp[sp.length - 1].equalsIgnoreCase("doc"))&& (dp[dp.length - 1].equalsIgnoreCase("doc"))) {

HWPFDocument document= null;try{

document= new HWPFDocument(newFileInputStream(srcPath));

Range range=document.getRange();for (Map.Entryentry : map.entrySet()) {

range.replaceText(entry.getKey(), entry.getValue());

}

FileOutputStream outStream= null;

outStream= newFileOutputStream(destPath);

document.write(outStream);

outStream.close();return true;

}catch(FileNotFoundException e) {

e.printStackTrace();return false;

}catch(IOException e) {

e.printStackTrace();return false;

}

}else{return false;

}

}else{return false;

}

}public static voidmain(String[] args) {//TODO Auto-generated method stub

String filepathString = "D:/2.doc";

String destpathString= "D:/2ttt.doc";

Map map = new HashMap();

map.put("${NAME}", "王五王五啊柯乐义的辣味回答侯何问起网");

map.put("${NsAME}", "王五王五啊王力味回答侯何问起网");

map.put("${NAMaE}", "王五王五啊柯乐义侯何问起网");

map.put("${NArME}", "王五王五啊柯乐义的辣味回答东拉网");

map.put("${NwAME}", "王五王五啊王的辣味回答侯何问起网");

map.put("${NA4ME}", "王五王五啊王力侯何问起网");

map.put("${N5AME}", "王五王五辣味回答侯何问起网");

map.put("${NAadwME}", "王五力宏的辣味回答侯何问起网");

System.out.println(replaceAndGenerateWord(filepathString,

destpathString, map));

}

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/985329.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号