利用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来进行设置,这样就解决了问题。
总结:
从这件事可以看出,代码都不可信,要有怀疑精神。
浙公网安备 33010602011771号