`
ybhuxiao
  • 浏览: 189847 次
  • 性别: 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
分享到:
评论

相关推荐

    Apache poi - java对Office操作

    Apache poi 是Apache在java与Office相关文档进行交互操作的一个开源包 可以轻松的能过java与word或excel进行操作

    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 ...

    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 ...

    Apache POI -3.7下载

    Apache POI -3.7下载 POI3.7用于处理word.POI3.7用于处理word、excel、ppt等文档操作

    apache poi-3.15包

    Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。用它可以使用Java读取和创建,修改MS Excel文件....Apache POI 提供Java操作Excel解决方案。

    java实现poi 在线预览,excel,word直接在页面显示,附带文件上传,多文件上传

    &lt;groupId&gt;org.apache.poi &lt;artifactId&gt;poi &lt;version&gt;3.17 &lt;groupId&gt;org.apache.poi &lt;artifactId&gt;poi-examples &lt;version&gt;3.17 &lt;groupId&gt;org.apache.poi &lt;artifactId&gt;poi-excelant &lt;version&gt;3.17 ...

    JAVA poi-4.1.2 完整包

    JAVA poi-4.1.2 完整包,操作excel,word,ppt必备。Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

    Apache POI For Java Excel

    Apache POI For Java Excel.doc

    poi-3.7 三个主要包

    poi 3.7 java导出excel表格 描述来自http://poi.apache.org Apache POI - 文本提取 概述 多年以来,Apache POI已经为所有项目支持的文件格式提供了基本的文本提取。另外,除了(简单)文本之外,这些文件还提供对与...

    apache POI文件读写excel

    apache POI,文件读写 ,excel 对于使用apache poi 解析微软excel的一些文件

    poi-3.9.jar

    用poi解析excel时报如标题错误:java.lang.NoClassDefFoundError: org/apache/poi/ss/formula/udf/UDFFinder,根据提示找到代码,指向工具类中 book = new XSSFWorkbook(inputStream); 发现类没有定义,估计是jar包...

    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需要的jar包.zip

    poi-4.1.2需要的jar包,需要使用的朋友可以直接用,从maven库整理出来的。

    java处理excel库,poi-bin-4.1.0-20190412

    ava解析Excel(兼容2003及2007):解析2003及以下使用HSSFWorkbook类, 解析2007及以上使用XSSFWorkbook, 如果解析类与excel版本不对应,抛出相应的异常,例如HSSFWorkbook解析2007: org.apache.poi.poifs....

    Apache POI导入和导出Excel文件.

    Apache POI导入和导出Excel文件

    Apache POI :Java对Office操作.rar

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能。 结构: HSSF - 提供读写Microsoft Excel格式档案的功能。 XSSF - 提供读写Microsoft Excel ...

    Apache POI HSSF读写Excel

    自己花了几天时间写的基于Apache POI的Java 读取excel文件,功能还是比较齐全

    poi apache-poi导入实例 导入excel表格数据

    poi apache-poi导入实例 导入excel 利用java的apache-poi读取每一行每一列,导入excel数据,两个for循环出来的[ ][ ] 承装数据

    apache.poi-3.2

    java apache.poi包容易操作word文档,excel文档等。

    Apache POI导入数据到Excel电子表格

    Poi强大的操作技术方便了我们开发,Apache POI导入数据到Excel电子表格

Global site tag (gtag.js) - Google Analytics