- 浏览: 56471 次
- 性别:
- 来自: 北京
文章分类
最新评论
官网上下载最新poi版本
http://poi.apache.org/download.html
// 测试工具
//实现类
http://poi.apache.org/download.html
// 测试工具
public class Test { public static void main(String[] args) throws Exception { FileUtil util = new ExcelHandleUtil();//创建文件工具对象FileUtil List<Object> studentList = new ArrayList<Object>(); Student t = new Student(); t.setId(1001); t.setName("luxi"); t.setDiscript("dddddddddd"); studentList.add(t);//创建写入对象集合 util.exportFile(studentList,"F:\\2013wirte.xls","aaa");//调用方法 util.parseFile(new File("F:\\2013wirte.xls"),0, new ReadExcelCallback()); } }
//实现类
package cn.magicbeans.java.excel; import java.beans.PropertyDescriptor; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.DataFormatter; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.Font; 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.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelHandleUtil implements FileUtil{ private boolean invalid = true; public void setInvalid(boolean invalid) { this.invalid = invalid; } /** * 解析文件方法 * * @param file * 文件流 * @param sheetNum * 文件页 * @param callback * 回调函数 */ public void parseFile(File file, int sheetNum, OnExcelContentCallback callback) { String ExtensionName = getExtensionName(file.getPath().toString()); if (ExtensionName.equalsIgnoreCase("xls")) { parse2003(file, sheetNum, callback); } else if (ExtensionName.equalsIgnoreCase("xlsx")) { parse2007(file, sheetNum, callback); } } /** * 写入文件方法 * * @param list * 对象集合 * @param path * 存储路径 * @param sheetNum * 文件页 */ @Override public void exportFile(List<Object> list,String path, String sheetNum) throws Exception { String ExtensionName = getExtensionName(path); if (ExtensionName.equalsIgnoreCase("xls")) { exportExcel2003(list,path, sheetNum); } else if (ExtensionName.equalsIgnoreCase("xlsx")) { exportExcel2007(list,path, sheetNum); } } /** * 写入2007版本文件 * @param list对象集合 * @param path存储路径 * @param sheetName页名 * @throws Exception */ public static void exportExcel2007(List<Object> list,String path,String sheetName) throws Exception { // 创建excel文件对象 XSSFWorkbook wb = new XSSFWorkbook(); // 创建一个张表 XSSFSheet sheet = wb.createSheet(sheetName==null?"sheet1":sheetName); // 创建第一行 XSSFRow row1 = sheet.createRow(0); Font font = createFonts(wb, Font.BOLDWEIGHT_NORMAL, "宋体", false,(short) 200); // 给第一行 Field[] fields = list.get(0).getClass().getDeclaredFields(); for(int j=0;j<fields.length;j++){ Field field = fields[j]; createXSSFCell(wb, row1, j, field.getName(), font); } // 表示第二行 int l = 1; // 这里将学员的信心存入到表格中 for (int i = 0; i < list.size(); i++) { // 创建二行 XSSFRow rowData = sheet.createRow(l++); Object obj =list.get(i); for(int j=0;j<fields.length;j++){ Field field = fields[j]; PropertyDescriptor pd = new PropertyDescriptor(field.getName(), obj.getClass()); Method getMethod = pd.getReadMethod();// 获得get方法 Object o = getMethod.invoke(obj);// 执行get方法返回一个Object createXSSFCell(wb, rowData, j, o.toString(), font); } } FileOutputStream os = new FileOutputStream(path); wb.write(os); os.close(); } /** * 写入2003版本文件 * @param list对象集合 * @param path存储路径 * @param sheetName页名 * @throws Exception */ public static void exportExcel2003(List<Object> list,String path,String sheetName) throws Exception { // 创建excel文件对象 HSSFWorkbook wb = new HSSFWorkbook(); // 创建一个张表 Sheet sheet = wb.createSheet(sheetName==null?"sheet1":sheetName); // 创建第一行 Row row1 = sheet.createRow(0); Font font = createFonts(wb, Font.BOLDWEIGHT_NORMAL, "宋体", false,(short) 200); // 给第一行 Field[] fields = list.get(0).getClass().getDeclaredFields(); for(int j=0;j<fields.length;j++){ Field field = fields[j]; createCell(wb, row1, j, field.getName(), font); } // 表示第二行 int l = 1; // 这里将学员的信心存入到表格中 for (int i = 0; i < list.size(); i++) { // 创建二行 Row rowData = sheet.createRow(l++); Object obj =list.get(i); for(int j=0;j<fields.length;j++){ Field field = fields[j]; PropertyDescriptor pd = new PropertyDescriptor(field.getName(), obj.getClass()); Method getMethod = pd.getReadMethod();// 获得get方法 Object o = getMethod.invoke(obj);// 执行get方法返回一个Object createCell(wb, rowData, j, o.toString(), font); } } FileOutputStream os = new FileOutputStream(path); wb.write(os); os.close(); } /** * 创建单元格并设置样式,值 * * @param wb * @param row * @param column * @param * @param * @param value */ public static void createXSSFCell(XSSFWorkbook wb, XSSFRow row, int column, String value, Font font) { XSSFCell cell = row.createCell(column); cell.setCellValue(value); CellStyle cellStyle = wb.createCellStyle(); cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_BOTTOM); cellStyle.setFont(font); cell.setCellStyle(cellStyle); } /** * 创建单元格并设置样式,值 * * @param wb * @param row * @param column * @param * @param * @param value */ public static void createCell(Workbook wb, Row row, int column, String value, Font font) { Cell cell = row.createCell(column); cell.setCellValue(value); CellStyle cellStyle = wb.createCellStyle(); cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_BOTTOM); cellStyle.setFont(font); cell.setCellStyle(cellStyle); } /** * 设置字体 * * @param wb * @return */ public static Font createFonts(Workbook wb, short bold, String fontName, boolean isItalic, short hight) { Font font = wb.createFont(); font.setFontName(fontName); font.setBoldweight(bold); font.setItalic(isItalic); font.setFontHeight(hight); return font; } /** * 解析2007excle文件 * * @param file * 文件流 * @param sheetNum * 文件页 * @param callback * 回调函数 */ public void parse2007(File file, int sheetNum, OnExcelContentCallback callback) { if (file == null || !file.exists()) { if (callback != null) { callback.onStop(); } return; } FileInputStream fis = null; if (callback != null) { callback.onStart(); } try { fis = new FileInputStream(file); XSSFWorkbook xwb = new XSSFWorkbook(fis); // 构造 XSSFWorkbook XSSFSheet sheet = xwb.getSheetAt(sheetNum); // 读取第一章表格内容 // 定义 row、cell XSSFRow row; // 循环输出表格中的从第二行开始内容 for (int i = sheet.getFirstRowNum(); i <= sheet .getPhysicalNumberOfRows(); i++) { row = sheet.getRow(i); if (row != null) { for (int j = row.getFirstCellNum(); j <= row .getPhysicalNumberOfCells(); j++) { XSSFCell cell = row.getCell(j); if (cell != null) { String cellValue = null; if (cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) { if (DateUtil.isCellDateFormatted(cell)) { cellValue = new DataFormatter() .formatRawCellContents( cell.getNumericCellValue(), 0, "yyyy-MM-dd HH:mm:ss"); } else { cellValue = String.valueOf(cell .getNumericCellValue()); } } else { cellValue = cell.toString(); } if (callback != null) { callback.onContent(i, j, cellValue); } } } } } } catch (IOException e) { e.printStackTrace(); } finally { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } if (callback != null) { callback.onStop(); } } /** * 解析2003excle文件 * * @param file * 文件流 * @param sheetNum * 文件页 * @param callback * 回调函数 */ public void parse2003(File file, int sheetNum, OnExcelContentCallback callback) { // /解析Excel // 返回结果集 if (file == null || !file.exists()) { if (callback != null) { callback.onStop(); } return; } FileInputStream fis = null; try { fis = new FileInputStream(file); if (callback != null) { callback.onStart(); } HSSFWorkbook wookbook = new HSSFWorkbook(fis); // 创建对Excel工作簿文件的引用 HSSFSheet sheet = wookbook.getSheetAt(sheetNum); // 在Excel文档中,第一张工作表的缺省索引是0 int rows = sheet.getPhysicalNumberOfRows(); // 获取到Excel文件中的所有行数; // 遍历行­(第1行 表头) 准备Map里的key HSSFRow firstRow = sheet.getRow(0); int cells = firstRow.getPhysicalNumberOfCells(); // 遍历行­(从第二行开始) for (int i = 0; i < rows; i++) { // 读取左上端单元格(从第二行开始) HSSFRow row = sheet.getRow(i); // 行不为空 if (row != null) { for (int num = 0; num <= cells; num++) { HSSFCell cell = row.getCell(num); if (!invalid) { return; } String content = null; if (null != cell) { content = getCellValue(cell); } if (callback != null) { callback.onContent(i, num, content); } } } } } catch (IOException e) { e.printStackTrace(); } finally { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } if (callback != null) { callback.onStop(); } } public static String getCellValue(HSSFCell cell) { DecimalFormat df = new DecimalFormat("#.#####"); String cellValue = null; if (cell == null) return null; switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) { SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); cellValue = sdf.format(HSSFDateUtil.getJavaDate(cell .getNumericCellValue())); break; } cellValue = df.format(cell.getNumericCellValue()); break; case HSSFCell.CELL_TYPE_STRING: cellValue = String.valueOf(cell.getStringCellValue()); break; case HSSFCell.CELL_TYPE_FORMULA: cellValue = String.valueOf(cell.getCellFormula()); break; case HSSFCell.CELL_TYPE_BLANK: cellValue = null; break; case HSSFCell.CELL_TYPE_BOOLEAN: cellValue = String.valueOf(cell.getBooleanCellValue()); break; case HSSFCell.CELL_TYPE_ERROR: cellValue = String.valueOf(cell.getErrorCellValue()); break; } if (cellValue != null && cellValue.trim().length() <= 0) { cellValue = null; } return cellValue; } /** * 文件操作 获取文件扩展名 * * @Author: sunny * @param filename * 文件名称包含扩展名 * @return */ public static String getExtensionName(String filename) { if ((filename != null) && (filename.length() > 0)) { int dot = filename.lastIndexOf('.'); if ((dot > -1) && (dot < (filename.length() - 1))) { return filename.substring(dot + 1); } } return filename; } }
相关推荐
要实现"利用POI读取excel写入到word",我们需要以下步骤: 1. **准备环境**:首先,确保你的项目已经引入了Apache POI的依赖。在给定的压缩包中,"poi - 副本"可能是包含POI库的JAR文件,你需要将其添加到你的项目...
使用poi解析excel文件,并将数据写入到数据库 项目说明 这个项目实现的功能是读取excel文件中的数据,解析并写入数据库。 读取的excel文件位于项目目录下的 excel\0805.xlsx 使用IntelliJ IDEA开发此项目 使用MYSQL...
使用poi读取写入复杂excel内容包括样式,工具类
1、POI_EXCEL包下分别有两个类,一个是读取excel内容,一个是想excel写入内容 2、cn.itcast包下的所有包,是为了实现从excel写入到数据库中,和从数据库写入到excel中 注意事项: 1、需要导入maven工程 2、使用...
在这个场景中,我们关注的是如何使用POI来创建、读取和操作Excel文档。在Web项目中,这种功能通常用于数据导入导出,报表生成,或者任何需要与用户交换表格数据的场景。 **POI生成Excel** 生成Excel文件主要涉及...
本文将详细介绍如何在Android中实现Excel文件的读取与写入。 首先,Android系统本身并不直接支持Excel文件的操作,因此我们需要引入第三方库来实现这一功能。常用的库有Apache POI,这是一个用于处理Microsoft ...
HPSF(POI OLE 2 Property Set Facility)是POI的一部分,用于读取和写入OLE 2复合文档的属性,包括Excel文件的元数据。这可以帮助获取如作者、创建日期等信息。 七、文档摘要信息 文档摘要信息通常包含在文档的元...
Java POI库是Apache软件...总的来说,Java结合Apache POI库提供了强大的Excel处理能力,无论是读取、写入还是进行复杂的格式设置,都能轻松应对。这份源码整理资源对于Java开发者来说,是学习和工作中不可或缺的工具。
POI处理excel文件,主要包括Excel的读取、写入,各种数据格式处理、单元格合并、注释、下拉列表及单元格的边框、背景色、宽度调整等。
在Java编程环境中,Apache POI库是用于读取和写入Microsoft Office格式文件的强大工具,特别是Excel(.xlsx和.xls)文件。标题提到的“poi读取Excel用到的jar包”指的是在Java项目中使用POI库进行Excel操作所需引入...
在Java开发中,Apache POI库提供了API来读取、写入和操作Excel文件。读取Excel文件时,主要涉及到的工作包括打开工作簿、选择工作表、读取单元格数据等。例如,可以使用以下代码片段打开一个Excel文件: ```java ...
在Java编程环境中,Apache POI库是一个非常重要的工具,它允许开发者读取、写入以及修改...总的来说,Apache POI是Java处理Excel文件的强大工具,通过合理利用提供的库和源码示例,可以有效地读取和操作Excel数据。
JXL和Apache POI是两个广泛使用的库,分别提供了对Excel文件的读取和生成的支持。本篇文章将深入探讨这两个库的使用方法及其特点。 首先,JXL是一个Java API,主要用于读写Excel 97-2003格式的工作簿,即.xls文件。...
Apache POI 是一个开源项目,专门用于处理 Microsoft Office 格式的文件,如 Word、Excel 和 PowerPoint。在这个"利用POI解析excel并存入数据库demo"中,我们将关注如何使用 POI 库来读取 Excel 文件,并将数据有效...
利用Apache POI库能够实现这一功能,即可以通过Java程序操作Excel文件,包括读取、写入、以及处理Excel中的公式。 #### 二、关键技术点 1. **POI库简介**: - Apache POI是Apache软件基金会的Jakarta项目中的一个...
以上就是关于如何使用Apache POI的SXSSF API解决读取Excel 2007文件时内存溢出问题的关键知识点。通过这种方式,我们可以处理大文件而不会过度消耗内存,从而提高程序的稳定性和效率。在实际项目中,需要根据具体...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel、Word和PowerPoint等。在本文中,我们将深入探讨如何使用POI进行Excel的读写操作,并进行总结。 1. POI基本概念 Apache POI 提供了...
它支持读取、写入和修改Excel文件,但不支持较新的.xlsx格式。由于它的轻量级特性,对于只需要处理.xls文件的Android应用来说,jxl.jar可能是一个不错的选择。 2. **aa-poi-3.10-min-0.1.5.jar**: 这个文件是Apache...
在Java环境中,如果你需要使用POI库来读取、写入或操作Excel文件,你需要确保你的项目中包含了正确的JAR文件。在这个场景中,你提到的几个JAR文件都是Apache POI的不同版本和组件: 1. **poi-3.8.jar**:这是Apache...
在Java开发中,Apache POI库是一个非常实用的工具,用于读取和写入Microsoft Office格式的文件,包括Excel。本篇文章将详细讲解如何利用Apache POI库在Android环境中高效地处理大数据量的Excel文件,无论是2003的....