`
宋海南
  • 浏览: 1748 次
  • 性别: 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,转成html页面(支持excel03和07)包括style

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

    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 ...

    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