利用poi生成excel,发现poi3.13一个bug

今天在利用poi生成excel文档时,发现如下代码问题

public HSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, short col1, int row1, short col2, int row2) {
        super(dx1, dy1, dx2, dy2);

        checkRange(dx1, 0, 1023, "dx1");
        checkRange(dx2, 0, 1023, "dx2");
        checkRange(dy1, 0, 255, "dy1");
        checkRange(dy2, 0, 255, "dy2");
        checkRange(col1, 0, 255, "col1");
        checkRange(col2, 0, 255, "col2");
        checkRange(row1, 0, 255 * 256, "row1");
        checkRange(row2, 0, 255 * 256, "row2");

        setCol1((short) Math.min(col1, col2));
        setCol2((short) Math.max(col1, col2));
        setRow1((short) Math.min(row1, row2));
        setRow2((short) Math.max(row1, row2));

        if (col1 > col2){
            _isHorizontallyFlipped = true;
        }
        if (row1 > row2){
            _isVerticallyFlipped = true;
        }
    }

 poi会把int类型转换为short类型,这样造成精度丢失,在测试的时候,当int超过short值,就会爆出错误,支出row1变成了负数,不在0-65535中。

解决方案,在初始化的时候不要传入参数,而采用set来进行设置,这样就解决了问题。

总结:

从这件事可以看出,代码都不可信,要有怀疑精神。

 
posted @ 2016-02-04 18:57  wodzgp  阅读(249)  评论(0)    收藏  举报