使用JXL将图像插入excel文件而不拉伸它

时间:2011-11-15 13:03:39

标签: java excel jxl

我可以使用sheet.addImage(WritableImage obj)使用jxl将图像插入到我的Excel文件中。我的问题是,它基于WritableImage的args延伸。我想知道是否有办法使我插入的图像不会拉伸,就像我插入200x200尺寸的图像一样,它将在图纸上显示为200x200。

2 个答案:

答案 0 :(得分:7)

尽管这让我对jxl产生了误解,但我从来没有找到一种方法来插入图像而不将长宽比与单元格相关联而不是像素/英寸/任何标准测量单位,我做了不错的研究这样做过去。

您可以做的最好的方法是使图像适应您要插入的单元格的高度/宽度,甚至更好地设置要放入图像的单元格的单元格宽度/高度。

来自JExcel常见问题解答 - http://jexcelapi.sourceforge.net/resources/faq/

private static final double CELL_DEFAULT_HEIGHT = 17;
private static final double CELL_DEFAULT_WIDTH = 64;

File imageFile = new File(GIF_OR_JPG_IMAGE_FILE);
BufferedImage input = ImageIO.read(imageFile);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(input, "PNG", baos);
sheet.addImage(new WritableImage(1,1,input.getWidth() / CELL_DEFAULT_WIDTH,
    input.getHeight() / CELL_DEFAULT_HEIGHT,baos.toByteArray()));

要保持纵横比,如果用户更改行高或列宽,您还需要将WritableImage设置为不重新调整大小。使用以下任一方法执行此操作(您的偏好基于您是否希望锁定图像锚点或通过调整大小来移动):

WritableImage.MOVE_WITH_CELLS;
WritableImage.NO_MOVE_OR_SIZE_WITH_CELLS;

答案 1 :(得分:0)

实际上,这是可能的。假设您要包含的图片宽度为4000.然后执行以下操作:

CellView cv = excelSheetTemp.getColumnView(0);
//get the width of the column where you want to insert the picture
int width = forLogo.getSize();
//if the width is less than the size you want, set the column width to
//the width. This will ensure that your image does not shrink
if (width < 4000) {
    forLogo.setSize(4000);
    excelSheetTemp.setColumnView(0, cv);
    width = 4000;
}
double c = 4000/width;
WritableImage im = new WritableImage(0, 1, c, 3, the image file);
excelSheetTemp.addImage(im);