2011-11-15 13 views
7

Posso inserire l'immagine nel mio file excel usando jxl usando sheet.addImage(WritableImage obj). Il mio problema è che si estende in base agli argomenti di WritableImage. Mi chiedo se c'è un modo in modo che l'immagine che inserisco non si allunghi come se inserissi un'immagine di dimensioni 200x200 che apparirà sul foglio come 200x200.Inserire l'immagine nel file excel usando JXL senza allungarlo

+0

@ king14nyr hai trovato una soluzione per favore invialo thankx – shareef

risposta

6

Per quanto mi abbia infastidito su jxl, non ho mai trovato un modo per inserire un'immagine senza associare le proporzioni alle celle invece di pixel/pollici/qualsiasi unità di misura standard, e ho fatto una scelta decente ricerca in passato su questo.

Il meglio si può fare è per adattare le immagini al altezza/larghezza delle celle si inserisce in, o meglio ancora, impostare la larghezza/altezza di cella per le celle state mettendo l'immagine.

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

per mantenere il rapporto di aspetto, si potrà anche impostare il WritableImage di non ridimensionare se l'utente cambia l'altezza della riga o la larghezza della colonna. Fate questo con uno dei due al di sotto (la vostra preferenza sulla base se si desidera che l'ancoraggio immagine bloccato o di muoversi con il ridimensionamento):

WritableImage.MOVE_WITH_CELLS; 
WritableImage.NO_MOVE_OR_SIZE_WITH_CELLS; 
+0

Grazie per la risposta! Penso di non poterlo applicare alla mia situazione attuale poiché la larghezza e l'altezza della colonna sono soggette alla lunghezza della parola più lunga nella stessa colonna in cui ho bisogno di mettere un'immagine. Ma apprezzo molto la tua risposta. – Jemp

+0

Nessun problema, mi è già successa questa situazione prima. Quanto sopra funziona SE è possibile correggere la larghezza/altezza delle celle, ma nel caso in cui non sia possibile (come quando si imposta AUTOSIZE su true su colonne), non ho trovato un modo per farlo. Se trovi un modo per farlo in jxl, assicurati di postare qui, in quanto potrebbe aiutare gli altri. – king14nyr

+0

@ king14nyr hai trovato una soluzione per favore postala thankx – shareef

0

In realtà, questo è possibile. Si supponga che la larghezza dell'immagine che si desidera includere è 4000. Poi procedere come segue:

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