2011-11-15 84 views
7

我可以使用jxl使用sheet.addImage(WritableImage obj)將圖像插入到我的excel文件中。我的問題是,它的延伸基於WritableImage的參數。我想知道是否有辦法讓我插入的圖像不會拉伸,如果我插入一張200x200大小的圖像,它會顯示爲200x200。使用JXL將圖像插入excel文件而不拉伸它

+0

@ king14nyr你找到一個解決辦法,請張貼thankx – shareef

回答

6

儘管這已經給我帶來了關於jxl的困擾,但我從來沒有找到一種方法來插入圖像,而不將像素長寬比與單元格相關聯,而不是像素/英寸/任何標準測量單位。在過去研究這樣做。

你能做的最好的是圖像適應你將它插入,甚至更好的單元格的高度/寬度,爲你把圖像中的細胞設置單元格的寬度/高度。

從JExcel FAQ - 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; 
+0

謝謝您的回覆!我認爲我不能將它應用於我目前的情況,因爲列寬度和高度受到同一列中需要放置圖像的最長單詞的長度的影響。但我非常感謝你的回答。 – Jemp

+0

沒問題,以前這種情況也發生在我身上。上面的工作如果你可以修改單元格的寬度/高度,但是在你不能的情況下(比如當你在列上設置AUTOSIZE爲真),我還沒有找到辦法。如果你確實在jxl中找到了一種方法,一定要在這裏發佈,因爲它可以幫助其他人。 – king14nyr

+0

@ king14nyr您是否找到解決方案請發佈謝謝 – shareef

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);