当前位置:   article > 正文

Poi导出word的一些工具方法(添加图片,合并单元格,设置表格边框,添加分页符)_poi导出word 表格合并单元格

poi导出word 表格合并单元格

导入的maven依赖

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.1.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.1.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml-schemas</artifactId>
        <version>4.1.2</version>
    </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

图片传入

// 图片写入表格的cell(单元格),传入的参数:需要传入图片的cell,图片宽度,图片高度,图片链接地址
public static void handlePhoto(XWPFTableCell cell,int width,int height,String picPath){

    XWPFParagraph p = cell.getParagraphArray(0);
    if (p == null) {
        p = cell.addParagraph();
    }
    p.setAlignment(ParagraphAlignment.CENTER);
    p.setVerticalAlignment(TextAlignment.CENTER);
    XWPFRun photos = p.createRun();
    try {
    
        // 图片地址为参数的picPath
        // 测试用图 picPath = "https://img-blog.csdnimg.cn/img_convert/b26750936b8d00e60053e7dda335f9aa.png";
        
        // 截取图片后缀名
        String houzhui = picPath.substring(picPath.length()-3,picPath.length());
        if (picPath.equals("无"))cell.setText("无");
        
        // 调用下面网络图片流到本地字符获取的方法(1)
        byte[] byteArray = ImgFile(picPath);
        
        // 如果链接也找不到文件(404) 显示找不到文件
        if (byteArray == null) cell.setText("找不到文件");
        
        if (houzhui.equals("jpg")){
            photos.addPicture(new ByteArrayInputStream(byteArray), Document.PICTURE_TYPE_JPEG, picPath, Units.toEMU(width), Units.toEMU(height));
        }else if (houzhui.equals("png")){
            photos.addPicture(new ByteArrayInputStream(byteArray), Document.PICTURE_TYPE_PNG, picPath, Units.toEMU(width), Units.toEMU(height));
        }
    } catch (Exception e) {
        
        // 链接的图片找不到,单元格内写入"找不到文件"
        cell.setText("找不到文件");
    }

}

//链接形式的图片提取 传入图片链接地址  (1)
public static byte[] ImgFile(String path) throws Exception {
    
    URL url = new URL(path);
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    conn.setRequestMethod("GET");
    conn.setConnectTimeout(5 * 1000);
    InputStream inputStream = conn.getInputStream();//通过输入流获取图片数据
    byte[] data = readInputStream(inputStream);//调用方法(2)得到图片的二进制数据
    
    //最终返回处理好的数据
    return data;
}
//拿到图片后的处理  (2)
public static byte[] readInputStream(InputStream inputStream) throws Exception {
    
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int len = 0;
    while((len = inputStream.read(buffer)) != -1) {
        outputStream.write(buffer, 0, len);//写到内存
    }
    inputStream.close();
    return outputStream.toByteArray();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63

合并单元格

// 横向合并单元格
// 传入的参数: (哪行进行合并,开始的单元格下标,合并到哪个单元格的下标)
public static void mergeCells(XWPFTableRow row, int openCell, int endCell){

    //合并单元格
    for (int cellIndex = openCell; cellIndex <= endCell; cellIndex++) {
        XWPFTableCell cellMerge = row.getCell(cellIndex);
        if ( cellIndex == openCell ) {
            // The first merged cell is set with RESTART merge value
            cellMerge.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
        } else {
            // Cells which join (merge) the first one, are set with CONTINUE
            cellMerge.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
        }
    }
    
}
// 竖向合并单元格	  传参:要合并的表格对象、合并列的下标、开始合并行的下标、合并到第几行的下标
public static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {
    for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) {
        XWPFTableCell cell = table.getRow(rowIndex).getCell(col);
        if ( rowIndex == fromRow ) {
            cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
        } else {
            cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
        }
        cellCenter(cell);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

设置表格边框

// 设置表格边框(可自己传样式参数)
public static void tableBorder(CTTblBorders borders,String type){
    // String bolderType = "single";

    // 设置上下左右外边框
    // 左边框
    CTBorder lBorder = borders.addNewLeft();
    lBorder.setVal(STBorder.Enum.forString(type));
    lBorder.setSz(new BigInteger("1"));
    lBorder.setColor("000000");
    
    // 右边框
    CTBorder rBorder = borders.addNewRight();
    rBorder.setVal(STBorder.Enum.forString(type));
    rBorder.setSz(new BigInteger("1"));
    rBorder.setColor("000000");
    
    // 上边框
    CTBorder tBorder = borders.addNewTop();
    tBorder.setVal(STBorder.Enum.forString(type));
    tBorder.setSz(new BigInteger("1"));
    tBorder.setColor("000000");
    
    // 下边框
    CTBorder bBorder = borders.addNewBottom();
    bBorder.setVal(STBorder.Enum.forString(type));
    bBorder.setSz(new BigInteger("1"));
    bBorder.setColor("000000");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

设置单元格边框

// 设置单元格边框(可传样式)
public static void tableBorder3(CTTcBorders border,String type){
    //String bolderType = "thinThickMediumGap";

    // 左边框
    CTBorder lBorder = border.addNewLeft();
    lBorder.setVal(STBorder.Enum.forString(type));
    lBorder.setSz(new BigInteger("0"));
    lBorder.setColor("000000");
    
    // 右边框
    CTBorder rBorder = border.addNewRight();
    rBorder.setVal(STBorder.Enum.forString(type));
    rBorder.setSz(new BigInteger("0"));
    rBorder.setColor("000000");
    
    // 上边框
    CTBorder tBorder = border.addNewTop();
    tBorder.setVal(STBorder.Enum.forString(type));
    tBorder.setSz(new BigInteger("0"));
    tBorder.setColor("000000");

    CTBorder bBorder = border.addNewBottom();
    bBorder.setVal(STBorder.Enum.forString(type));
    bBorder.setSz(new BigInteger("1"));
    bBorder.setColor("000000");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

添加分页符

// 添加分页符 传入一个XWPFParagraph,XWPFParagraph 可以直接doc.createParagraph()来创建
public static void fenye(XWPFParagraph p){
    p.setPageBreak(true);
}
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/709499
推荐阅读
相关标签
  

闽ICP备14008679号