The program inserts an image to a specified cell of an excel sheet
package pkg.util.excel;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
/**
* Jars needed for the program to run:
* poi-3.8-beta4-20110826.jar
* poi-excelant-3.8-beta4-20110826.jar
* poi-ooxml-3.8-beta4-20110826.jar
* poi-ooxml-schemas-3.8-beta4-20110826.jar
* poi-scratchpad-3.8-beta4-20110826.jar
* commons-codec-1.6.jar
*/
public class ImageInsert
{
/**
* The code inserts an image to a specific
* cell of a excel sheet
*/
public static void main(String[] args)
{
try
{
//Creating a excel workbook
HSSFWorkbook wb=new HSSFWorkbook();
//Creating a excel sheet named "test" within the workbook
HSSFSheet testsheet=wb.createSheet("test");
System.out.println("The work book is created");
//Pointing the excel file to FileOutputStream where image needs to be inserted
FileOutputStream fos=new FileOutputStream("C:\\ExcelUtil\\sample.xls");
System.out.println("File sample.xls is created");
//Pointing the image file to FileInputStream which needs to be inserted in excel sheet
FileInputStream fis=new FileInputStream("C:\\ExcelUtil\\sign.jpg");
//Creating a ByteArrayOutputStream object
ByteArrayOutputStream img_bytes=new ByteArrayOutputStream();
int b;
//The loop reads each byte from input stream and puts it into the byte array
while((b=fis.read())!=-1)
img_bytes.write(b);
//Closing the input stream as it is not required further
fis.close();
//Creating HSSFClientAnchor object
HSSFClientAnchor anchor = new HSSFClientAnchor();
int col1=1,row1=1;
//HSSFClientAnchor object mainly sets the excel cell location where
//the image needs to be inserted
//(col1, row1, x1, y1, col2, row2, x2, y2)
anchor.setAnchor((short)col1, row1, 0, 0,(short) ++col1, ++row1, 0, 0);
anchor.setAnchorType(2);
//Converts the byte array stream to JPEG image
int index=wb.addPicture(img_bytes.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG);
//Gets sheet from the workbook
HSSFSheet sheet=wb.getSheet("test");
//Creating HSSFPatriarch object
HSSFPatriarch patriarch=sheet.createDrawingPatriarch();
//Creating picture with anchor and index information
patriarch.createPicture(anchor,index);
//Write workbook with the data
wb.write(fos);
System.out.println("Writing data to the xls file");
//Close FileOutputStream as it will no longer be required
fos.close();
System.out.println("File closed");
}
catch(IOException ioe)
{
System.out.println("Hi ! You got an exception. "+ioe.getMessage());
}
}
}