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;
}
}
分享到:
相关推荐
"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版本"这个标题指的是使用Apache POI 3.9版本的API,能够兼容两种不同格式的Excel文件:.xls(Excel 2003及更早版本)和.xlsx(Excel 2007及更高版本)。 在描述中提到的"完美修订版本...
"poi3.6_docs(English)"是针对Apache POI 3.6版本的英文官方帮助文档,它包含了详细的API参考、用户指南和示例代码,帮助开发者更好地理解和使用这个强大的工具。 1. **API参考**:这部分文档详细介绍了POI提供的各...
3. **解析Excel**: POI 提供了两种主要的接口,`HSSFWorkbook` 和 `XSSFWorkbook`,分别用于读写Excel 2003(.xls)和2007以上(.xlsx)的文件。这两个类提供了创建、修改和读取工作簿、工作表、单元格、样式等的...
在本文中,我们将深入探讨如何使用Apache POI(POI-3.6.jar版本)来实现Excel的导入和导出功能。这是一项关键技能,尤其是在数据处理和报告生成的场景中。 **1. POI基础** Apache POI提供了HSSF和XSSF两个API,...
8. **兼容性**: 虽然POI 3.6是较早的版本,但它仍然支持基本的读写操作,适用于许多应用场景。然而,对于较新的Office文件特性或修复已知问题,建议升级到最新版本的POI。 在实际开发中,你可以通过Maven或Gradle将...
根据开发者,相比先前版本,POI3.6在处理电子表格数据时可以节省200%内存消耗。主要的更改如下:一个ooxml-schemas-1.0.jar轻型版本,在二进制发行包中这个jar文件替换了之前大的ooxml-schemas-1.0.jar,以及...
Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel(.xls、.xlsx)、Word(.doc、.docx)等。"poi-bin-3.6-20091214"是Apache POI 3.6版本的二进制发行版,发布于2009年12月14日。这个版本包含...
总的来说,Apache POI是Java开发者处理Excel文件的强大工具,它使得在Java应用程序中读写Excel数据变得轻松易行。不过,由于版本限制,对于现代的Excel文件格式和特性,更现代的POI版本会更有优势。
标题中的"poi-3.6-20091214.jar"是一个Apache POI项目的版本号,它是Java平台上处理Microsoft Office格式文档的一个库,主要用于读写Excel(.xls)文件。Apache POI是一个开源项目,允许开发者使用Java来创建、修改...
总的来说,Apache POI 3.6版的这三个组件为Java开发者提供了一个强大的工具集,让他们无需依赖微软Office软件,也能在程序中轻松地进行Office文档操作。通过这个“三包”组合,开发者可以处理Excel、Word和...
Apache POI通常用于读写Word文档的`.doc`和`.docx`格式,通过其提供的API,开发者可以进行文本插入、格式设置、页眉页脚编辑等复杂操作。 在提供的压缩包子文件列表中,我们可以看到以下组件: 1. `poi-ooxml-...
虽然POI功能更强大,但JXL在某些场景下可能更易于使用,尤其是对于简单的Excel操作。 - 创建Workbook实例,读取或新建Excel文件。 - 创建Sheet对象,对应Excel的工作表。 - 在Sheet上创建Row和Cell,填充数据。...
总结,Apache POI 提供了一整套工具来处理Excel文件,无论是简单的数据读写还是复杂的格式和公式操作,都能得心应手。结合官方源码、文档和实例,开发者可以系统地学习并掌握这一强大的Java库,从而在实际项目中发挥...
在IT行业中,Apache POI是一个流行的Java库,用于读写Microsoft Office格式的文件,包括Word(.doc/.docx)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。本示例将深入探讨如何使用Apache POI库来替换Word文档...
在Java项目中,若要使用Apache POI进行Excel操作,你需要将这三个jar文件添加到你的类路径中。以下是一个简单的示例,展示如何使用POI创建一个新的Excel工作簿: ```java import org.apache.poi.ss.usermodel.*; ...
由于没有具体的文件内容,我们只能猜测它与Apache POI库一起使用,可能是为了演示如何使用POI来读写Excel文件,进行数据处理或分析。 综合这些信息,我们可以得出以下知识点: 1. Apache POI:用于处理Microsoft ...
确保在项目中正确引入Apache POI的JAR包,例如`Apache POI3.6.jar`,这样你就可以在Java代码中使用它的API了。开发过程中,记得处理异常,例如`FileNotFoundException`, `IOException`等,确保程序的健壮性。 总之...
Apache POI 是一个开源项目,专门用于...总的来说,Apache POI是Java开发中不可或缺的一个工具,它极大地拓宽了Java处理Microsoft Office文件的能力,让开发者能够在不依赖于Office软件的情况下实现文件的读写和操作。