需要用的包 是 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提供了HSSFPicture类和XSSFPicture类(分别对应于.HSSF和.XSSF,即Excel 2003和2007以上的版本)来处理这些图片。 **1. 引入依赖** 在Java项目中,你需要在pom.xml文件中添加Apache POI的相关依赖,例如: ```...
这个“POI操作EXCEL,支持office2003,2007,2010,2013(详)”的主题涵盖了一系列知识点,旨在帮助开发者熟练地使用Apache POI处理不同版本的Excel文件。 首先,我们来看Excel的两种主要文件格式:`.xls`(Excel 97-...
Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在本文中,我们将深入探讨如何使用Apache POI在Word文档中插入文本和图片,这对于创建动态报告模板尤其有用。 ...
在这个场景中,我们关注的是如何使用POI来创建一个功能丰富的Excel导出工具类,它能够自动设置标题、列名、文件名,并且支持插入图片以及合并单元格。下面将详细介绍这些功能的实现。 首先,要创建一个Excel工作簿...
Apache POI是一个开源项目,提供了丰富的API,使得Java开发者能够轻松地与MS Office格式交互,包括XLS(Excel 97-2003)和XLSX(Excel 2007及以后的版本)。 标题中的"java通过poi操作excel jar包"指的是使用Apache...
3. **插入图片**:加载Excel工作簿后,你可以使用Sheet对象的createDrawingPatriarch()方法创建一个绘图父元素,这是在Excel工作表上添加图形的起点。接下来,使用ClientAnchor类来定位和设置图片的大小,并使用...
- 插入图片、图表和公式。 - 设置单元格样式,如字体、颜色、边框和填充。 - 处理工作簿和工作表的合并。 - 导出和导入数据到数据库。 - 自动化Excel报告生成。 在实际应用中,Apache POI 往往用于数据分析、报表...
总结起来,Java实现Excel中插入图片的核心步骤包括:导入Apache POI库,创建并操作工作簿和工作表,读取和创建图片对象,创建绘图工作表,设置图片位置,最后保存工作簿。在实际开发中,可能还需要处理图片格式转换...
Apache POI是一个流行的Java库,用于读取、创建和修改Microsoft Office格式的文件,特别是Excel工作簿。在本文中,我们将深入探讨如何使用POI库将图片插入到Excel文档中,以便创建包含图像的丰富报告。 首先,让...
- **图表和图片**: 支持在Excel中插入和操作图表,以及导入和导出图片。 - **样式和模板**: 可以创建自定义样式并应用到多个单元格,也可以基于模板进行数据填充。 - **事件模型(Event API)**: 对于大型文件,...
在这个实例中,我们将深入探讨如何利用POI库来创建一个PowerPoint演示文稿,并在其中插入图片。这个过程涉及到多个步骤,包括设置工作簿,创建幻灯片,以及添加图片到幻灯片。 首先,我们需要在项目中引入Apache ...
本示例将详细介绍如何使用Apache POI解析Office Excel 2003和2007,以及Word 2003和2007的文件。 首先,我们来看Excel的解析。Excel 2003使用的是.BOOK文件格式(HSSFWorkbook),而2007及以上版本使用的是.XLSX...
它通过HSSF(Horizontally Stored Spreadsheet Format)组件来处理旧版的.BIFF8格式Excel文件(97-2003版本),而XSSF(XML Spreadsheet Format)组件则用于处理较新的.XLSX格式(2007及以后版本)。在"poi3.0.1"中...
本篇文章将详细介绍如何利用Java和Apache POI库向Excel工作表中插入图片。 首先,我们需要理解Apache POI的工作原理。POI提供了一个名为HSSFPatriarch的类,它是Excel中的图形绘制容器,可以用于插入图片。对于....
在实际应用中,Apache POI 还提供了处理复杂的Excel特性的功能,如条件格式、数据验证、合并单元格、插入图片以及处理公式等。开发者可以根据具体需求选择合适的API进行操作。 除了基本的读写操作,Apache POI 还...
POI 还支持更复杂的功能,如合并单元格、插入图片、应用公式、处理图表等。例如,你可以使用 `setCellStyle()` 为单元格设置样式,`setFormula()` 设置公式。 在学习和实践中,可以基于这个小例子不断扩展,了解并...
要插入图片,首先需要获取图片的数据,通常是从文件系统或网络加载。这里我们假设图片位于项目资源目录下: ```java FileInputStream imageStream = new FileInputStream("path_to_your_image.jpg"); byte[] ...
POI支持更广泛的Excel特性,如样式、图表、图片、公式等,并且兼容Excel 97到2016的版本。 使用POI操作Excel的基本步骤与JXL类似,但POI的API更为复杂和强大: 1. 引入POI库的依赖。 2. 创建`Workbook`对象,可以...
本篇文章将详细探讨POI操作Excel的各种方法,包括导出和导入数据、合并单元格以及插入图片。 1. **Excel导出**: - 使用Apache POI创建新的Excel工作簿(XSSFWorkbook或HSSFWorkbook,取决于你处理的是.xlsx还是....
Apache POI 是一个开源项目,专门用于处理 Microsoft Office 格式的文件,如 Word、Excel 和 PowerPoint。在这个"利用POI解析excel并存入数据库demo"中,我们将关注如何使用 POI 库来读取 Excel 文件,并将数据有效...