Вставьте изображение в файл Excel, используя JXL, не растягивая его - PullRequest
8 голосов
/ 15 ноября 2011

Я могу вставить изображение в файл Excel, используя jxl, используя sheet.addImage(WritableImage obj). Моя проблема в том, что он растягивается на основе аргументов WritableImage. Мне интересно, есть ли способ, чтобы изображение, которое я вставляю, не растягивалось, как если бы я вставлял изображение размером 200x200, оно будет отображаться на листе как 200x200.

Ответы [ 2 ]

7 голосов
/ 16 ноября 2011

Несмотря на то, что это беспокоило меня о 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;
0 голосов
/ 15 августа 2016

На самом деле это возможно. Предположим, что ширина картинки, которую вы хотите включить, составляет 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);
...