POI根据word模板替换导出setText内容不能换行问题。

//word模板路径
String inFile = rootPath+"报告.docx";
//word输出路径
String outFile = rootPath + "输出报告.docx";

XWPFDocument doc;
//params 参数 
Map<String, String> params = new HashMap<String, String>();
params.put("titleOne","1、重新组织全科护理人员学习口服药的执行流程并作考核。\r2、加强病人安全管理相关制度的学习、提高安全生产意识。\r3、组长、护长加强制度落实的监管,持续跟进一周责任护士发放口服药的流程执行情况,并不定期进行随检。");
 try {
	InputStream is = new FileInputStream(inFile);  
	doc = new XWPFDocument(OPCPackage.open(is));
	Set<Entry<String, String>> set = params.entrySet();
	List<XWPFParagraph> list = doc.getParagraphs();
	//para 要替换的段落 
	for(XWPFParagraph para:list){
		List<XWPFRun> runs = para.getRuns();
		for (int i=0; i<runs.size(); i++) {
			XWPFRun run = runs.get(i);  
			if("".equals(replaceText(run.text(), set))){
				run.setText(replaceText(run.text(), set),0);
			}else{
				String runText = replaceText(run.text(), set);
				if(runText.indexOf("\r")>0) {
					String[] text = runText.split("\r");
					//直接调用XWPFRun的setText()方法设置文本时,在底层会重新创建一个XWPFRun,把文本附加在当前文本后面,  
                                        //所以我们不能直接设值,需要先删除当前run,然后再自己手动插入一个新的run。  
					para.removeRun(i);
					run = para.insertNewRun(i);
					for(int f=0;f<text.length;f++) {
						if(f==0){
							//此处不缩进因为word模板已经缩进了。
							run.setText(text[f].trim());
						}else{
							run.addCarriageReturn();//硬回车
							//注意:wps换行首行缩进是三个空格符,office要的话可以用 run.addTab();缩进或者四个空格符
							run.setText("   "+text[f].trim());
						}
					}
					//设置字体
					run.setFontFamily("宋体");
					//字体大小
					run.setFontSize(12);
					//行间距
					run.setTextPosition(22);
				}else {
					run.setText(replaceText(run.text(), set),0);
					run.setTextPosition(22);
			   }
			}
		}	
	}
	OutputStream os = new FileOutputStream(outFile);  
	doc.write(os);  
	close(os);  
	close(is);  
} catch (Exception e) {  
	throw e;
}  
此文给java用poi操作word模板是出现不能换行的朋友一个建议,仅供参考。如有问题请留言。
要使用 Apache POI 操作 Word 模板替换内容,你可以使用以下步骤: 1. 首先,你需要创建一个空白 Word 文档,并将其保存为模板文件(.dotx 或 .dotm)。 2. 使用 Apache POI 创建 Word 文档对象,使用模板文件作为输入。 ```java // 创建 Word 文档对象 XWPFDocument document = new XWPFDocument(new FileInputStream("template.dotx")); ``` 3. 获取文档中的所有段落和表格,并遍历它们以查找要替换的文本。 ```java // 获取文档中的所有段落和表格 List<IBodyElement> elements = document.getBodyElements(); for (IBodyElement element : elements) { if (element instanceof XWPFParagraph) { // 处理段落 XWPFParagraph paragraph = (XWPFParagraph) element; List<XWPFRun> runs = paragraph.getRuns(); for (XWPFRun run : runs) { String text = run.getText(0); if (text != null && text.contains("要替换的文本")) { // 替换文本 text = text.replace("要替换的文本", "替换后的文本"); run.setText(text, 0); } } } else if (element instanceof XWPFTable) { // 处理表格 XWPFTable table = (XWPFTable) element; List<XWPFTableRow> rows = table.getRows(); for (XWPFTableRow row : rows) { List<XWPFTableCell> cells = row.getTableCells(); for (XWPFTableCell cell : cells) { List<XWPFParagraph> paragraphs = cell.getParagraphs(); for (XWPFParagraph paragraph : paragraphs) { List<XWPFRun> runs = paragraph.getRuns(); for (XWPFRun run : runs) { String text = run.getText(0); if (text != null && text.contains("要替换的文本")) { // 替换文本 text = text.replace("要替换的文本", "替换后的文本"); run.setText(text, 0); } } } } } } } ``` 4. 使用 Apache POI 将修改后的 Word 文档保存到文件中。 ```java // 保存 Word 文档 FileOutputStream out = new FileOutputStream("output.docx"); document.write(out); out.close(); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值