Я могу вставить изображение в свой файл excel, используя jxl, используяsheet.addImage(WritableImage obj)
. Моя проблема в том, что он растягивается на основе аргументов WritableImage
. Мне интересно, есть ли способ, чтобы изображение, которое я вставляю, не растягивалось, например, если я вставляю изображение размером 200x200, оно будет отображаться на листе как 200x200.
Вставьте изображение в файл excel с помощью JXL, не растягивая его
Ответы (2)
Как бы это ни беспокоило меня в отношении 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;
На самом деле это возможно. Предположим, что ширина изображения, которое вы хотите включить, составляет 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);