使用POI解决word中cell单元格内字符串换行问题 您所在的位置:网站首页 excel中换行不换单元格怎么操作 使用POI解决word中cell单元格内字符串换行问题

使用POI解决word中cell单元格内字符串换行问题

2023-09-04 07:28| 来源: 网络整理| 查看: 265

一杯咖啡,一包烟,一个bug改一天!!!啊~~~~~多么痛的领悟

 

这几天接触使用POI解决无插件下载模板的需求,一个刚入职场不久的萌新,在接到这个需求时,表示是一脸懵逼?,虽说是导出碰壁,但还是有所收获!!!

先贴代码:

public static void replaceText(InputStream inputStream, OutputStream outputStream, Map map) { try { XWPFDocument document;//= new XWPFDocument(POIXMLDocument.openPackage(srcPath)); document = new XWPFDocument(inputStream); //1. 替换段落中的指定文字 Iterator itPara = document.getParagraphsIterator(); String text; Set set; XWPFParagraph paragraph; List run; String key; while (itPara.hasNext()) { paragraph = itPara.next(); set = map.keySet(); Iterator iterator = set.iterator(); while (iterator.hasNext()) { key = iterator.next(); run = paragraph.getRuns(); for (int i = 0, runSie = run.size(); i < runSie; i++) { text = run.get(i).getText(run.get(i).getTextPosition()); if (text != null && text.equals(key)) { run.get(i).setText(map.get(key), 0); } } } } //2. 替换表格中的指定文字 List xwpfTables = document.getTables(); replaceTableText(xwpfTables, map); //3.替换页眉 List pageHeaders = document.getHeaderList(); replaceHeaderText(pageHeaders, map); //3.输出流 document.write(outputStream); } catch (Exception e) { e.printStackTrace(); } } public static void replaceTableText(List xwpfTables, Map map) { for (XWPFTable xwpfTable : xwpfTables) { List xwpfTableRows = xwpfTable.getRows(); for (XWPFTableRow xwpfTableRow : xwpfTableRows) { List xwpfTableCells = xwpfTableRow.getTableCells(); for (XWPFTableCell cell : xwpfTableCells) { for (Map.Entry e : map.entrySet()) { String textVal = cell.getText(); if (textVal.equals(e.getKey())) { cell.removeParagraph(0); if ("${year4}".equals(textVal)) { cell.getText(); } //修改部分cell样式 if ("${stockname}".equals(textVal) || "${industry}".equals(textVal) || "${scode}".equals(textVal) || "${reporttypename}".equals(textVal)) { XWPFParagraph pIO = cell.addParagraph(); XWPFRun rIO = pIO.createRun(); rIO.setFontSize(20); rIO.setBold(true); rIO.setText(e.getValue()); //设置字体居中 setAlignCenter(cell); } else { cell.setText(e.getValue()); } } List innerxwpfTables = cell.getTables(); if (innerxwpfTables.size() > 0) { replaceTableText(innerxwpfTables, map); } } } } } } public static void setAlignCenter(XWPFTableCell cell) { CTTc cttc = cell.getCTTc(); CTP ctp = cttc.getPList().get(0); CTPPr ctppr = ctp.getPPr(); if (ctppr == null) { ctppr = ctp.addNewPPr(); } CTJc ctjc = ctppr.getJc(); if (ctjc == null) { ctjc = ctppr.addNewJc(); } //水平居中 ctjc.setVal(STJc.CENTER); }

 

重点来了,关于cell单元格内换行的问题,网上都说可以采用”\n“、"\r"、”\n\r“、"char(11)",然而楼主试了好多次,都无果,最后通过调整单元格的宽度实现了,(替换word文档时,官方API也说是使用”\n“),就是我们可以先试着将单元格宽度调到适当部位,然后通过调试,慢慢就通了。

就到这吧,致深夜加班的自己!!!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有