weixin_44096142 2024-01-12 16:32 采纳率: 0%
浏览 51

easyexcel单元格画斜线

使用easyexcel填充模板时,怎么给指定单元格画斜线,看教程重写了afterCellCreate,但是好像不起作用


public class CustomCellWriteHandler implements CellWriteHandler {

    @Override
    public void afterCellCreate(CellWriteHandlerContext context) {
        Cell cell = context.getCell();

        if (cell != null) {
            // 这里可以对cell进行任何操作
            Sheet sheet = context.getWriteSheetHolder().getSheet();
            XSSFDrawing drawingPatriarch = (XSSFDrawing) sheet.createDrawingPatriarch();

            ClientAnchor anchor = drawingPatriarch.createAnchor(0, 0, 1023, 255, (short) 0, 0, (short) 0, 0);
            anchor.setRow1(0);
            anchor.setCol1(0);
            anchor.setRow2(1);
            anchor.setCol2(1);
            XSSFSimpleShape simpleShape = drawingPatriarch.createSimpleShape((XSSFClientAnchor) anchor);
            simpleShape.setShapeType(ShapeTypes.LINE);

            // 设置线宽
            simpleShape.setLineWidth(0.5);
            // 设置线的风格
            simpleShape.setLineStyle(0);
            // 设置线的颜色
            simpleShape.setLineStyleColor(0, 0, 0);
        }

    }

}




  WriteSheet writeSheet = EasyExcel.writerSheet(aaa.getBillNo())
                    .registerWriteHandler(new CustomCellWriteHandler())
                    .build();
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-01-12 19:04
    关注

    【以下回答由 GPT 生成】

    import org.apache.poi.common.usermodel.LineCap;
    import org.apache.poi.ss.usermodel.IndexedColors;
    import org.apache.poi.xddf.usermodel.XDDFSolidFillProperties;
    import org.apache.poi.xddf.usermodel.XDDFLineProperties;
    import org.apache.poi.xddf.usermodel.XDDFPresetLineDash;
    import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
    import org.apache.poi.xssf.usermodel.XSSFDrawing;
    import org.apache.poi.xssf.usermodel.XSSFSimpleShape;
    import org.apache.poi.xssf.usermodel.XSSFCellStyle;
    import org.apache.poi.xssf.usermodel.XSSFColor;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder.BorderSide;
    import org.apache.poi.xssf.usermodel.XSSFColor;
    
    import com.alibaba.excel.event.WriteHandler;
    import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
    import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
    import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
    import com.alibaba.excel.write.metadata.WriteSheet;
    
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.ClientAnchor;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.util.CellAddress;
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.apache.poi.ss.util.CellRangeAddressList;
    import org.apache.poi.ss.util.CellUtil;
    
    import java.util.Map;
    
    public class CustomCellWriteHandler implements WriteHandler {
    
        @Override
        public void sheet(int sheetNo, Sheet sheet) {
        }
    
        @Override
        public void table(int sheetNo, int tableIndex, WriteTableHolder tableHolder) {
        }
    
        @Override
        public void cell(int sheetNo, int rowIndex, int cellIndex, WriteCellData<?> cellData,
                         Cell cell, WriteSheetHolder writeSheetHolder,
                         WriteTableHolder writeTableHolder, WriteWorkbookHolder writeWorkbookHolder) {
            // Specify the cell address where you want to draw the diagonal line
            if (rowIndex == 0 && cellIndex == 0) {
                // Get the sheet and drawing object
                XSSFSheet sheet = (XSSFSheet) writeSheetHolder.getSheet();
                XSSFDrawing drawing = sheet.getDrawingPatriarch();
    
                // Create an anchor point for the diagonal line
                XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, 0, 0, 1, 1);
    
                // Create a simple shape and set its properties
                XSSFSimpleShape shape = drawing.createSimpleShape(anchor);
                shape.setShapeType(ShapeTypes.LINE);
                shape.setLineWidth(1); // Set the line width to 1 point
                shape.setLineStyle(0); // Set the line style to solid
                shape.setLineStyleColor(0, 0, 0); // Set the line color (RGB values)
    
                // Set the start and end points of the diagonal line
                shape.getCTShape().getSpPr().getXfrm().setX((long) cell.getCTCell().getXfrm().getX());
                shape.getCTShape().getSpPr().getXfrm().setY((long) cell.getCTCell().getXfrm().getY());
                shape.getCTShape().getSpPr().getXfrm().setX2((long) (cell.getCTCell().getXfrm().getX() + cell.getCTCell().getXfrm().getExt().getCx()));
                shape.getCTShape().getSpPr().getXfrm().setY2((long) (cell.getCTCell().getXfrm().getY() + cell.getCTCell().getXfrm().getExt().getCy()));
            }
        }
    }
    

    使用上述代码来替换您提供的CustomCellWriteHandler类中的代码,并将其设置为EasyExcel的写处理器,以在单元格中绘制斜线。请确保 Sheet 对象是 XSSFSheet 类型,Drawing 对象是 XSSFDrawing 类型。

    这段代码将在指定单元格的左上角和右下角之间绘制一条斜线。您可以根据需要自行调整线宽、线型和线色等属性。

    这样应该可以让斜线正常显示。如果仍然无法正常显示,请确认您使用的是最新版本的 poi-ooxmlpoi-ooxml-schemas 等依赖。如果问题仍然存在,请尝试通过更详细的调试来查找问题所在。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 1月12日

悬赏问题

  • ¥15 远程访问linux主机超时
  • ¥15 odoo17存货管理优势于中国国内该行业传统ERP或MES的详细解读和举例
  • ¥15 CPU卡指令整合指令数据都在图片上
  • ¥15 火车票关联12306问题
  • ¥15 odoo17处理受托加工产品
  • ¥15 如何用MATLAB编码图三的积分
  • ¥15 圆孔衍射光强随孔径变化
  • ¥15 MacBook pro m3max上用vscode运行c语言没有反应
  • ¥15 ESP-PROG配置错误,ALL ONES
  • ¥15 结构功能耦合指标计算