以前项目中用过Excel导入导出过2003版本的,最近研究了一下能够兼容07+ 版本的操作方法。
首先下载POI的jar包,官方网站: http://jakarta.apache.org/poi/,在项目中导入jar包,如下:
下面直接上代码
1.创建Workbook工厂类
package com.songhn.poi.util; import java.io.File; import java.io.FileInputStream; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; /** * @author songhn * * 创建文档 * */ public class WorkbookFactory { private Workbook workBook = null; private String excelFilePath = null; /** * 创建文档WorkBook(读文档) * @param excelFilePath * @return * @throws Exception */ public Workbook create(String excelFilePath) throws Exception{ this.excelFilePath = excelFilePath; File file = new File(this.excelFilePath); FileInputStream fis = new FileInputStream(file); //2003版的Excel if(excelFilePath.endsWith(".xls")){ workBook = new HSSFWorkbook(fis); //2007版以后的Excel }else if(excelFilePath.endsWith(".xlsx")){ workBook = new XSSFWorkbook(fis); } return workBook; } /** * 创建文档WorkBook(写文档) * @param excelFilePath * @return * @throws Exception */ public Workbook create(String fileName , boolean flag) throws Exception{ this.excelFilePath = fileName; //2003版的Excel if(excelFilePath.endsWith(".xls")){ workBook = new HSSFWorkbook(); //2007版以后的Excel }else if(excelFilePath.endsWith(".xlsx")){ workBook = new XSSFWorkbook(); } return workBook; } }
2.导入Excel文档
/** * */ package com.songhn.poi.util; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; 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; /** * @author songhn * * 读取Excel工具类(兼容2003以及以后的版本Excel) * */ public class ExcelReadUtil { /** * 读取每一个Sheet的数据 * * @param workBook * @return */ public Map<String, Object> readSheet(Workbook workBook) { Map<String, Object> sheetMap = new HashMap<>(); int _sheetNUM = workBook.getNumberOfSheets(); for (int i = 0; i < _sheetNUM; i++) { Sheet sheet = workBook.getSheetAt(i); String sheetName = sheet.getSheetName(); List<String[]> list = null; if (null != sheet) { list = readRow(sheet); } sheetMap.put(sheetName, list); } return sheetMap; } /** * 读取每一行数据 * * @param workBook * @return */ public List<String[]> readRow(Sheet sheet) { // 获取到最后一行的的行号, 行号是从0开始的 int _rowNum = sheet.getLastRowNum(); List<String[]> list = new ArrayList<String[]>(); for (int i = 0; i <= _rowNum; i++) { Row row = sheet.getRow(i); String[] obj = null; if (null != row) { obj = readCells(row); } list.add(obj); } return list; } /** * 读取每一行的单元格数据 * * @param row * @return */ private String[] readCells(Row row) { int _cellCount = row.getPhysicalNumberOfCells(); String[] values = new String[_cellCount]; for (int i = 0; i < _cellCount; i++) { Cell cell = row.getCell(i); if (null != cell) { String value = null; switch (cell.getCellType()) { case Cell.CELL_TYPE_FORMULA: value = "" + cell.getCellFormula(); break; case Cell.CELL_TYPE_NUMERIC: // 判断是否是日期格式数据 if (DateUtil.isCellDateFormatted(cell)) { value = DateUtil.formatDate(cell.getDateCellValue(),"yyyy-MM-dd"); } else { value = "" + cell.getNumericCellValue(); } break; case Cell.CELL_TYPE_STRING: value = "" + cell.getStringCellValue(); break; case Cell.CELL_TYPE_BOOLEAN: value = "" + cell.getBooleanCellValue(); break; case Cell.CELL_TYPE_BLANK: value = ""; default: } values[i] = value; } } return values; } }
3.导出Excel文档
接口:
package com.songhn.poi.inter; import java.util.List; 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; /** * 写Excel文档 * @author songhn * */ public interface ExceWriteInter { /** * 创建Excel文档 * @param excelFilePath */ public void createExcel(Workbook workBook,List<String[]> list)throws Exception; }
2003实现:
/** * */ package com.songhn.poi.util; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.RichTextString; import org.apache.poi.ss.usermodel.Workbook; import com.songhn.poi.inter.ExceWriteInter; /** * @author songhn * */ public class ExcelWriteUtil2003 implements ExceWriteInter { @Override public void createExcel(Workbook workBook,List<String[]> list)throws Exception { HSSFSheet sheet = (HSSFSheet) workBook.createSheet(); RichTextString richString = null; Font font = null; CellStyle style = null; for (int i = 0; i < list.size(); i++) { if(i == 0){ font = workBook.createFont(); font.setFontHeightInPoints((short)24); //字体大小 font.setFontName("楷体"); font.setBoldweight(Font.BOLDWEIGHT_BOLD); //粗体 font.setColor(HSSFColor.GREEN.index); //绿字 style = workBook.createCellStyle(); style.setFont(font); String[] values = (String[])list.get(i); HSSFRow row = (HSSFRow) sheet.createRow(i); for (int j = 0; j < values.length; j++) { String string = values[j]; HSSFCell cell = row.createCell(j); richString = new HSSFRichTextString(string); cell.setCellValue(richString); cell.setCellStyle(style); } }else{ String[] values = (String[])list.get(i); HSSFRow row = (HSSFRow) sheet.createRow(i); for (int j = 0; j < values.length; j++) { String string = values[j]; HSSFCell cell = row.createCell(j); richString = new HSSFRichTextString(string); cell.setCellValue(richString); } } } } }
2007+实现:
/** * */ package com.songhn.poi.util; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.RichTextString; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRichTextString; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import com.songhn.poi.inter.ExceWriteInter; /** * @author songhn * */ public class ExcelWriteUtil2007 implements ExceWriteInter { @Override public void createExcel(Workbook workBook,List<String[]> list)throws Exception { XSSFSheet sheet = (XSSFSheet) workBook.createSheet(); RichTextString richString = null; Font font = null; CellStyle style = null; for (int i = 0; i < list.size(); i++) { //设置表头 if(i == 0){ font = workBook.createFont(); font.setFontHeightInPoints((short)12); //字体大小 font.setFontName("微软雅黑"); font.setBoldweight(Font.BOLDWEIGHT_BOLD); //粗体 font.setColor(HSSFColor.GREEN.index); //绿字 String[] values = (String[])list.get(i); XSSFRow row = (XSSFRow) sheet.createRow(i+1); style = workBook.createCellStyle(); style.setFont(font); style.setBorderBottom(CellStyle.BORDER_DOUBLE); for (int j = 0; j < values.length; j++) { String string = values[j]; XSSFCell cell = row.createCell(j+1); richString = new XSSFRichTextString(string); cell.setCellValue(richString); cell.setCellStyle(style); } }else{ font = workBook.createFont(); font.setFontHeightInPoints((short)12); //字体大小 font.setFontName("微软雅黑"); style = workBook.createCellStyle(); style.setFont(font); style.setBorderBottom(CellStyle.BORDER_THIN); String[] values = (String[])list.get(i); XSSFRow row = (XSSFRow) sheet.createRow(i+1); for (int j = 0; j < values.length; j++) { String string = values[j]; XSSFCell cell = row.createCell(j+1); richString = new XSSFRichTextString(string); cell.setCellValue(richString); cell.setCellStyle(style); } } } } }
用到的工具类:
package com.songhn.poi.util; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.ss.usermodel.Cell; /** * @author songhn * * 日期工具 */ public class DateUtil { /** * 判断是否是日期格式数据 * @param cell * @return */ public static boolean isCellDateFormatted(Cell cell){ if (HSSFDateUtil.isCellDateFormatted(cell)) { return true; } return false; } /** * 将日期格式的数据按照预定的格式进行转换 * @param date * @param formatGeshi * @return */ public static String formatDate(Date date , String formatGeshi){ SimpleDateFormat format =new SimpleDateFormat(formatGeshi); return format.format(date); } }
测试代码:
/** * */ package com.songhn.poi.test; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.poi.ss.usermodel.Workbook; import com.songhn.poi.util.ExcelReadUtil; import com.songhn.poi.util.WorkbookFactory; /** * @author songhn * */ public class ReadExcelTest { /** * @param args */ public static void main(String[] args) { String excelPath = "E:\\testExcel.xls"; WorkbookFactory factory = new WorkbookFactory(); Map map = null; try { Workbook workBook= factory.create(excelPath); ExcelReadUtil util = new ExcelReadUtil(); map = util.readSheet(workBook); } catch (Exception e) { e.printStackTrace(); } Set set = map.keySet(); for(Iterator it=set.iterator();it.hasNext();){ String key = (String)it.next(); System.out.println("Sheet名称:" + key); List<String[]> list = (List<String[]>)map.get(key); for (int i = 0; i < list.size(); i++) { String[] str = list.get(i); String obj = ""; for (int j = 0; j < str.length; j++) { obj = obj + str[j] + ","; } System.out.println("第"+(i+1)+"行:"+obj); } } } }
package com.songhn.poi.test; import java.io.File; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; import org.apache.poi.ss.usermodel.Workbook; import com.songhn.poi.inter.ExceWriteInter; import com.songhn.poi.util.ExcelWriteUtil2003; import com.songhn.poi.util.ExcelWriteUtil2007; import com.songhn.poi.util.WorkbookFactory; public class WriteExcelTest { /** * @param args */ public static void main(String[] args) { List<String[]> list = new ArrayList<String[]>(); String[] title = new String[5]; title[0] = "标题1"; title[1] = "标题2"; title[2] = "标题3"; title[3] = "标题4"; title[4] = "标题5"; list.add(title); for (int i = 1; i < 10; i++) { String[] str = new String[5]; str[0] = "张三"+i; str[1] = "李四"+i; str[2] = "王五"+i; str[3] = "赵六"+i; str[4] = "冯七"+i; list.add(str); } ExceWriteInter write = new ExcelWriteUtil2007(); String excelFilePath = "E:\\"; String excelFileName = "test.xlsx"; try { WorkbookFactory workBookFactory =new WorkbookFactory(); Workbook workbook = workBookFactory.create(excelFileName,false); write.createExcel(workbook, list); workbook.write(new FileOutputStream(new File(excelFilePath+excelFileName))); System.out.println("创建成功!!!"); } catch (Exception e) { System.out.println("创建失败!!!"); e.printStackTrace(); } } }
相关推荐
"poi3.9读写excel兼容03和07版本"这个标题指的是使用Apache POI 3.9版本的API,能够兼容两种不同格式的Excel文件:.xls(Excel 2003及更早版本)和.xlsx(Excel 2007及更高版本)。 在描述中提到的"完美修订版本...
在“poi操作excel表格导入和导出”这个主题中,我们将深入探讨如何利用Apache POI进行Excel数据的处理,包括导入和导出。 一、Apache POI简介 Apache POI是一个开源项目,它提供了API来处理Microsoft Office格式的...
Java 使用Apache POI库操作Excel 2007文件详解 在Java开发中,处理Excel文件是一项常见的任务,特别是对于数据分析、数据导入导出或报表生成等场景。Apache POI是一个流行的开源库,它允许开发者读写Microsoft ...
标题中的"java通过poi操作excel jar包"指的是使用Apache POI库来处理Excel文件的Java程序,通常需要引入特定版本的POI JAR包。在这个案例中,我们有两个版本的JAR包可供使用:poi_3.17.jar和poi_3.15.jar。这些版本...
### POI Excel知识点详解 #### 一、Jakarta POI简介与Apache POI的作用 Jakarta POI 是 Apache POI 的早期项目名称,它提供了一组 API 来...希望本文能够帮助您更好地理解和使用 Apache POI 进行 Excel 文件的操作。
在这个场景中,"POI操作Excel的封装"指的是对POI API进行的高级抽象和简化,以便于开发人员更方便地处理Excel文件。通过反射和约定,可以创建一个易于使用的API,隐藏底层复杂的POI细节。 反射是Java编程语言中的一...
在Java环境中,使用POI库可以方便地读取、写入和操作Excel文件,无论是2003版(.xls)还是2007版及以后版本(.xlsx)。本篇文章将深入探讨如何使用Apache POI来读取Excel 03和07的文件。 1. **Apache POI介绍** ...
综上所述,"poi操作excel的Demo"应该包含了如何使用Apache POI创建、读取、修改Excel文件的示例代码,以及可能涉及的样式、公式和数据验证等进阶特性。通过学习这个Demo,开发者可以更好地理解和运用Apache POI进行...
5. **poi-examples**: 包含了使用Apache POI API的示例代码,可以帮助开发者理解如何实际操作Excel文件。 6. **poi-excelant**: 提供了用于构建和执行Ant任务的工具,这些任务与Excel操作有关,例如创建或处理Excel...
在IT行业中,SpringBoot、MyBatis和Apache POI是三种非常重要的技术,它们分别用于构建微服务应用、数据库操作和处理Excel数据。本篇文章将详细介绍如何利用SpringBoot和MyBatis结合Apache POI实现Excel的导入导出...
总的来说,“POI读写excel文件+poi简单文档”涵盖了Apache POI在Java环境中处理Excel文件的基础和进阶知识,是学习和使用POI进行Excel操作的重要参考资料。通过学习和实践,开发者可以轻松地在Java程序中实现Excel...
这两种方法都是在Java环境中操作Excel数据的有效方式。 首先,让我们详细了解一下Apache POI库。POI提供了一个API,允许开发者在Java应用程序中创建、修改和显示Microsoft Office文档。对于Excel,它支持HSSF(处理...
"poi操作excel所需完整jar包"指的是包含了所有必要组件的Apache POI库,这样在导入IDE并添加到构建路径后,就可以避免出现`NoClassDefFoundError`这样的运行时错误。 Apache POI 提供了丰富的API,允许开发者读取、...
下面将详细介绍如何使用Java POI来操作Excel以及相关的知识点。 1. **基本概念** - HSSF(Horrible Spreadsheet Format):这是POI库处理Excel 97-2003(.xls)格式的部分。HSSF提供了一套API,可以创建、修改和...
"poi操作Excel文件jar包"指的是包含Apache POI库的Java归档(JAR)文件,可以集成到Java项目中以实现Excel文件的处理功能。 1. **Apache POI 简介** Apache POI 是Apache软件基金会的一个顶级项目,最初由Markus ...
Apache POI 是一个开源项目,专门...总之,Apache POI 提供了强大的工具来解析和操作 Excel 文件,通过合理的编程,我们可以轻松地将 Excel 数据转换为 HTML,保留原有的样式信息,从而在 Web 环境下方便地展示和交互。
POI库不仅支持基本的文本和数字操作,还支持更高级的功能,如公式计算、样式设置和图表创建。 2. **创建Excel图表** 要生成Excel图表,我们需要先创建一个`XSSFWorkbook`对象,这代表了整个Excel工作簿。接着,创建...
使用POI操作Excel的基本步骤与JXL类似,但POI的API更为复杂和强大: 1. 引入POI库的依赖。 2. 创建`Workbook`对象,可以是HSSFWorkbook(.xls)或XSSFWorkbook(.xlsx)。 3. 添加`Sheet`,然后创建`Row`和`Cell`。...
二、Java POI操作Excel的核心功能 1. 创建新的Excel工作簿 使用`WorkbookFactory.create()`方法可以创建一个新的Excel工作簿对象,然后通过工作簿对象创建工作表。 2. 读取Excel工作簿 同样,使用`WorkbookFactory....
接下来,我们将讨论如何使用Apache POI操作Excel 2007(.xlsx)文件的主要步骤: 1. **创建Workbook对象**:这是Excel工作簿的Java表示。你可以使用`XSSFWorkbook`类来创建一个新的Excel工作簿。 ```java import...