下面是下载地址
http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22poi-ooxml%22
直接上代码 ,要说的全在注释里了 。
package com.excel; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import javax.imageio.ImageIO; //Excel 2003 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; //Excel 2007 import org.apache.poi.xssf.usermodel.XSSFClientAnchor; import org.apache.poi.xssf.usermodel.XSSFDrawing; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class TestExcel { public static void main(String[] args) throws IOException { //要插Excel中的图片 String picPath="http://pic.nipic.com/2007-11-09/2007119122712983_2.jpg"; XSSFWorkbook xWb = new XSSFWorkbook(); TestExcel.insertImage(xWb,picPath); TestExcel.insertImage(picPath); FileOutputStream fileOut = null; // 输出到磁盘 fileOut = new FileOutputStream("F:/1/excel2007x" + System.currentTimeMillis() + ".xlsx"); xWb.write(fileOut); fileOut.close(); System.out.println("well Done ! "); } //操作 2003版excel public static void insertImage(String picPath){ FileOutputStream fileOut = null; BufferedImage bufferImg = null; try { //也可以读取一个本地现有的Excel文件 版本要对应哦 //HSSFWorkbook wb=new HSSFWorkbook(new FileInputStream(new File("F:/16.jpg"))); HSSFWorkbook wb=new HSSFWorkbook(); // 创建一个工作薄 HSSFSheet sheet1 = wb.createSheet("test picture"); HSSFPatriarch patriarch = sheet1.createDrawingPatriarch(); for(int i=0;i<2;i++){ //new一个URL对象 URL url = new URL(picPath); //打开链接 HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //设置请求方式为"GET" conn.setRequestMethod("GET"); //超时响应时间为5秒 conn.setConnectTimeout(5 * 1000); //通过输入流获取图片数据 InputStream inStream = conn.getInputStream(); // 先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); // 读入图片 可以是输入流 也可以试 本地 File对象 bufferImg = ImageIO.read(inStream); //bufferImg = ImageIO.read(new File("F:/16.jpg")); ImageIO.write(bufferImg, "jpg", byteArrayOut); //前四位 是 指定位置的两个单元格 中的偏移量, 横向最大 1023 纵向最大 255,单位不明,大概是一个比例 HSSFClientAnchor anchor = new HSSFClientAnchor(500, 120, 1023, 255, (short) 0, 0+i*30, (short) 10, 20+i*20); anchor.setAnchorType(3); patriarch.createPicture(anchor, wb.addPicture(byteArrayOut .toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)); byteArrayOut.close(); inStream.close(); conn.disconnect(); } fileOut = new FileOutputStream("F:/1/excel2003h" + System.currentTimeMillis() + ".xls"); // 写入excel文件 wb.write(fileOut); fileOut.close(); } catch (IOException io) { io.printStackTrace(); System.out.println("erorr : " + io.getMessage()); } finally { if (fileOut != null) { try { fileOut.close(); } catch (IOException e) { e.printStackTrace(); } } } } //操作 2007版 及以上版本 excel public static void insertImage(XSSFWorkbook wb,String picPath) { BufferedImage bufferImg = null; try { //new一个URL对象 URL url = new URL(picPath); //打开链接 HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //设置请求方式为"GET" conn.setRequestMethod("GET"); //超时响应时间为5秒 conn.setConnectTimeout(5 * 1000); //通过输入流获取图片数据 InputStream inStream = conn.getInputStream(); // 读取图片 ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); //也可以使用文件对象 各取所需 bufferImg = ImageIO.read(inStream); // bufferImg = ImageIO.read(new File("F:/16.jpg")); //如果是 png、gif 就设对应值 我只试过 jpg png 是OK的, 如果设的和传入的图片不符,会有色差,可以自行尝试 ImageIO.write(bufferImg, "jpg", byteArrayOut); // 创建excel Sheet ,这个是必须的,不然图片插到哪呢 XSSFSheet sheet=wb.createSheet("sheet0"); // 设置图片位置 这个对象 对应 2003版 中HSSFPatriarch 用法 类似 XSSFDrawing patriarch = sheet.createDrawingPatriarch(); //偏移量 这个有点恶心, 这个单位直接以万 计, 10000以下 基本设了等于没设。原因不明 ,操作2003 的 HSSF 是正常的比例 XSSFClientAnchor anchor = new XSSFClientAnchor(50*10000, 0, 100, 100, 2, 10, 12, 25); //这个参数还不太清楚 有 0、2、3 三个值,貌似和图片与单元格的相对位置有关 ,设不设都不影响图片位置 //anchor.setAnchorType(2); //如果是 png、gif 就设对应值 patriarch .createPicture(anchor, wb.addPicture( byteArrayOut.toByteArray(), XSSFWorkbook.PICTURE_TYPE_JPEG)); byteArrayOut.close(); inStream.close(); conn.disconnect(); } catch (FileNotFoundException e) { System.out.println(e.getLocalizedMessage()); } catch (IOException e) { System.out.println(e.getLocalizedMessage()); } } }