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中的效果不完全一致。