POI Excel插入线条(直线、斜线)

目录

1 Maven依赖

2 代码实现

3 调试代码

4 调试结果

 注:


1 Maven依赖

        <!-- easyExcel  Excel文档处理工具     -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.8</version>
        </dependency>
        <!-- hutool工具包       -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.5.7</version>
        </dependency>

2 代码实现


    /**
     * 插入线条(线条颜色默认为黑色,线条样式默认为Solid,线条宽度默认为0.5)
     *
     * @param workbook      文档对象
     * @param sheet         sheet页对象
     * @param beginRowIndex 开始行号
     * @param endRowIndex   结束行号
     * @param beginColIndex 开始列号
     * @param endColIndex   结束列号
     */
    public static void insertLine(Workbook workbook, Sheet sheet, int beginRowIndex, int endRowIndex, int beginColIndex
            , int endColIndex) {
        insertLine(workbook, sheet, beginRowIndex, endRowIndex, beginColIndex, endColIndex, POIUtil.getXSSFRGBColor(0, 0, 0)
                , LineStyleConstant.INT_SOLID, 0.5d);
    }

    /**
     * 插入线条
     *
     * @param workbook      文档对象
     * @param sheet         sheet页对象
     * @param beginRowIndex 开始行号
     * @param endRowIndex   结束行号
     * @param beginColIndex 开始列号
     * @param endColIndex   结束列号
     * @param lineColor     线条颜色
     * @param lineStyle     线条样式
     * @param lineWidth     线条宽度
     */
    public static void insertLine(Workbook workbook, Sheet sheet, int beginRowIndex, int endRowIndex, int beginColIndex, int endColIndex
            , Color lineColor, int lineStyle, double lineWidth) {
        insertShape(workbook, sheet, beginRowIndex, endRowIndex, beginColIndex, endColIndex, lineColor, lineStyle, lineWidth
                , ShapeTypes.LINE);
    }

    /**
     * 插入形状
     *
     * @param workbook      文档对象
     * @param sheet         sheet页对象
     * @param beginRowIndex 开始行号
     * @param endRowIndex   结束行号
     * @param beginColIndex 开始列号
     * @param endColIndex   结束列号
     * @param lineColor     线条颜色
     * @param lineStyle     线条样式
     * @param lineWidth     线条宽度
     * @param shapeType     形状类型
     */
    public static void insertShape(Workbook workbook, Sheet sheet, int beginRowIndex, int endRowIndex, int beginColIndex, int endColIndex
            , Color lineColor, int lineStyle, double lineWidth, int shapeType) {
        CreationHelper helper = workbook.getCreationHelper();
        //画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)
        Drawing drawing = sheet.getDrawingPatriarch();
        if (drawing == null) {
            drawing = sheet.createDrawingPatriarch();
        }
        ClientAnchor anchor = helper.createClientAnchor();
        // 设置线条的开始位置
        anchor.setCol1(beginColIndex);
        anchor.setRow1(beginRowIndex);
        // 设置线条的结束位置
        anchor.setCol2(endColIndex);
        anchor.setRow2(endRowIndex);
        if (drawing instanceof XSSFDrawing) {
            XSSFSimpleShape shape = ((XSSFDrawing) drawing).createSimpleShape((XSSFClientAnchor) anchor);
            // 设置形状类型
            shape.setShapeType(shapeType);
            // 设置线宽
            shape.setLineWidth(lineWidth);
            // 设置线的风格
            shape.setLineStyle(lineStyle - 1);
            // 设置线的颜色
            XSSFColor xssfColor = (XSSFColor) lineColor;
            byte[] rgbBytes = xssfColor.getRGB();
            if (rgbBytes == null || rgbBytes.length < 3) {
                shape.setLineStyleColor(0, 0, 0);
            } else {
                shape.setLineStyleColor(rgbBytes[0], rgbBytes[1], rgbBytes[2]);
            }
        }
    }

3 调试代码

    /**
     * 测试插入线条
     */
    @Test
    public void testInsertLine(){
        try {
            XSSFWorkbook workbook = new XSSFWorkbook();
            Sheet sheet = workbook.createSheet();
            File file = new File("D:/easyexcel/testInsertLine.xlsx");
            FileUtil.createNewFile(file);
            //插入线条
            POIExcelUtil.insertLine(workbook,sheet,1,2,0,4);
            workbook.write(new FileOutputStream(file));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

4 调试结果

 注:

(1)只支持07版的Excel文档。

(2)源码请查看Gitee。

xudongbase: 主要是项目中可以用到的共通方法https://gitee.com/xudong_master/xudongbase

在I中,可以使用 `HFSimpleShape` 类来入带箭头的条。下面是示例代码: ```java import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*; public class ArrowLineExample { public static void main(String[] args) throws Exception { // 创建工作簿和工作表 HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Sheet1"); // 创建画布和绘制器 HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 0, 0, (short) 10, 10); HSSFSimpleShape shape = patriarch.createSimpleShape(anchor); // 设置线条属性 shape.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE); shape.setLineStyleColor(0, 0, 0); shape.setLineWidth(HSSFShape.LINEWIDTH_ONE_PT); shape.setLineStyle(HSSFShape.LINESTYLE_SOLID); // 设置箭头属性 shape.setArrowStyle(HSSFSimpleShape.ARROW_ARROW); shape.setArrowWidth(HSSFShape.ARROW_WIDTH_NARROW); shape.setArrowHeight(HSSFShape.ARROW_HEIGHT_MEDIUM); // 输出到文件 FileOutputStream fileOut = new FileOutputStream("ArrowLineExample.xls"); workbook.write(fileOut); fileOut.close(); } } ``` 在这个示例中,我们创建了一个带箭头的线条,并将其插入到了工作表中。具体实现步骤如下: 1. 创建工作簿和工作表。 2. 创建画布和绘制器,并设置绘制范围。 3. 创建 `HSSFSimpleShape` 对象,并设置线条属性。 4. 设置箭头属性。 5. 将绘制的对象输出到文件中。 你可以根据需要修改线条和箭头的属性,以实现你想要的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值