`
宋海南
  • 浏览: 1730 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

POI操作Excel(支持03和07+)

    博客分类:
  • Java
阅读更多

以前项目中用过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();
		}

	}

}

 

  • 大小: 7 KB
分享到:
评论

相关推荐

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

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

    poi操作excel表格导入和导出

    在“poi操作excel表格导入和导出”这个主题中,我们将深入探讨如何利用Apache POI进行Excel数据的处理,包括导入和导出。 一、Apache POI简介 Apache POI是一个开源项目,它提供了API来处理Microsoft Office格式的...

    java使用POI操作excel (支持excel2007)

    Java 使用Apache POI库操作Excel 2007文件详解 在Java开发中,处理Excel文件是一项常见的任务,特别是对于数据分析、数据导入导出或报表生成等场景。Apache POI是一个流行的开源库,它允许开发者读写Microsoft ...

    java 通过poi操作excel jar包

    标题中的"java通过poi操作excel jar包"指的是使用Apache POI库来处理Excel文件的Java程序,通常需要引入特定版本的POI JAR包。在这个案例中,我们有两个版本的JAR包可供使用:poi_3.17.jar和poi_3.15.jar。这些版本...

    poi excel poi excel poi excel

    ### POI Excel知识点详解 #### 一、Jakarta POI简介与Apache POI的作用 Jakarta POI 是 Apache POI 的早期项目名称,它提供了一组 API 来...希望本文能够帮助您更好地理解和使用 Apache POI 进行 Excel 文件的操作。

    POI操作Excel的封装

    在这个场景中,"POI操作Excel的封装"指的是对POI API进行的高级抽象和简化,以便于开发人员更方便地处理Excel文件。通过反射和约定,可以创建一个易于使用的API,隐藏底层复杂的POI细节。 反射是Java编程语言中的一...

    poi 读取excel 03 07

    在Java环境中,使用POI库可以方便地读取、写入和操作Excel文件,无论是2003版(.xls)还是2007版及以后版本(.xlsx)。本篇文章将深入探讨如何使用Apache POI来读取Excel 03和07的文件。 1. **Apache POI介绍** ...

    poi操作excel的Demo

    综上所述,"poi操作excel的Demo"应该包含了如何使用Apache POI创建、读取、修改Excel文件的示例代码,以及可能涉及的样式、公式和数据验证等进阶特性。通过学习这个Demo,开发者可以更好地理解和运用Apache POI进行...

    Apache poi 操作 excel 文件压缩包

    5. **poi-examples**: 包含了使用Apache POI API的示例代码,可以帮助开发者理解如何实际操作Excel文件。 6. **poi-excelant**: 提供了用于构建和执行Ant任务的工具,这些任务与Excel操作有关,例如创建或处理Excel...

    springboot+mybatis+poi 实现excel导入导出

    在IT行业中,SpringBoot、MyBatis和Apache POI是三种非常重要的技术,它们分别用于构建微服务应用、数据库操作和处理Excel数据。本篇文章将详细介绍如何利用SpringBoot和MyBatis结合Apache POI实现Excel的导入导出...

    POI读写excel文件+poi简单文档

    总的来说,“POI读写excel文件+poi简单文档”涵盖了Apache POI在Java环境中处理Excel文件的基础和进阶知识,是学习和使用POI进行Excel操作的重要参考资料。通过学习和实践,开发者可以轻松地在Java程序中实现Excel...

    POI导出Excel文件

    这两种方法都是在Java环境中操作Excel数据的有效方式。 首先,让我们详细了解一下Apache POI库。POI提供了一个API,允许开发者在Java应用程序中创建、修改和显示Microsoft Office文档。对于Excel,它支持HSSF(处理...

    poi操作excel所需完整jar包

    "poi操作excel所需完整jar包"指的是包含了所有必要组件的Apache POI库,这样在导入IDE并添加到构建路径后,就可以避免出现`NoClassDefFoundError`这样的运行时错误。 Apache POI 提供了丰富的API,允许开发者读取、...

    java poi 操作Excel

    下面将详细介绍如何使用Java POI来操作Excel以及相关的知识点。 1. **基本概念** - HSSF(Horrible Spreadsheet Format):这是POI库处理Excel 97-2003(.xls)格式的部分。HSSF提供了一套API,可以创建、修改和...

    poi操作Excel文件jar包

    "poi操作Excel文件jar包"指的是包含Apache POI库的Java归档(JAR)文件,可以集成到Java项目中以实现Excel文件的处理功能。 1. **Apache POI 简介** Apache POI 是Apache软件基金会的一个顶级项目,最初由Markus ...

    POI 解析excel,转成html页面(支持excel03和07)包括style

    Apache POI 是一个开源项目,专门...总之,Apache POI 提供了强大的工具来解析和操作 Excel 文件,通过合理的编程,我们可以轻松地将 Excel 数据转换为 HTML,保留原有的样式信息,从而在 Web 环境下方便地展示和交互。

    java的poi生成excel图表demo

    POI库不仅支持基本的文本和数字操作,还支持更高级的功能,如公式计算、样式设置和图表创建。 2. **创建Excel图表** 要生成Excel图表,我们需要先创建一个`XSSFWorkbook`对象,这代表了整个Excel工作簿。接着,创建...

    JXL 和 POI 操作Excel 表格

    使用POI操作Excel的基本步骤与JXL类似,但POI的API更为复杂和强大: 1. 引入POI库的依赖。 2. 创建`Workbook`对象,可以是HSSFWorkbook(.xls)或XSSFWorkbook(.xlsx)。 3. 添加`Sheet`,然后创建`Row`和`Cell`。...

    Java Poi 操作excel的API 好用

    二、Java POI操作Excel的核心功能 1. 创建新的Excel工作簿 使用`WorkbookFactory.create()`方法可以创建一个新的Excel工作簿对象,然后通过工作簿对象创建工作表。 2. 读取Excel工作簿 同样,使用`WorkbookFactory....

    poi操作excel2007

    接下来,我们将讨论如何使用Apache POI操作Excel 2007(.xlsx)文件的主要步骤: 1. **创建Workbook对象**:这是Excel工作簿的Java表示。你可以使用`XSSFWorkbook`类来创建一个新的Excel工作簿。 ```java import...

Global site tag (gtag.js) - Google Analytics