XWPFTableCell设置字体样式及大小导致的样式问题

关于使用XWPFTableCell设置字体,搜遍了全网,看了很多文章,大致都是使用的XWPFRun去设置的字体,这个方法去设置字体本身是没有问题的,但是直接使用XWPFParagraph的createParagraph方法创建出来的XWPFRun去添加数据,会导致莫名的换行出来,问题代码:
在这里插入图片描述
问题word样式:
在这里插入图片描述
就顶上这个换行让我百思不得其解,但是直接使用XWPFTableCell类的setText方法又是没有问题的,只是网上没有XWPFTableCell类可以直接定义字体样式的方法,这个就让我陷入了很久的尝试,也走了很多弯路,后面我实在没有办法,就查看setText方法源码,发现这货原来是这么个意思
在这里插入图片描述
所以我果断没有创建段落,而是去获取的段落,代码如下
在这里插入图片描述
然后一下是正常的样式
在这里插入图片描述
以下为完整的代码:
for(int i = 0; i < daList.size(); i++){
List cells = table.getRow(i).getTableCells();
for(int j = 0; j < cells.size(); j++){
XWPFTableCell cell01 = cells.get(j);
//如果采购人名称拆分,第一个手动造的空数据列则跳过
if(cells.size() == 2){
if(j == 0){
continue;
}
}
//cell01.setText(daList.get(i)[j]);
CTP ctP = (cell01.getCTTc().sizeOfPArray() == 0) ? cell01.getCTTc().addNewP() : cell01.getCTTc().getPArray(0);
XWPFParagraph p = cell01.getParagraph(ctP);
XWPFRun headRun0 = p.createRun();
headRun0.setText(daList.get(i)[j]);
if(cells.size() == 1){
headRun0.setFontSize(24);
//水平居中
p.setAlignment(ParagraphAlignment.CENTER);
}else{
headRun0.setFontSize(16);
//水平居中
p.setAlignment(ParagraphAlignment.LEFT);
}
headRun0.setFontFamily(“宋体”);
headRun0.setBold(true);//是否粗体

              /*  CTTc cttc = cell01.getCTTc();
                CTTcPr ctPr = cttc.getTcPr();
                ctPr.addNewVAlign().setVal(STVerticalJc.CENTER);
                //项目名称居中,采购人名称左对齐
                if(cells.size() == 1){
                    //水平居中
                    cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER);
                }else{
                    //水平居中
                    cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.LEFT);
                }*/
            }
        }
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
部分代码.................. . .. .. /** * 处理动态表格 * 默认取第二行第一列的标识 * @param table * @param ctRow * @param values 需要添加的数据 */ public static void processDynamicTable(XWPFTable table, CTRow ctRow, List values) { if(values==null || values.size()==0) return; for (Iterator iterator = values.iterator(); iterator.hasNext();) { String[] value = iterator.next(); XWPFTableRow newRow = new XWPFTableRow(ctRow,table); List cells = newRow.getTableCells(); if(cells==null || cells.size()==0) return; for (int j = 0; j < cells.size(); j++) { XWPFTableCell cell = cells.get(j); cell.removeParagraph(0); if(j<=value.length) cell.setText(value[j]); } table.addRow(newRow); } } /** * 处理表格 * @param doc * @param dataMap */ public static void processTable(XWPFDocument doc, Map dataMap) { Iterator iter = doc.getTablesIterator(); while(iter.hasNext()) { XWPFTable table = iter.next(); List rows = table.getRows(); if(rows==null || rows.size()==0) continue; CTRow ctRow = null; for (int i = 0; i < rows.size(); i++) { XWPFTableRow row = rows.get(i); ctRow = (CTRow)row.getCtRow().copy(); List cells = row.getTableCells(); if(cells==null || cells.size()==0) continue; //处理标致 boolean sign = false; for (int j = 0; j < cells.size(); j++) { XWPFTableCell cell = cells.get(j); if(cell.getText()==null) continue; if(i==1 && j==0) { //取第二行第一列的值,再添加table.关键字之后与dataMap匹配,有则当动态表格处理 String key = "table."+ cell.getText(); if(dataMap.containsKey(key)) { List values = (List)dataMap.get(key); table.removeRow(1); processDynamicTable(table, ctRow, values); //更新处理标致 sign = true; break; } } if(!cell.getText().startsWith("\\$") && cell.getText().endsWith("\\$")) continue; String key = cell.getText().replaceAll("\\$", ""); if(dataMap.containsKey(key)) {

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值