`
cgs1999
  • 浏览: 536261 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

通过POI统一读取Excel文件(兼容97-2003和2007+两种格式)

阅读更多
1、引言
由于系统需要提供给用户导入Excel文件数据的功能,但Excel文件有97-2003和2007+两种格式,且要求给用户有较大的灵活性。导入Excel文件的处理无非就是读取Excel文件的内容,然后根据一定的业务规则进行校验,校验正确后处理写入系统。对Excel文件的读取可通过JXL或POI两个Jar来完成,决定使用POI来开发,但POI对两种格式的处理又有所不同,那么如何通过POI灵活读取Excel文件的内容呢?

2、分析
Excel文件的读取有以下读取情况
(1)读取整个工作表中的所有内容


(2)读取工作表中指定区域块的内容


(3)读取工作表中指定行列的内容


(4)读取工作表中指定单元格的内容


情况(2)中,当区域块的内容为整个工作表的内容时,即为情况(1),也就是说情况(1)为情况(2)的特例。
情况(3)中,当指定行列范围内容中的列范围连续时,即为情况(2),也就是说情况(2)为情况(3)的特例。
情况(4)中,当指定单元格内容中的行范围连续时,即为情况(3),也就是说情况(3)为情况(4)的特例。

从上述4种情况的分析可知,前3种情况均可视为情况(4)的特例,从而将工作表范围转化为指定单元格范围的处理。由于指定单元格范围可能存在上述的4种情况,因而提供灵活的并且能够覆盖这些情况的配置方式显得尤为关键。

行列范围参数中均采用“,”作为不连续值的分割符,采用“-”作为两个连续值的连接符,这样简化了用户的参数配置,同时也保留了配置的灵活性,例如:
(1)12-        表示查询范围为从第十二行(列)到EXCEL中有记录的最后一行(列);
(2)12-24      表示查询范围为从第十二行(列)到第二十四行(列);
(3)12-24,30  表示查询范围为从第十二行(列)到第二十四行(列)、第三十行(列)等;

3、解决过程
(1)POI处理
对Excel的读取,主要涉及工作薄、工作薄、行数据、单元格等的处理,POI对97-2003和2007+两个版本的处理采用不同的类,如下图所示。


其中:
a)Workbook、Sheet、Row、Cell等为接口;
b)HSSFWorkbook、HSSFSheet、HSSFRow、HSSFCell为97-2003版本对应的处理实现类;
c)XSSFWorkbook、XSSFSheet、XSSFRow、XSSFCell为2007+版本对应的处理实现类;

(2)针对POI接口统一Excel处理类PoiExcelHelper
import java.util.ArrayList;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;

/**
 * Excel统一POI处理类(针对2003以前和2007以后两种格式的兼容处理)
 * @author	chengesheng
 * @date	2012-5-3 下午03:10:23
 * @note	PoiHelper
 */
public abstract class PoiExcelHelper {
	public static final String SEPARATOR = ",";
	public static final String CONNECTOR = "-";

	/** 获取sheet列表,子类必须实现 */
	public abstract ArrayList<String> getSheetList(String filePath);
	
	/** 读取Excel文件数据 */
	public ArrayList<ArrayList<String>> readExcel(String filePath, int sheetIndex) {
		return readExcel(filePath, sheetIndex, "1-", "1-");
	}
	
	/** 读取Excel文件数据 */
	public ArrayList<ArrayList<String>> readExcel(String filePath, int sheetIndex, String rows) {
		return readExcel(filePath, sheetIndex, rows, "1-");
	}
	
	/** 读取Excel文件数据 */
	public ArrayList<ArrayList<String>> readExcel(String filePath, int sheetIndex, String[] columns) {
		return readExcel(filePath, sheetIndex, "1-", columns);
	}
	
	/** 读取Excel文件数据,子类必须实现 */
	public abstract ArrayList<ArrayList<String>> readExcel(String filePath, int sheetIndex, String rows, String columns);

	/** 读取Excel文件数据 */
	public ArrayList<ArrayList<String>> readExcel(String filePath, int sheetIndex, String rows, String[] columns) {
		int[] cols = getColumnNumber(columns);
		
		return readExcel(filePath, sheetIndex, rows, cols);
	}

	/** 读取Excel文件数据,子类必须实现 */
	public abstract ArrayList<ArrayList<String>> readExcel(String filePath, int sheetIndex, String rows, int[] cols);
	
	/** 读取Excel文件内容 */
	protected ArrayList<ArrayList<String>> readExcel(Sheet sheet, String rows, int[] cols) {
		ArrayList<ArrayList<String>> dataList = new ArrayList<ArrayList<String>> ();
		// 处理行信息,并逐行列块读取数据
		String[] rowList = rows.split(SEPARATOR);
		for (String rowStr : rowList) {
			if (rowStr.contains(CONNECTOR)) {
				String[] rowArr = rowStr.trim().split(CONNECTOR);
				int start = Integer.parseInt(rowArr[0]) - 1;
				int end;
				if (rowArr.length == 1) {
					end = sheet.getLastRowNum();
				} else {
					end = Integer.parseInt(rowArr[1].trim()) - 1;
				}
				dataList.addAll(getRowsValue(sheet, start, end, cols));
			} else {
				dataList.add(getRowValue(sheet, Integer.parseInt(rowStr) - 1, cols));
			}
		}
		return dataList;
	}

	/** 获取连续行、列数据 */
	protected ArrayList<ArrayList<String>> getRowsValue(Sheet sheet, int startRow, int endRow,
			int startCol, int endCol) {
		if (endRow < startRow || endCol < startCol) {
			return null;
		}
		
		ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>();
		for (int i = startRow; i <= endRow; i++) {
			data.add(getRowValue(sheet, i, startCol, endCol));
		}
		return data;
	}

	/** 获取连续行、不连续列数据 */
	private ArrayList<ArrayList<String>> getRowsValue(Sheet sheet, int startRow, int endRow, int[] cols) {
		if (endRow < startRow) {
			return null;
		}
		
		ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>();
		for (int i = startRow; i <= endRow; i++) {
			data.add(getRowValue(sheet, i, cols));
		}
		return data;
	}
	
	/** 获取行连续列数据 */
	private ArrayList<String> getRowValue(Sheet sheet, int rowIndex, int startCol, int endCol) {
		if(endCol < startCol) {
			return null;
		}
		
		Row row = sheet.getRow(rowIndex);
		ArrayList<String> rowData = new ArrayList<String>();
		for (int i = startCol; i <= endCol; i++) {
			rowData.add(getCellValue(row, i));
		}
		return rowData;
	}
	
	/** 获取行不连续列数据 */
	private ArrayList<String> getRowValue(Sheet sheet, int rowIndex, int[] cols) {
		Row row = sheet.getRow(rowIndex);
		ArrayList<String> rowData = new ArrayList<String>();
		for (int colIndex : cols) {
			rowData.add(getCellValue(row, colIndex));
		}
		return rowData;
	}
	
	/**
	 * 获取单元格内容
	 * 
	 * @param row
	 * @param column
	 *            a excel column string like 'A', 'C' or "AA".
	 * @return
	 */
	protected String getCellValue(Row row, String column) {
		return getCellValue(row,getColumnNumber(column));
	}

	/**
	 * 获取单元格内容
	 * 
	 * @param row
	 * @param col
	 *            a excel column index from 0 to 65535
	 * @return
	 */
	private String getCellValue(Row row, int col) {
		if (row == null) {
			return "";
		}
		Cell cell = row.getCell(col);
		return getCellValue(cell);
	}

	/**
	 * 获取单元格内容
	 * 
	 * @param cell
	 * @return
	 */
	private String getCellValue(Cell cell) {
		if (cell == null) {
			return "";
		}

		String value = cell.toString().trim();
		try {
			// This step is used to prevent Integer string being output with
			// '.0'.
			Float.parseFloat(value);
			value=value.replaceAll("\\.0$", "");
			value=value.replaceAll("\\.0+$", "");
			return value;
		} catch (NumberFormatException ex) {
			return value;
		}
	}

	/**
	 * Change excel column letter to integer number
	 * 
	 * @param columns
	 *            column letter of excel file, like A,B,AA,AB
	 * @return
	 */
	private int[] getColumnNumber(String[] columns) {
		int[] cols = new int[columns.length];
		for(int i=0; i<columns.length; i++) {
			cols[i] = getColumnNumber(columns[i]);
		}
		return cols;
	}

	/**
	 * Change excel column letter to integer number
	 * 
	 * @param column
	 *            column letter of excel file, like A,B,AA,AB
	 * @return
	 */
	private int getColumnNumber(String column) {
		int length = column.length();
		short result = 0;
		for (int i = 0; i < length; i++) {
			char letter = column.toUpperCase().charAt(i);
			int value = letter - 'A' + 1;
			result += value * Math.pow(26, length - i - 1);
		}
		return result - 1;
	}

	/**
	 * Change excel column string to integer number array
	 * 
	 * @param sheet
	 *            excel sheet
	 * @param columns
	 *            column letter of excel file, like A,B,AA,AB
	 * @return
	 */
	protected int[] getColumnNumber(Sheet sheet, String columns) {
		// 拆分后的列为动态,采用List暂存
		ArrayList<Integer> result = new ArrayList<Integer> ();
		String[] colList = columns.split(SEPARATOR);
		for(String colStr : colList){
			if(colStr.contains(CONNECTOR)){
				String[] colArr = colStr.trim().split(CONNECTOR);
				int start = Integer.parseInt(colArr[0]) - 1;
				int end;
				if(colArr.length == 1){
					end = sheet.getRow(sheet.getFirstRowNum()).getLastCellNum() - 1;
				}else{
					end = Integer.parseInt(colArr[1].trim()) - 1;
				}
				for(int i=start; i<=end; i++) {
					result.add(i);
				}
			}else{
				result.add(Integer.parseInt(colStr) - 1);
			}
		}
		
		// 将List转换为数组
		int len = result.size();
		int[] cols = new int[len]; 
		for(int i = 0; i<len; i++) {
			cols[i] = result.get(i).intValue();
		}

		return cols;
	}
}


(3)97-2003格式Excel文件处理类PoiExcel2k3Helper
import java.io.FileInputStream;
import java.util.ArrayList;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
 * Excel 读取(97-2003格式)
 * @author	chengesheng
 * @date	2012-4-27 下午03:39:01
 * @note	PoiExcel2k3Helper
 */
public class PoiExcel2k3Helper extends PoiExcelHelper {
	/** 获取sheet列表 */
	public ArrayList<String> getSheetList(String filePath) {
		ArrayList<String> sheetList = new ArrayList<String>(0);
		try {
			HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(filePath));
			int i = 0;
			while (true) {
				try {
					String name = wb.getSheetName(i);
					sheetList.add(name);
					i++;
				} catch (Exception e) {
					break;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return sheetList;
	}

	/** 读取Excel文件内容 */
	public ArrayList<ArrayList<String>> readExcel(String filePath, int sheetIndex, String rows, String columns) {
		ArrayList<ArrayList<String>> dataList = new ArrayList<ArrayList<String>> ();
		try {
			HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(filePath));
			HSSFSheet sheet = wb.getSheetAt(sheetIndex);
			
			dataList = readExcel(sheet, rows, getColumnNumber(sheet, columns));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return dataList;
	}
	
	/** 读取Excel文件内容 */
	public ArrayList<ArrayList<String>> readExcel(String filePath, int sheetIndex, String rows, int[] cols) {
		ArrayList<ArrayList<String>> dataList = new ArrayList<ArrayList<String>> ();
		try {
			HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(filePath));
			HSSFSheet sheet = wb.getSheetAt(sheetIndex);
			
			dataList = readExcel(sheet, rows, cols);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return dataList;
	}
}


(4)2007+新格式Excel文件处理类PoiExcel2k7Helper
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Iterator;

import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * Excel 读取(2007+新格式)
 * @author	chengesheng
 * @date	2012-4-27 下午03:39:01
 * @note	PoiExcel2k7Helper
 */
public class PoiExcel2k7Helper extends PoiExcelHelper {
	/** 获取sheet列表 */
	public ArrayList<String> getSheetList(String filePath) {
		ArrayList<String> sheetList = new ArrayList<String>(0);
		try {
			XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(filePath));
			Iterator<XSSFSheet> iterator = wb.iterator();
			while (iterator.hasNext()) {
				sheetList.add(iterator.next().getSheetName());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return sheetList;
	}

	/** 读取Excel文件内容 */
	public ArrayList<ArrayList<String>> readExcel(String filePath, int sheetIndex, String rows, String columns) {
		ArrayList<ArrayList<String>> dataList = new ArrayList<ArrayList<String>> ();
		try {
			XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(filePath));
			XSSFSheet sheet = wb.getSheetAt(sheetIndex);
			
			dataList = readExcel(sheet, rows, getColumnNumber(sheet, columns));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return dataList;
	}
	
	/** 读取Excel文件内容 */
	public ArrayList<ArrayList<String>> readExcel(String filePath, int sheetIndex, String rows, int[] cols) {
		ArrayList<ArrayList<String>> dataList = new ArrayList<ArrayList<String>> ();
		try {
			XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(filePath));
			XSSFSheet sheet = wb.getSheetAt(sheetIndex);
			
			dataList = readExcel(sheet, rows, cols);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return dataList;
	}
}


(5)测试类PoiExcelTest

import java.util.ArrayList;

/**
 * Excel统一POI处理测试类(针对2003以前和2007以后两种格式的兼容处理)
 * @author	chengesheng
 * @date	2012-5-3 下午03:10:23
 * @note	PoiHelper
 */
public abstract class PoiExcelTest {
	// *************************************************
	// ================以下为测试代码====================
	// *************************************************
	public static void main(String[] args){
		// 获取Excel文件的sheet列表
		testGetSheetList("c:/test.xlsx");
		
		// 获取Excel文件的第1个sheet的内容
		testReadExcel("c:/test.xls", 0);
		
		// 获取Excel文件的第2个sheet的第2、4-7行和第10行及以后的内容
		testReadExcel("c:/test.xlsx", 1, "2,4-7,10-");
		
		// 获取Excel文件的第3个sheet中a,b,g,h,i,j等列的所有内容
		testReadExcel("c:/test.xls", 2, new String[] {"a","b","g","h","i","j"});
		
		// 获取Excel文件的第4个sheet的第2、4-7行和第10行及以后,a,b,g,h,i,j等列的内容
		testReadExcel("c:/test.xlsx", 3, "2,4-7,10-", new String[] {"a","b","g","h","i","j"});
	}
	
	// 测试获取sheet列表
	private static void testGetSheetList(String filePath) {
		PoiExcelHelper helper = getPoiExcelHelper(filePath);
		
		// 获取Sheet列表
		ArrayList<String> sheets = helper.getSheetList(filePath);
		
		// 打印Excel的Sheet列表
		printList(filePath, sheets);
	}
	
	// 测试Excel读取
	private static void testReadExcel(String filePath, int sheetIndex) {
		PoiExcelHelper helper = getPoiExcelHelper(filePath);
		
		// 读取excel文件数据
		ArrayList<ArrayList<String>> dataList = helper.readExcel(filePath, sheetIndex);
		
		// 打印单元格数据
		printBody(dataList);
	}
	
	// 测试Excel读取
	private static void testReadExcel(String filePath, int sheetIndex, String rows) {
		PoiExcelHelper helper = getPoiExcelHelper(filePath);
		
		// 读取excel文件数据
		ArrayList<ArrayList<String>> dataList = helper.readExcel(filePath, sheetIndex, rows);
		
		// 打印单元格数据
		printBody(dataList);
	}
	
	// 测试Excel读取
	private static void testReadExcel(String filePath, int sheetIndex, String[] columns) {
		PoiExcelHelper helper = getPoiExcelHelper(filePath);
		
		// 读取excel文件数据
		ArrayList<ArrayList<String>> dataList = helper.readExcel(filePath, sheetIndex, columns);
		
		// 打印列标题
		printHeader(columns);
		
		// 打印单元格数据
		printBody(dataList);
	}
	
	// 测试Excel读取
	private static void testReadExcel(String filePath, int sheetIndex, String rows, String[] columns) {
		PoiExcelHelper helper = getPoiExcelHelper(filePath);
		
		// 读取excel文件数据
		ArrayList<ArrayList<String>> dataList = helper.readExcel(filePath, sheetIndex, rows, columns);
		
		// 打印列标题
		printHeader(columns);
		
		// 打印单元格数据
		printBody(dataList);
	}
	
	// 获取Excel处理类
	private static PoiExcelHelper getPoiExcelHelper(String filePath) {
		PoiExcelHelper helper;
		if(filePath.indexOf(".xlsx")!=-1) {
			helper = new PoiExcel2k7Helper();
		}else {
			helper = new PoiExcel2k3Helper();
		}
		return helper;
	}

	// 打印Excel的Sheet列表
	private static void printList(String filePath, ArrayList<String> sheets) {
		System.out.println();
		for(String sheet : sheets) {
			System.out.println(filePath + " ==> " + sheet);
		}
	}

	// 打印列标题
	private static void printHeader(String[] columns) {
		System.out.println();
		for(String column : columns) {
			System.out.print("\t\t" + column.toUpperCase());
		}
	}

	// 打印单元格数据
	private static void printBody(ArrayList<ArrayList<String>> dataList) {
		int index = 0;
		for(ArrayList<String> data : dataList) {
			index ++;
			System.out.println();
			System.out.print(index);
			for(String v : data) {
				System.out.print("\t\t" + v);
			}
		}
	}
}


4、详细请查阅代码(点击这里下载),代码为Maven项目,依赖的包如下
poi-3.8-20120326.jar
poi-ooxml-3.8-20120326.jar
poi-ooxml-schemas-3.8-20120326.jar
dom4j-1.6.1.jar
stax-api-1.0.1.jar
xmlbeans-2.3.0.jar
  • 大小: 78.9 KB
  • 大小: 77 KB
  • 大小: 96.8 KB
  • 大小: 83.6 KB
  • 大小: 50.9 KB
分享到:
评论
5 楼 sanri1993 2014-11-24  
4 楼 synger99 2014-06-25  
牛人!!!!!!!!!!!!!!!!!!!!
3 楼 cnkker 2013-10-22  
高手啊...
膜拜
2 楼 SoarDing 2013-06-24  
很专业,很强大
1 楼 King_XR 2013-04-27  
高手啊...

相关推荐

    poi读取excel2007和2003兼容工具例子

    在这个"poi读取excel2007和2003兼容工具例子"中,我们将探讨如何使用POI来读取不同版本的Excel文件,特别是Excel 2003(.xls)和Excel 2007及更高版本(.xlsx)。 1. **Apache POI库**:Apache POI是Apache软件基金...

    POI读取EXCEL教程

    Excel 97 文件格式,也被称作BIFF8,是Excel从97到XP版本所使用的标准格式。尽管后来的Excel版本有所更新,但由于向后兼容性,BIFF8格式仍然广泛适用。在本文中,我们将主要讨论这个格式,因为它是POI HSSF支持的...

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

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

    ExcelUtil借助反射和POI对Excel读取,省略了以往读取Excel的繁琐步骤

    兼容03/07版Excel的功能意味着ExcelUtil支持两种主要的Excel文件格式:.xls(97-2003版本)和.xlsx(2007及以上版本)。这得益于Apache POI库的广泛支持。 总的来说,ExcelUtil通过结合反射和Apache POI库,极大地...

    java读取excel(兼容2003和2007)[定义].pdf

    【Java读取Excel兼容2003和2007】 在Java中处理Excel文件时,我们需要确保代码能够兼容Microsoft Office的两个主要版本:2003和2007。这两个版本的Excel文件格式有所不同,2003使用的是.BIFF8格式(HSSF),而2007及...

    java代码读取excel文件,同时兼容2003和2007

    Excel文件格式有两种主要版本,即2003的.xls(基于BIFF格式)和2007及以后版本的.xlsx(基于OpenXML标准)。为了确保程序能够兼容这两种格式,开发者通常会使用Apache POI库,这是一个强大的API,专门用于处理...

    java读取excel文件,兼容2007

    Excel文件格式主要有两种:xls(Excel 97-2003格式)和xlsx(Excel 2007及以后的Open XML格式)。为了在Java中实现对这两种格式的兼容性读取,我们可以利用Apache POI库,这是一个强大的开源Java API,专门用于处理...

    POI兼容2003 和 2007

    本篇文章将深入探讨如何使用Apache POI来兼容并处理Excel 2003 (.xls)和Excel 2007 (.xlsx)这两种文件格式。 #### 知识点详解 **1. Apache POI的版本选择** - **Jar包列表**: - `dom4j-1.6.1.jar`: 提供DOM解析...

    java读取excel(兼容2003和2007)

    Excel文件格式有两种主要版本,即2003年的.xls格式和2007年及以后的.xlsx格式。为了兼容这两种格式,Java引入了Apache POI库,这是一个用于处理Microsoft Office文档的开源API。 Apache POI提供了HSSF(Horrible ...

    java 读取 Excel 读取 兼容2003,2007

    Excel文件格式有两种主要版本,即2003年的.xls格式(基于Excel 97-2003)和2007年引入的.xlsx格式(基于Office Open XML)。为了兼容这两种格式,Java提供了多种库来实现读取功能。以下将详细介绍如何使用Java来读取...

    poi 3.7 jar 整合版 jar包 java读取excel文件

    描述中提到的"整合poi3.7所有jar包 能够完美的解析出2007和2003版本"意味着这个版本的POI能够兼容两种不同版本的Excel文件格式:.xls(2003及更早版本)和.xlsx(2007及更高版本)。.xlsx文件是基于Open XML标准的,...

    POI 3.8完整JAR 支持2003-2010Excel

    这意味着你可以使用此版本的库来读取和写入2003年至2010年间的Excel文件,包括xls和xlsx两种格式。 - **读取功能**:POI提供了一系列的接口和类,如HSSFWorkbook(用于.xls文件)和XSSFWorkbook(用于.xlsx文件),...

    (实例)java poi完美解决excel2003和2007、2010之间兼容问题

    这两种API在POI库中都是独立实现的,因此需要根据文件格式选择相应的API进行操作。 1. **HSSF与XSSF的使用**: - HSSF API适用于读写.xls文件,它提供了对Excel 97-2003格式的支持。 - XSSF API则用于读写.xlsx...

    java 读取Excel兼容2003,2007项目

    通过以上知识点的学习和实践,你可以掌握在Java中读取Excel文件,包括对Excel 2003和2007格式的兼容性处理。在实际应用中,可以根据需求进一步扩展功能,如写入Excel、合并单元格、格式化数据等。

    Mac/IOS 读取excel文件

    3. **使用DHlibxls读取Excel文件**: - 首先,创建一个`XLS`对象来表示Excel文件。 - 然后,使用`openFile:`方法打开文件。 - 通过`workbook`属性访问工作簿,可以获取到工作表(worksheet)的数组。 - 对每个...

    java编写的兼容2003、2007Excel文件读取工程

    这个工程的目标是实现一个Java程序,能够读取Microsoft Excel的两种主要格式:.xls(用于2003及更早版本)和.xlsx(用于2007及更高版本)。 Excel 2003使用的是一种名为BIFF(Binary Interchange File Format)的二...

    java使用POI读取excel文件教程

    ### Java使用POI读取Excel文件教程 #### 一、Excel基础 Microsoft Excel 97 文件格式被称为 BIFF8(Binary Interchange File Format),而之后的版本如 Excel 2000、2002 和 2003 对此格式进行了微小的改进。这些...

    poi 解析excel文件内容demo

    首先,Apache POI提供了两种主要的接口来处理Excel文件:HSSF(Horrible Spreadsheet Format)用于读写旧版的.BIFF8格式(即Excel 97-2003),而XSSF则用于读写基于OOXML的新版.XLSX格式。这个demo应该包含了对这两...

    poi-scratchpad-3.12-20150511和poi-3.12-20150511包

    2. **POI-HSSF+XSSF**: HSSF是处理老版二进制Excel文件格式(.xls)的API,而XSSF则用于处理Open XML格式的Excel文件(.xlsx)。这两个库共同提供了对Excel文件的全面支持。 3. **POI-SXSSF**: SXSSF是提供内存优化...

Global site tag (gtag.js) - Google Analytics