`
ybhuxiao
  • 浏览: 193248 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Apache POI - Java操作Excel

    博客分类:
  • java
阅读更多
★、POI中很多组件并不是都能用上,根据需要选择自己需要的,我这里用到的就是SS(HSSF+XSSF)了,分别针对xls和xlsx,一般应该用HSSF就ok了,还是用office2003的人多一些



★、用的包大多数这个路径下的org.apache.poi.ss.usermodel

★、poi-examples-3.6-20091214.jar这个文件里面有例子,可以做个参照



★、如果处理的文件可能是xls也可能是xlsx的,怎么办?
方法1:处理前判断,然后分别用不同的方法去处理
方法2:使用接口操作,输出文件的时候,根据类型保存
    //save workbook
    String file = "picture.xls";
    if(wb instanceof XSSFWorkbook) file += "x";
    FileOutputStream fileOut = new FileOutputStream(file);
    wb.write(fileOut);
    fileOut.close();



★、参考网址:
http://poi.apache.org/
http://poi.apache.org/spreadsheet/quick-guide.html
http://developers.sun.com.cn/blog/functionalca/entry/java读写excel简介




★、写个demo,ExcelUtil.java
package core.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.junit.Test;

import core.dao.DaoImpl;

/**
 * Description: <br>
 * 2010-4-16
 * 
 * @author huxiao kskr@qq.com
 */
public class ExcelUtil {

	private static final String filepath = "F:/job/workspace_huxiao_new/_testpoi/src/test/file/workbook.xls";

	/**
	 * description: 把一个List生成为Excel<br>
	 * 
	 * @param linkedList
	 * @param file
	 *            2010-4-16
	 * @author huxiao kskr@qq.com
	 */
	public static void list2excel(List<Map<String, String>> list, List<String> keyList, File file) {
		List<LinkedHashMap<String, String>> linkedList = new ArrayList<LinkedHashMap<String, String>>();
		for (Map<String, String> map : list) {
			LinkedHashMap<String, String> tmpMap = new LinkedHashMap<String, String>();
			for (String key : keyList) {
				tmpMap.put(key, map.get(key));
			}
			linkedList.add(tmpMap);
		}

		if (!file.isDirectory()) {
			file.getParentFile().mkdirs();
		}
		Workbook wb = new HSSFWorkbook();
		Sheet sheet = wb.createSheet("Sheet1");

		for (int i = 0; i < linkedList.size(); i++) {
			Row row = sheet.createRow(i);
			Map<String, String> map = linkedList.get(i);
			int column = 1;
			for (String key : map.keySet()) {
				Cell cell = row.createCell(column++);
				cell.setCellValue(map.get(key));
			}
		}
		try {
			FileOutputStream fileOut = new FileOutputStream(file);
			wb.write(fileOut);
			fileOut.close();
		} catch (Exception e) {
			System.out.println("生成文件出错");
			e.printStackTrace();
		}
	}

	/**
	 * description: 读取一个Excel文件并返回List<br>
	 * 
	 * @param keyList
	 * @param file
	 * @return 2010-4-19
	 * @author huxiao kskr@qq.com
	 */
	public static List<Map<String, String>> excel2List(List<String> keyList, File file) {
		if (!file.isFile()) {
			throw new RuntimeException(file + " 不存在");
		}
		POIFSFileSystem fs = null;
		HSSFWorkbook wb = null;
		HSSFSheet sheet = null;
		try {
			fs = new POIFSFileSystem(new FileInputStream(file));
			wb = new HSSFWorkbook(fs);
			sheet = wb.getSheetAt(0);
		} catch (IOException e) {
			System.out.println(file + "读取错误");
			e.printStackTrace();
		}
		List<Map<String, String>> resultList = new ArrayList<Map<String, String>>();
		for (Row row : sheet) {
			Map<String, String> tmpMap = new HashMap<String, String>();
			for (Cell cell : row) {
				int columnIndex = cell.getColumnIndex();
				tmpMap.put(keyList.get(columnIndex - 1), cell.getStringCellValue());
			}
			resultList.add(tmpMap);
		}
		return resultList;
	}

	

	/**
	 * description: 测试生成Excel<br>
	 * 2010-4-19
	 * 
	 * @author huxiao kskr@qq.com
	 */
	@Test
	public void testList2Excel() {
		List<Map<String, String>> list = new DaoImpl().queryForList("select * from user");

		// 因为hashmap是无序的,所以在这里自定义key的顺序,根据这个keyList把hashMap转成LinkedHashMap再循环
		// 当需求固定之后,可以直接写到配置文件里面,就不用手写了
		List<String> keyList = new ArrayList<String>();
		keyList.add("ID");
		keyList.add("USERNAME");
		keyList.add("PASSWORD");

		list2excel(list, keyList, new File(filepath));
	}

	/**
	 * description: 测试excel2list<br>
	 * 
	 * @param args
	 *            2010-4-19
	 * @author huxiao kskr@qq.com
	 */
	@Test
	public void testExcel2List() {
		// 取出来的时候就不必按顺序啦,但是你要制定key是什么啊,否则怎么存储到map里面呢?
		// 不用担心,实际操作的时候这个东西可以从数据库或者配置文件中获取,不用每次手写的
		List<String> keyList = new ArrayList<String>();
		keyList.add("ID");
		keyList.add("USERNAME");
		keyList.add("PASSWORD");

		List<Map<String, String>> list = excel2List(keyList, new File(filepath));
		System.out.println(list);
	}

}

  • 大小: 4.4 KB
  • 大小: 103.9 KB
0
1
分享到:
评论

相关推荐

    poi全家桶ooxml-schemas/poi/poi-examples/poi-ooxml/poi-ooxml-schemas/poi-scratchpad

    Apache POI是一个开源的Java库,专门用于读写Microsoft Office格式的文件,特别是Excel、Word和PowerPoint文档。在提供的描述中,我们看到的路径实际上是在指示Apache POI项目中的不同模块和示例代码的位置。 1. **...

    poi-3.9、poi-ooxml-3.9、poi-ooxml-schemas-3.9

    总结来说,Apache POI 是Java开发中处理Excel文件的强大工具,它提供了全面的API来操作Excel的各种特性。结合 poi-3.9.jar、poi-ooxml-3.9.jar 和 poi-ooxml-schemas-3.9.jar 这三个库,开发者可以构建出功能丰富的...

    java excel操作 poi-3.17 可用于jdk1.70

    附件是java poi 3.17的lib库及其依赖库,全部下载引用后,可以进行excel的读写操作,无需引用其他lib库。poi-3.17适用于jdk1.7。 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft ...

    poi-ooxml-schemas-3.8,poi-3.8,poi-ooxml jar包合集

    标题中的"poi-ooxml-schemas-3.8,poi-3.8,poi-ooxml jar包合集"指的是Apache POI项目中用于处理Microsoft Office格式文件的Java库,特别是针对Excel(XLS和XLSX)文档的处理。Apache POI是一个流行的开源库,允许...

    poi-3.9 apache-poi-3.9 最新稳定版本

    7. 导入导出:Apache POI提供了一套完整的API,用于将Java数据结构转换为Excel文件,或者从Excel文件中读取数据到Java对象。这使得它成为数据导入导出的强大工具,特别适用于数据分析、报表生成和自动化测试场景。 ...

    poi-java生成excel文档

    在Java开发中,Apache POI库是一个非常重要的工具,它允许程序员读取、写入和修改Microsoft Office格式的文件,包括Excel(.xlsx/.xls)。本篇将详细讲解如何使用POI库在Java中生成Excel文档。 Apache POI是开源...

    poi-3.16(Java解析Excel)

    Apache POI 是一个开源项目,专门用于处理微软...以上是关于Apache POI-3.16在Java中解析Excel的基本介绍和使用要点,通过这个库,开发者可以轻松地在Java应用程序中与Excel文件进行交互,实现数据的导入、导出和处理。

    poi-3.16.jar,poi-ooxml-3.16.jar,poi-ooxml-schemas-3.16.jar

    在Java项目中,若要使用Apache POI进行Excel操作,你需要将这三个jar文件添加到你的类路径中。以下是一个简单的示例,展示如何使用POI创建一个新的Excel工作簿: ```java import org.apache.poi.ss.usermodel.*; ...

    poi-3.9(java操作excel需要的包)

    在给定的"poi-3.9(java操作excel需要的包)"中,我们聚焦于使用Apache POI来操作Excel。以下是关于Apache POI 3.9版本及其组件的详细知识: 1. **Apache POI**: Apache POI 是一个开源项目,由Apache软件基金会维护...

    poi-bin-3.10-beta2-20130904.zip

    Apache POI - the Java API for Microsoft Documents。其中包括了开发多种应用的许多Java API: Component Application type Maven artifactId POIFS OLE2 Filesystem poi HPSF OLE2 Property Sets poi HSSF ...

    Apache poi - java对Office操作

    Apache POI是Java平台上一个非常重要的开源库,它允许开发者使用纯Java代码来创建、读取和修改Microsoft Office格式的文件,包括Word(DOC、DOCX)、Excel(XLS、XLSX)以及PowerPoint(PPT、PPTX)等。这个库广泛...

    poi的所有jar包,poi, poi-ooxml,poi-ooxml-schemas的各个版本jar

    Apache POI 是一个开源项目,专门用于...总的来说,Apache POI是Java开发中不可或缺的一个工具,它极大地拓宽了Java处理Microsoft Office文件的能力,让开发者能够在不依赖于Office软件的情况下实现文件的读写和操作。

    poi-3.12-android-a.jar和poi-ooxml-schemas-3.12-20150511-a.jar

    Apache POI是一个流行的Java库,允许程序员创建、修改和显示MS Office文件,包括Excel工作簿。这个特定的.jar文件包含了基本的功能以支持.xls格式的Excel文件操作。 poi-ooxml-schemas-3.12-20150511-a.jar: 这个库...

    poi-4.1.2-API文档-中文版.zip

    标签:apache、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    poi-3.10.1上传组件jar包 po poi-ooxml poi-ooxml-schemas

    总结来说,Apache POI 3.10.1版本的上传组件为Java开发者提供了一套强大的工具,用于处理和操作Microsoft Office的文件格式,涵盖了Excel、Word和PowerPoint的多种功能,大大提升了开发效率并扩展了应用的可能性。

    org.apache.poi-ooxml-schemas-3.9 jar包

    在Java开发中,Apache POI库是处理Excel文件的重要工具,尤其在需要进行大量数据导入导出或自动化报告生成的场景下。"org.apache.poi-ooxml-schemas-3.9.jar" 是这个项目中的一个组件,它包含了用于解析和生成Open ...

    poi-bin-5.2.2-230220312.jar

    "java excel poi"进一步明确了这个jar文件是与Java、Excel操作和Apache POI相关的。 在压缩包子文件的文件名称列表中,"poi-bin-5.2.2-20220312-excel"可能包含了示例或测试数据,帮助开发者了解如何使用Apache POI...

    apache-poi-3.17(最新稳定版本)

    Apache POI 是一个开源项目,由Apache软件基金会维护,它主要致力于处理Microsoft Office格式的文件,如Word(.doc和.docx)、Excel(.xls和.xlsx)、PowerPoint(.ppt和.pptx)等。Apache POI 提供了Java API,使得...

    java对Excel的jar包poi-3.15,poi-3.16,poi-3.17

    Java中的Apache POI库是用于处理Microsoft Office格式文件的强大工具,特别是Excel(.xls和.xlsx)文件。在Java编程环境中,POI库提供了一种高效且灵活的方式来读取、写入和修改Excel文档。在提供的压缩包中,我们有...

    poi-scratchpad-3.12-20150511和poi-3.12-20150511包

    Apache POI是一个开源项目,主要用于处理Microsoft Office格式的文件,如Word(.doc/.docx)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。在本例中,我们关注的是与处理PowerPoint文件相关的部分,即"poi-...

Global site tag (gtag.js) - Google Analytics