POI insert photo into excel but fail

2019-03-05 05:30发布

问题:

below is my code copied from somewhere on the web used to copy an image file to a excel file worksheet.

but it has error on running statement "int my_picture_id = my_workbook.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);" with error "Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/commons/codec/digest/DigestUtils at org.apache.poi.hssf.usermodel.HSSFWorkbook.addPicture(HSSFWorkbook.java:1610) at Addphoto.main(Addphoto.java:19)"

I cannot find the reason as i am really a newbie on java. Please help to solve this trouble.

import java.io.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.*;
import org.apache.poi.util.IOUtils;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
public class Addphoto {  
    public static void main(String[] args) throws Exception{

            HSSFWorkbook my_workbook = new HSSFWorkbook();
            HSSFSheet my_sheet = my_workbook.createSheet("MyBanner");               

            InputStream my_banner_image = new FileInputStream("C:/path/123.jpg");

            byte[] bytes = IOUtils.toByteArray(my_banner_image);

            int my_picture_id = my_workbook.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);
            my_banner_image.close();                
            HSSFPatriarch drawing = my_sheet.createDrawingPatriarch();
            ClientAnchor my_anchor = new HSSFClientAnchor();
            my_anchor.setCol1(2);
            my_anchor.setRow1(1);           
            HSSFPicture  my_picture = drawing.createPicture(my_anchor, my_picture_id);

            my_picture.resize();            

            FileOutputStream out = new FileOutputStream(new File("C:/path/uploadphoto-test.xls"));
            my_workbook.write(out);
            out.close();
    }

}

回答1:

I hope you get your answer.....

But to help other I am posting this.

This problem happens if you are missing the JAR file commons-codec-1.7.jar which is a part of Apache Commons Codec distribution. POI needs this JAR file to add the image to the workbook. So, make sure you have this JAR file (or equivalent version) in your classpath.