我试图将图像放入带有Java的Excel单元格中,但没有成功,这是我正在使用的代码,但是我唯一要做的就是将图像放入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();
您已经在做的是将锚定图像定位到左上方的单元格B3(anchor.setCol1(1);anchor.setRow1(2);)。然后,您已经将图像调整为原始大小。
B3
anchor.setCol1(1);anchor.setRow1(2);
如果图像适合该单元格,B3则必须使用左上单元格 和 右下单元格创建锚点。而且,请勿将图像调整为原始大小。
例:
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,从而调整图像的大小。