`
silencelyn
  • 浏览: 19950 次
  • 性别: Icon_minigender_1
  • 来自: 温州
社区版块
存档分类
最新评论

POI 操作EXCEL 之插入图片 2003,2007

阅读更多
需要用的包 是   poi-ooxml
下面是下载地址
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());  
  
        }  
    }  
  
      
  

}


分享到:
评论

相关推荐

    POI向excel中插入图片

    POI提供了HSSFPicture类和XSSFPicture类(分别对应于.HSSF和.XSSF,即Excel 2003和2007以上的版本)来处理这些图片。 **1. 引入依赖** 在Java项目中,你需要在pom.xml文件中添加Apache POI的相关依赖,例如: ```...

    POI操作EXCEL,支持office2003,2007,2010,2013(详)

    这个“POI操作EXCEL,支持office2003,2007,2010,2013(详)”的主题涵盖了一系列知识点,旨在帮助开发者熟练地使用Apache POI处理不同版本的Excel文件。 首先,我们来看Excel的两种主要文件格式:`.xls`(Excel 97-...

    POI操作Word中插入文本和图片

    Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在本文中,我们将深入探讨如何使用Apache POI在Word文档中插入文本和图片,这对于创建动态报告模板尤其有用。 ...

    POI导出Excel工具类,自动设置标题 列名 文件名,可插入图片,合并单元格

    在这个场景中,我们关注的是如何使用POI来创建一个功能丰富的Excel导出工具类,它能够自动设置标题、列名、文件名,并且支持插入图片以及合并单元格。下面将详细介绍这些功能的实现。 首先,要创建一个Excel工作簿...

    java 通过poi操作excel jar包

    Apache POI是一个开源项目,提供了丰富的API,使得Java开发者能够轻松地与MS Office格式交互,包括XLS(Excel 97-2003)和XLSX(Excel 2007及以后的版本)。 标题中的"java通过poi操作excel jar包"指的是使用Apache...

    POI操作Excel完美生成水印

    3. **插入图片**:加载Excel工作簿后,你可以使用Sheet对象的createDrawingPatriarch()方法创建一个绘图父元素,这是在Excel工作表上添加图形的起点。接下来,使用ClientAnchor类来定位和设置图片的大小,并使用...

    Apache poi 操作 excel 文件压缩包

    - 插入图片、图表和公式。 - 设置单元格样式,如字体、颜色、边框和填充。 - 处理工作簿和工作表的合并。 - 导出和导入数据到数据库。 - 自动化Excel报告生成。 在实际应用中,Apache POI 往往用于数据分析、报表...

    java实现在Excel中插入图片

    总结起来,Java实现Excel中插入图片的核心步骤包括:导入Apache POI库,创建并操作工作簿和工作表,读取和创建图片对象,创建绘图工作表,设置图片位置,最后保存工作簿。在实际开发中,可能还需要处理图片格式转换...

    POI导出带图片的excel

    Apache POI是一个流行的Java库,用于读取、创建和修改Microsoft Office格式的文件,特别是Excel工作簿。在本文中,我们将深入探讨如何使用POI库将图片插入到Excel文档中,以便创建包含图像的丰富报告。 首先,让...

    poi操作Excel文件jar包

    - **图表和图片**: 支持在Excel中插入和操作图表,以及导入和导出图片。 - **样式和模板**: 可以创建自定义样式并应用到多个单元格,也可以基于模板进行数据填充。 - **事件模型(Event API)**: 对于大型文件,...

    通过POI将PPT插入图片并导出实例

    在这个实例中,我们将深入探讨如何利用POI库来创建一个PowerPoint演示文稿,并在其中插入图片。这个过程涉及到多个步骤,包括设置工作簿,创建幻灯片,以及添加图片到幻灯片。 首先,我们需要在项目中引入Apache ...

    poi 解析 office excel 2003,2007 word 2003,2007 的示例

    本示例将详细介绍如何使用Apache POI解析Office Excel 2003和2007,以及Word 2003和2007的文件。 首先,我们来看Excel的解析。Excel 2003使用的是.BOOK文件格式(HSSFWorkbook),而2007及以上版本使用的是.XLSX...

    poi3.0.1操作excel

    它通过HSSF(Horizontally Stored Spreadsheet Format)组件来处理旧版的.BIFF8格式Excel文件(97-2003版本),而XSSF(XML Spreadsheet Format)组件则用于处理较新的.XLSX格式(2007及以后版本)。在"poi3.0.1"中...

    利用java往excel中插入图片

    本篇文章将详细介绍如何利用Java和Apache POI库向Excel工作表中插入图片。 首先,我们需要理解Apache POI的工作原理。POI提供了一个名为HSSFPatriarch的类,它是Excel中的图形绘制容器,可以用于插入图片。对于....

    poi操作excel全部jar包

    在实际应用中,Apache POI 还提供了处理复杂的Excel特性的功能,如条件格式、数据验证、合并单元格、插入图片以及处理公式等。开发者可以根据具体需求选择合适的API进行操作。 除了基本的读写操作,Apache POI 还...

    java poi操作excel小例子

    POI 还支持更复杂的功能,如合并单元格、插入图片、应用公式、处理图表等。例如,你可以使用 `setCellStyle()` 为单元格设置样式,`setFormula()` 设置公式。 在学习和实践中,可以基于这个小例子不断扩展,了解并...

    JAVA poi 做EXCEL导出(包含图片) 完整版

    要插入图片,首先需要获取图片的数据,通常是从文件系统或网络加载。这里我们假设图片位于项目资源目录下: ```java FileInputStream imageStream = new FileInputStream("path_to_your_image.jpg"); byte[] ...

    JXL 和 POI 操作Excel 表格

    POI支持更广泛的Excel特性,如样式、图表、图片、公式等,并且兼容Excel 97到2016的版本。 使用POI操作Excel的基本步骤与JXL类似,但POI的API更为复杂和强大: 1. 引入POI库的依赖。 2. 创建`Workbook`对象,可以...

    poi操作Excel的各种解释

    本篇文章将详细探讨POI操作Excel的各种方法,包括导出和导入数据、合并单元格以及插入图片。 1. **Excel导出**: - 使用Apache POI创建新的Excel工作簿(XSSFWorkbook或HSSFWorkbook,取决于你处理的是.xlsx还是....

    利用POI解析excel并存入数据库demo

    Apache POI 是一个开源项目,专门用于处理 Microsoft Office 格式的文件,如 Word、Excel 和 PowerPoint。在这个"利用POI解析excel并存入数据库demo"中,我们将关注如何使用 POI 库来读取 Excel 文件,并将数据有效...

Global site tag (gtag.js) - Google Analytics