关于使用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);
}*/
}
}