0.前言
前面的文章介绍了单元格合并的操作,这篇文章简单介绍一下设置字体大小、加粗、对齐方式、边框线、背景颜色等。
初始代码:
void testXWPFTable1(){ System.out.println("开始执行"); try { //定义word XWPFDocument doc = new XWPFDocument(); //在word中创建一个表格(2行,3列) XWPFTable table = doc.createTable(4,4); //第一行数据 table.getRow(0).getCell(0).setText("1"); table.getRow(0).getCell(1).setText("张三"); table.getRow(0).getCell(2).setText("李四"); table.getRow(0).getCell(3).setText("王五"); table.getRow(1).getCell(0).setText("5"); table.getRow(1).getCell(1).setText("6"); table.getRow(1).getCell(2).setText("7"); table.getRow(1).getCell(3).setText("8"); table.getRow(2).getCell(0).setText("9"); table.getRow(2).getCell(1).setText("10"); table.getRow(2).getCell(2).setText("11"); table.getRow(2).getCell(3).setText("12"); table.getRow(3).getCell(0).setText("13"); table.getRow(3).getCell(1).setText("14"); table.getRow(3).getCell(2).setText("15"); table.getRow(3).getCell(3).setText("16"); //导出 String path = "C:\\"; //文件路径 String name = "test1"; //文件名 path = path + "/" + name + ".docx"; File file = new File(path); if (!file.exists()) { file.createNewFile(); } FileOutputStream out = new FileOutputStream(file); doc.write(out); }catch (IOException e){ e.printStackTrace(); } }
1.设置字体、大小、是否加粗
我们一般用下面的代码来设置单元格内字体、字体大小、字体是否加粗。
run.setFontSize(20); //设置字体大小 14
run.setFontFamily("宋体"); //设置字体为宋体
run.setBold(true); //设置加粗
第一种设置方式并不生效
//下面不生效
XWPFRun run = table.getRow(0).getCell(1).getParagraphs().get(0).createRun();
run.setFontSize(20); //设置字体大小 14
run.setFontFamily("宋体"); //设置字体为宋体
run.setBold(true); //设置加粗
第二种设置方式生效:
//生效
XWPFRun run1 = table.getRow(0).getCell(2).getParagraphArray(0).getRuns().get(0);
run1.setFontSize(11); //设置字体大小 14
run1.setFontFamily("楷体"); //设置字体为宋体
run1.setBold(true); //设置加粗
table.getRow(0).setHeight(300); //设置高度
效果:
可以看出,第二种形式生效了。
2.设置单元格大小
全局设置:
table.getCTTbl().getTblPr().getTblW().setW(new BigInteger("9000")); //测试不生效
table.getCTTbl().addNewTblPr().addNewTblW().setW(new BigInteger("9000")); //测试生效
效果:
单独设置某个单元格的宽度
table.getRow(1).getCell(0).getCTTc().getTcPr().addNewTcW().setW(BigInteger.valueOf(122)); //设置宽度 ,报错
table.getRow(1).getCell(1).getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(5000)); //设置宽度,生效
效果:
3.设置对齐方式
table.getRow(1).getCell(0).getParagraphArray(0).setAlignment(ParagraphAlignment.CENTER); //设置水平居中
table.getRow(1).getCell(1).getParagraphArray(0).setAlignment(ParagraphAlignment.LEFT); //设置左对齐
table.getRow(1).getCell(2).getParagraphArray(0).setAlignment(ParagraphAlignment.RIGHT); //设置右对齐
table.getRow(1).getCell(3).getParagraphArray(0).setVerticalAlignment(TextAlignment.CENTER); //设置垂直居中
效果:
4.设置边框线
设置全局
//全局设置
CTTblPr tblpro = table.getCTTbl().getTblPr();
CTTblBorders borders = tblpro.addNewTblBorders();
borders.addNewBottom().setVal(STBorder.SINGLE);
borders.addNewLeft().setVal(STBorder.NIL); //设置左侧无边框
borders.addNewRight().setVal(STBorder.SINGLE);
borders.addNewTop().setVal(STBorder.SINGLE);
borders.addNewInsideH().setVal(STBorder.SINGLE);
borders.addNewInsideV().setVal(STBorder.SINGLE);
效果:
单独设置某个单元格:
table.getRow(1).getCell(1).getCTTc().getTcPr().addNewTcBorders().addNewRight().setVal(STBorder.NIL);//设置无边框, 测试报错,无法通过
table.getRow(1).getCell(2).getCTTc().addNewTcPr().addNewTcBorders().addNewLeft().setVal(STBorder.NIL); //设置无边框,office测试不生效,wps测试生效
测试了两种方法,其中第一种直接报错,无法通过测试,奇怪的是第一种在另一个项目(Spring MVC)中正常显示,但是在这个新搭建的项目中直接报错。
第二种方法,测试后,发现在wps中生效,但是在office中不生效,效果如下:
5.设置背景颜色
table.getRow(1).getCell(1).getCTTc().addNewTcPr().addNewShd().setFill("AAABBB");
效果:
6.总结
实践了很多方法,发现在office中和wps中的效果不完全一致。