`

poi3.6 读写excel 操作

    博客分类:
  • java
阅读更多

Apache POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目.

下载地址:http://poi.apache.org/download.html

 

解压包把所有相关jar拷到项目lib下面.

 

操作excel表的方法如下:

 

 

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


/**
 * @author      zhanjun
 * @date        2010-9-25
 * @version     1.0
 * @description  POI  excel操作工具类
 * 
 */
public class POIExcelUtil {
	public static void main(String[] args) throws IOException {

		//List<Map<String, String>> listmap =ExcelUtil.readExcelFile("D:\\OrderFinish99.xls", 0);
		List<Map<String, String>> listmap = POIExcelUtil.readExcelFile("C:\\bi\\test.xls", 0);
		//	List<Map<String, String>> listmap = ExcelUtil.readExcelFile("D:\\OrderFinish88.xlsx", 0);
		//	List<Map<String, String>> listmap = ExcelUtil.readExcel("D:\\88.xls", 0);
		for (Map<String, String> map : listmap) {
			System.out.println(map.get("0") + "-  " + map.get("1") + " - " + map.get("2"));
		}



		List<Map<String, String>> listmap1 = new ArrayList();
		Map mp1 = new HashMap();
		mp1.put("0", "今年");
		mp1.put("1", "18");

		Map mp11 = new HashMap();
		mp11.put("0", "明22年");
		mp11.put("1", "1911");
		listmap1.add(mp1);
		listmap1.add(mp11);

		String[] header = new String[] { "姓名", "年龄" };
		
		String[] header2 = new String[] { "姓名2", "年龄3" };
		
		Workbook wb = writeExcelFile(null, "sheet1", "d:\\ds.xls", header, listmap1);
		wb = writeExcelFile(wb, "sheet2", "d:\\ds.xls", header2, listmap1);//2003支持多sheet的建立

		Workbook wb2 = writeExcelFile(null, "sheet1", "D:/ds1.xlsx", header, listmap1); // wb2 =
		wb2=writeExcelFile(wb2, "sheet1", "D:/ds1.xlsx", header2, listmap1);//2007不支持多sheet的建立

	}



	/**
	 * 获取sheet表中的数据
	 * @param sheet
	 * @return map 格式以0.1.2....列标做为key
	 */
	private static List<Map<String, String>> getData(Sheet sheet) {

		List<Map<String, String>> ls = new ArrayList<Map<String, String>>();

		/*
		 * Pattern pattern = Pattern.compile("([\\d]+)"); Matcher matcher;
		 */

		Iterator<Row> rit = sheet.iterator();
		if (rit.hasNext()) {
			rit.next();//过滤第一行
		}

		Map<String, String> lineMap = null;

		while (rit.hasNext()) {
			Row row = rit.next();

			lineMap = new ConcurrentHashMap<String, String>(); // 用于接收每列的数据。

			for (int i = 0; i <= row.getLastCellNum(); i++) {
				Cell cell = row.getCell(i);

				String k = ""; // 用于接收每个单元格的数据。
				if (cell == null) {
					lineMap.put(String.valueOf((i)), k); // 赋值。
					continue;
				}
				switch (cell.getCellType()) {
				case Cell.CELL_TYPE_BLANK:
					k = "";
					break;
				case Cell.CELL_TYPE_ERROR:
					k = Byte.toString(cell.getErrorCellValue());
					break;
				case Cell.CELL_TYPE_STRING:
					k = cell.getRichStringCellValue().getString();
					break;
				case Cell.CELL_TYPE_NUMERIC:
					if (DateUtil.isCellDateFormatted(cell)) {
						SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
						k = sdf.format(cell.getDateCellValue());
					} else {
						k = Integer.toString((int) cell.getNumericCellValue());
					}
					break;
				case Cell.CELL_TYPE_BOOLEAN:
					k = Boolean.toString(cell.getBooleanCellValue());
					break;
				case Cell.CELL_TYPE_FORMULA:
					k = cell.getCellFormula();
					break;
				default:
					k = "";
				}
				if ((k != null) && (!"".equals(k))) {

					lineMap.put(String.valueOf((i)), k); // 赋值。

				} else {
					lineMap.put(String.valueOf((i)), ""); // 赋值。
				}

			}

			if (!lineMap.isEmpty()) { // 判断是不是为空

				ls.add(lineMap);

			}

		}

		return ls;

	}

	/**
	 * 读取excel文件,可以是2003,2007 
	 * @param filePath
	 * @param sheetNum
	 * @return
	 */
	public static List<Map<String, String>> readExcelFile(String filePath, int sheetNum) {

		InputStream ins = null;
		Workbook book = null;
		List<Map<String, String>> list = null;
		try {
			ins = new FileInputStream(filePath);
			book = WorkbookFactory.create(ins);
			list = getData(book.getSheetAt(sheetNum));
			ins.close();

		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		} catch (InvalidFormatException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ins != null) {
				try {
					ins.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return list;
	}

	/**
	 * 
	 * 写excel 文件
	 * 
	 * @param filePath
	 *            文件路径
	 * 
	 * @param sheetNum
	 *            活动的sheet编号,编号从0开始
	 * 
	 * @return
	 */

	public static Workbook writeExcelFile(Workbook wb, String sheetName, String filePath, String[] header,
			List<Map<String, String>> sdata) {

		try {

			if (filePath.endsWith("xls")) {
				if (wb == null) {
					wb = new HSSFWorkbook();
				}
			} else if (filePath.endsWith("xlsx")) {
				if (wb == null) {
					wb = new XSSFWorkbook();
				}
			}
			
				Sheet sheet = wb.createSheet(sheetName);
			

			Row row = sheet.createRow(0);
			for (short i = 0; i < header.length; i++) {
				Cell cell = row.createCell(i);
				// cell.setEncoding(HSSFCell.ENCODING_UTF_16);
				cell.setCellValue(header[i]);
			}
			for (int j = 0; j < sdata.size(); j++) {
				Row rows = sheet.createRow(j + 1);
				Map mp = sdata.get(j);
				for (short index = 0; index < mp.size(); index++) {
					Cell cell = rows.createCell(index);

					// cell.setEncoding(HSSFCell.ENCODING_UTF_16);
					cell.setCellValue(mp.get(index + "").toString());
				}

			}

			OutputStream fileOut = new FileOutputStream(filePath);
			wb.write(fileOut);
			fileOut.close();

		} catch (FileNotFoundException e) {

			e.printStackTrace();

		} catch (Exception e) {

			e.printStackTrace();

		}

		return wb;

	}

	/**
	 * 
	 * 写excel 2007 文件
	 * 
	 * @param filePath
	 *            文件路径
	 * 
	 * @param sheetNum
	 *            活动的sheet编号,编号从0开始
	 * 
	 * @return
	 */

	public static XSSFWorkbook writeXSSFWorkbook(XSSFWorkbook wb, String sheetName, String[] header,
			List<Map<String, String>> sdata) {

		try {

			if (wb == null) {
				wb = new XSSFWorkbook();
			}
			//	CreationHelper createHelper = wb.getCreationHelper();
			
			Sheet sheet = wb.createSheet(sheetName);

			Row row = sheet.createRow(0);
			for (short i = 0; i < header.length; i++) {
				Cell cell = row.createCell(i);

				cell.setCellValue(header[i]);
			}
			for (int j = 0; j < sdata.size(); j++) {
				Row rows = sheet.createRow(j + 1);
				Map mp = sdata.get(j);
				for (short index = 0; index < mp.size(); index++) {
					Cell cell = rows.createCell(index);

					if (mp.get(index + "") != null)
						cell.setCellValue(mp.get(index + "").toString());
					else
						cell.setCellValue("");
				}

			}

			/*
			 * FileOutputStream fileOut = new FileOutputStream(filePath);
			 * wb.write(fileOut); fileOut.close();
			 */

		} catch (Exception e) {

			e.printStackTrace();

		}

		return wb;

	}

	/**
	 * 
	 * 写excel 97-2003
	 * 
	 * @param filePath
	 *            文件路径
	 * 
	 * @param sheetNum
	 *            活动的sheet编号,编号从0开始
	 * 
	 * @return
	 */

	public static HSSFWorkbook writeHSSFWorkbook(HSSFWorkbook wb, String sheetName, String[] header,
			List<Map<String, String>> sdata) {

		try {

			if (wb == null) {
				wb = new HSSFWorkbook();
			}
			//CreationHelper createHelper = wb.getCreationHelper();
			Sheet sheet = wb.createSheet(sheetName);

			Row row = sheet.createRow(0);
			for (short i = 0; i < header.length; i++) {
				Cell cell = row.createCell(i);

				cell.setCellValue(header[i]);
			}
			for (int j = 0; j < sdata.size(); j++) {
				Row rows = sheet.createRow(j + 1);
				Map mp = sdata.get(j);
				for (short index = 0; index < mp.size(); index++) {
					Cell cell = rows.createCell(index);

					if (mp.get(index + "") != null)
						cell.setCellValue(mp.get(index + "").toString());
					else
						cell.setCellValue("");
				}

			}

			/*
			 * FileOutputStream fileOut = new FileOutputStream(filePath);
			 * wb.write(fileOut); fileOut.close();
			 */

		} catch (Exception e) {

			e.printStackTrace();

		}

		return wb;

	}
}

分享到:
评论
2 楼 四个石头 2011-04-18  
1 楼 dongbiying 2011-03-11  
有相应的 jar 吗!给我个呗! QQ:  892966225

相关推荐

    poi3.7 poi3.6解析excel2007全jar包

    "poi3.7 poi3.6解析excel2007全jar包"指的是包含了Apache POI 3.7和3.6版本中用于解析Excel 2007 (.xlsx)文件的所有必需的JAR库。 Apache POI 3.6 和 3.7 版本之间的主要区别可能在于修复了一些已知的bug,增加了新...

    poi3.9读写excel兼容03和07版本

    "poi3.9读写excel兼容03和07版本"这个标题指的是使用Apache POI 3.9版本的API,能够兼容两种不同格式的Excel文件:.xls(Excel 2003及更早版本)和.xlsx(Excel 2007及更高版本)。 在描述中提到的"完美修订版本...

    poi3.6_docs(English)

    "poi3.6_docs(English)"是针对Apache POI 3.6版本的英文官方帮助文档,它包含了详细的API参考、用户指南和示例代码,帮助开发者更好地理解和使用这个强大的工具。 1. **API参考**:这部分文档详细介绍了POI提供的各...

    POI-3.6 解析Excel(2003\2010)的jar集合

    3. **解析Excel**: POI 提供了两种主要的接口,`HSSFWorkbook` 和 `XSSFWorkbook`,分别用于读写Excel 2003(.xls)和2007以上(.xlsx)的文件。这两个类提供了创建、修改和读取工作簿、工作表、单元格、样式等的...

    poi操作总结 内附详细流程及poi-3.6.jar

    在本文中,我们将深入探讨如何使用Apache POI(POI-3.6.jar版本)来实现Excel的导入和导出功能。这是一项关键技能,尤其是在数据处理和报告生成的场景中。 **1. POI基础** Apache POI提供了HSSF和XSSF两个API,...

    poi-3.6开发包

    8. **兼容性**: 虽然POI 3.6是较早的版本,但它仍然支持基本的读写操作,适用于许多应用场景。然而,对于较新的Office文件特性或修复已知问题,建议升级到最新版本的POI。 在实际开发中,你可以通过Maven或Gradle将...

    POI最新最全JAR包3.6版

    根据开发者,相比先前版本,POI3.6在处理电子表格数据时可以节省200%内存消耗。主要的更改如下:一个ooxml-schemas-1.0.jar轻型版本,在二进制发行包中这个jar文件替换了之前大的ooxml-schemas-1.0.jar,以及...

    poi-bin-3.6-20091214

    Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel(.xls、.xlsx)、Word(.doc、.docx)等。"poi-bin-3.6-20091214"是Apache POI 3.6版本的二进制发行版,发布于2009年12月14日。这个版本包含...

    java语言调用Excel文件包:poi-3.6-20091214.jar

    总的来说,Apache POI是Java开发者处理Excel文件的强大工具,它使得在Java应用程序中读写Excel数据变得轻松易行。不过,由于版本限制,对于现代的Excel文件格式和特性,更现代的POI版本会更有优势。

    poi-3.6-20091214.jar

    标题中的"poi-3.6-20091214.jar"是一个Apache POI项目的版本号,它是Java平台上处理Microsoft Office格式文档的一个库,主要用于读写Excel(.xls)文件。Apache POI是一个开源项目,允许开发者使用Java来创建、修改...

    poi-3.6-contribtchpad-scra三包

    总的来说,Apache POI 3.6版的这三个组件为Java开发者提供了一个强大的工具集,让他们无需依赖微软Office软件,也能在程序中轻松地进行Office文档操作。通过这个“三包”组合,开发者可以处理Excel、Word和...

    poi_3.6 all rar

    Apache POI通常用于读写Word文档的`.doc`和`.docx`格式,通过其提供的API,开发者可以进行文本插入、格式设置、页眉页脚编辑等复杂操作。 在提供的压缩包子文件列表中,我们可以看到以下组件: 1. `poi-ooxml-...

    poi jxl 生成EXCEL 报表

    虽然POI功能更强大,但JXL在某些场景下可能更易于使用,尤其是对于简单的Excel操作。 - 创建Workbook实例,读取或新建Excel文件。 - 创建Sheet对象,对应Excel的工作表。 - 在Sheet上创建Row和Cell,填充数据。...

    POI Excel官方源码及文档及实例

    总结,Apache POI 提供了一整套工具来处理Excel文件,无论是简单的数据读写还是复杂的格式和公式操作,都能得心应手。结合官方源码、文档和实例,开发者可以系统地学习并掌握这一强大的Java库,从而在实际项目中发挥...

    使用poi替换word中的文字和图片实现打印

    在IT行业中,Apache POI是一个流行的Java库,用于读写Microsoft Office格式的文件,包括Word(.doc/.docx)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。本示例将深入探讨如何使用Apache POI库来替换Word文档...

    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.6-20091214.jar commons-logging-1.1.jar junit-3.8.1.jar log4j-1.2.13.jar

    由于没有具体的文件内容,我们只能猜测它与Apache POI库一起使用,可能是为了演示如何使用POI来读写Excel文件,进行数据处理或分析。 综合这些信息,我们可以得出以下知识点: 1. Apache POI:用于处理Microsoft ...

    java处理Excell Apache POI

    确保在项目中正确引入Apache POI的JAR包,例如`Apache POI3.6.jar`,这样你就可以在Java代码中使用它的API了。开发过程中,记得处理异常,例如`FileNotFoundException`, `IOException`等,确保程序的健壮性。 总之...

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

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

Global site tag (gtag.js) - Google Analytics