G
grimborg
Hi all,
I'm using Jakarta POI 3.0-alpha3 to write an Excel spreadsheet with
images and I'm having some trouble computing the HSSFClientAnchor
size.
At the moment I try to manage it by adding column widths and row
heights until I reach approximately the size of the image in cells,
and then set up dx and dy, but I can almost never get it to work
perfectly and images are never exactly at 100%.
Is there an easier way to do this? I have searched around in google,
groups and google code search but couldn't find anything useful. How
do you people do this?
Thanks a lot!
Below is a snippet of my code. Basically, you give the starting row/
col position of the image you want to insert and it goes around adding
row/column sizes into imgHeight and imgWidth until their values are
equal to or greater than the size of the image. If they're greater, it
substracts one row or one column, depending on what was greater, and
puts the remaining pixels on dx or dy.
protected int addImage(HSSFWorkbook wb, HSSFSheet sheet, InputStream
img, int numRow, short numCol) {
int x1 = 0;
int y1 = 0;
short x2 = 0;
int y2 = 0;
int row1 = numRow;
short col1 = numCol;
int row2 = numRow;
short col2 = numCol;
ImageData d = new ImageData();
int idx = loadAndConvertPicture(img,wb,d);
int imgHeight = 0;
int imgWidth = 0;
while(imgWidth <d.getWidth() || imgHeight <d.getHeight()) {
if(imgWidth <d.getWidth()) col2++;
if(imgHeight <d.getHeight()) row2++;
if(imgWidth != d.getWidth()) {
int colWidth = (int) (sheet.getColumnWidth((short)col2)/48);
if(imgWidth+colWidth<=d.getAmplada()) {
imgWidth +=colWidth;
} else {
col2--;
x2=(short)(d.getWidth()-imgWidth);
imgWidth=d.getWidth();
}
}
if(imgHeight != d.getHeight()) {
int rowHeight;
HSSFRow row = sheet.getRow(row2);
if(row != null) rowHeight = (int) row.getHeight()/20;
else rowHeight = (int) sheet.getDefaultRowHeight()/20;
if(row == null) row = sheet.createRow(row2);
if(imgHeight +rowHeight<=d.getHeight()) {
imgHeight +=rowHeight;
} else {
row2--;
y2=d.getHeight()-imgHeight ;
imgHeight =d.getHeight();
}
}
}
(note: variable and custom method names are translated since I'm not
coding this in English; there might be a bug in there somewhere due to
this translation. My apologies if this is the case.)
I'm using Jakarta POI 3.0-alpha3 to write an Excel spreadsheet with
images and I'm having some trouble computing the HSSFClientAnchor
size.
At the moment I try to manage it by adding column widths and row
heights until I reach approximately the size of the image in cells,
and then set up dx and dy, but I can almost never get it to work
perfectly and images are never exactly at 100%.
Is there an easier way to do this? I have searched around in google,
groups and google code search but couldn't find anything useful. How
do you people do this?
Thanks a lot!
Below is a snippet of my code. Basically, you give the starting row/
col position of the image you want to insert and it goes around adding
row/column sizes into imgHeight and imgWidth until their values are
equal to or greater than the size of the image. If they're greater, it
substracts one row or one column, depending on what was greater, and
puts the remaining pixels on dx or dy.
protected int addImage(HSSFWorkbook wb, HSSFSheet sheet, InputStream
img, int numRow, short numCol) {
int x1 = 0;
int y1 = 0;
short x2 = 0;
int y2 = 0;
int row1 = numRow;
short col1 = numCol;
int row2 = numRow;
short col2 = numCol;
ImageData d = new ImageData();
int idx = loadAndConvertPicture(img,wb,d);
int imgHeight = 0;
int imgWidth = 0;
while(imgWidth <d.getWidth() || imgHeight <d.getHeight()) {
if(imgWidth <d.getWidth()) col2++;
if(imgHeight <d.getHeight()) row2++;
if(imgWidth != d.getWidth()) {
int colWidth = (int) (sheet.getColumnWidth((short)col2)/48);
if(imgWidth+colWidth<=d.getAmplada()) {
imgWidth +=colWidth;
} else {
col2--;
x2=(short)(d.getWidth()-imgWidth);
imgWidth=d.getWidth();
}
}
if(imgHeight != d.getHeight()) {
int rowHeight;
HSSFRow row = sheet.getRow(row2);
if(row != null) rowHeight = (int) row.getHeight()/20;
else rowHeight = (int) sheet.getDefaultRowHeight()/20;
if(row == null) row = sheet.createRow(row2);
if(imgHeight +rowHeight<=d.getHeight()) {
imgHeight +=rowHeight;
} else {
row2--;
y2=d.getHeight()-imgHeight ;
imgHeight =d.getHeight();
}
}
}
(note: variable and custom method names are translated since I'm not
coding this in English; there might be a bug in there somewhere due to
this translation. My apologies if this is the case.)