使用POI在Excel里插入图片,如何使插入的图片使用固定的大小?先介绍原有的两种方式:
一种是指定开始和结尾单元格,然后从头画到尾,相当于平铺
还有一种就是仅指定开始的单元格,图片的大小跟这个单元格的长宽有关,可以放大缩小固定的倍数,相当于左对齐
第一种效果如下:
第二种效果如下:
第一种方法的关键代码如下:
1 private void pictureToSheet(Sheet finalSheet, Row row, Cell cell, int pictureIdx) { 2 Drawing patriarch = finalSheet.createDrawingPatriarch(); 3 ExcelPositionRange excelPositionRange = ExcelTransferUtils.getMergedRegionPositionRange(finalSheet, row.getRowNum(), cell.getColumnIndex()); 4 ClientAnchor anchor = patriarch.createAnchor(0, 0, 1023, 255, 5 excelPositionRange.getFirstCol(), 6 excelPositionRange.getFirstRow(), 7 excelPositionRange.getLastCol(), 8 excelPositionRange.getLastRow() 9 ); 10 patriarch.createPicture(anchor, pictureIdx); 11 }
注:代码中的excelPositionRange,是俺自定义的一个类型。里边只有四个变量和get/set方法,四个变量分别是单元格的开始、结尾单元格的横纵坐标。这个大家可以根据需要来改。
PS:其中1023和255指的是每个单元格被切分的份数,指定的是最后的单元格的最右下角的一个点,其方法的源代码在本文最后的附录里。
第二种方法的关键代码如下:
1 private void pictureToSheet(Sheet finalSheet, Row row, Cell cell, int pictureIdx) { 2 Drawing patriarch = finalSheet.createDrawingPatriarch(); 3 ExcelPositionRange excelPositionRange = ExcelTransferUtils.getMergedRegionPositionRange(finalSheet, row.getRowNum(), cell.getColumnIndex()); 4