如何把一个图像在Excel的单元格的Java?

我试图把一个图像到一个Excel单元格与Java,但没有太多的成功,这是我工作的代码,但我所做的唯一的事情是将图像放在Excel工作表,但不是在指定的单元格

XSSFWorkbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet("My Sample Excel"); //FileInputStream obtains input bytes from the image file InputStream inputStream = new FileInputStream("C:/images/logo.png"); //Get the contents of an InputStream as a byte[]. byte[] bytes = IOUtils.toByteArray(inputStream); //Adds a picture to the workbook int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_PNG); //close the input stream inputStream.close(); //Returns an object that handles instantiating concrete classes CreationHelper helper = wb.getCreationHelper(); //Creates the top-level drawing patriarch. Drawing drawing = sheet.createDrawingPatriarch(); //Create an anchor that is attached to the worksheet ClientAnchor anchor = helper.createClientAnchor(); anchor.setCol1(1); anchor.setRow1(2); //Creates a picture Picture pict = drawing.createPicture(anchor, pictureIdx); //Reset the image to the original size pict.resize(); //Write the Excel file FileOutputStream fileOut = null; fileOut = new FileOutputStream("C:/data/myFile.xlsx"); wb.write(fileOut); fileOut.close(); 

你现在正在做的是将图像定位到左上angular的单元格B3anchor.setCol1(1);anchor.setRow1(2); )。 然后你已经调整了图像的原始大小。

如果图像适合单元格B3则必须使用左上angular单元格右下angular单元格创build锚点。 而且您不得将图像大小调整为原始大小。

例:

 import org.apache.poi.xssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import org.apache.poi.util.IOUtils; import java.io.InputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; class ImageTest { public static void main(String[] args) { try { Workbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet("My Sample Excel"); //FileInputStream obtains input bytes from the image file InputStream inputStream = new FileInputStream("/home/axel/Bilder/Wasserlilien.jpg"); //Get the contents of an InputStream as a byte[]. byte[] bytes = IOUtils.toByteArray(inputStream); //Adds a picture to the workbook int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_PNG); //close the input stream inputStream.close(); //Returns an object that handles instantiating concrete classes CreationHelper helper = wb.getCreationHelper(); //Creates the top-level drawing patriarch. Drawing drawing = sheet.createDrawingPatriarch(); //Create an anchor that is attached to the worksheet ClientAnchor anchor = helper.createClientAnchor(); //create an anchor with upper left cell _and_ bottom right cell anchor.setCol1(1); //Column B anchor.setRow1(2); //Row 3 anchor.setCol2(2); //Column C anchor.setRow2(3); //Row 4 //Creates a picture Picture pict = drawing.createPicture(anchor, pictureIdx); //Reset the image to the original size //pict.resize(); //don't do that. Let the anchor resize the image! //Create the Cell B3 Cell cell = sheet.createRow(2).createCell(1); //set width to n character widths = count characters * 256 //int widthUnits = 20*256; //sheet.setColumnWidth(1, widthUnits); //set height to n points in twips = n * 20 //short heightUnits = 60*20; //cell.getRow().setHeight(heightUnits); //Write the Excel file FileOutputStream fileOut = null; fileOut = new FileOutputStream("myFile.xlsx"); wb.write(fileOut); fileOut.close(); } catch (IOException ioex) { } } } 

如果从程序行中删除注释标志

 ... //set width to n character widths = count characters * 256 int widthUnits = 20*256; sheet.setColumnWidth(1, widthUnits); //set height to n points in twips = n * 20 short heightUnits = 60*20; cell.getRow().setHeight(heightUnits); ... 

您可以调整单元格大小B3然后调整图像大小。