Java------POI操作exel表格

本文介绍了如何使用Java POI库读取Excel文件(.xls和.xlsx)。主要内容涵盖创建Workbook对象、获取工作表、遍历表格数据及读取单元格的具体实现。适用于需要批量处理Excel数据的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Java开发中常会遇操作处理word中的execl表格数据,今天遇到这个问题做一个简单的总结,以后自己用起来方便。

 Java--POI 操作解析Excel主要的步骤:

 1.首先通过输入的文件路径或者文件目录查找出符合格式的Excel文件,并创建一个execl对象

    //创建Workbook对象(这一个对象代表着对应的一个Excel文件)

  其中最主要的两个方法: HSSFWorkbook():是操作Excel2003以前(包括2003)的版本,扩展名是.xls;

XSSFWorkbook():是操作Excel2007的版本,扩展名是.xlsx; 

//通过文件名称来判断文件是否符合格式
public static final Workbook createWb(String filePath) throws IOException {
		if (filePath == null || filePath == "") {
			return null;
		}
		if (filePath.trim().toLowerCase().endsWith("xls")) {
			return new HSSFWorkbook(new FileInputStream(filePath));
		} else if (filePath.trim().toLowerCase().endsWith("xlsx")) {
			return new XSSFWorkbook(new FileInputStream(filePath));
		} else {
			System.out.print("不支持除:xls/xlsx以外的文件格式!!!");
			return null;
		}
	}
//输入文件目录来判断获取文件
	public static final Workbook createWb(File file) throws IOException {
		if (file == null || !file.exists()) {
			return null;
		}
		String filePath = file.getAbsolutePath();
		if (filePath.trim().toLowerCase().endsWith("xls")) {
			return new HSSFWorkbook(new FileInputStream(file));
		} else if (filePath.trim().toLowerCase().endsWith("xlsx")) {
			return new XSSFWorkbook(new FileInputStream(file));
		} else {
			System.out.print("不支持除:xls/xlsx以外的文件格式!!!");
			return null;
		}
	}

2. 获取execl文件中的一个工作表格单元,可以用两种方法,第一种就是通过(ececl对象,工作表名称),第二种通过工作表的索引来返回工作表单元,默认第一个工作表的索引为0,

public static final Sheet getSheet(Workbook wb, String sheetName) {
		return wb.getSheet(sheetName);
	}

	public static final Sheet getSheet(Workbook wb, int index) {
		return wb.getSheetAt(index);
	}

3. 循环获取整个ececl 工作表sheet的整个单元,通过行和列来获取。 简单的理解ececl表格: 每一行可以看作是一个对象,每行中的每列数据就可以看作是这个对象的属性值,多行就组成了一个对象集合

public static final List<Object[]> listFromSheet(Sheet sheet) {

		int rowTotal = sheet.getPhysicalNumberOfRows();
		System.out.println(sheet.getSheetName() + "共有" + rowTotal + "行记录!");

		List<Object[]> list = new ArrayList<Object[]>();
		for (int r = sheet.getFirstRowNum(); r <= sheet.getLastRowNum(); r++) {
			Row row = sheet.getRow(r);
			if (row == null)
				continue;
			// 不能用row.getPhysicalNumberOfCells(),可能会有空cell导致索引溢出
			// 使用row.getLastCellNum()至少可以保证索引不溢出,但会有很多Null值,如果使用集合的话,就不说了
			Object[] cells = new Object[row.getLastCellNum()];
			for (int c = row.getFirstCellNum(); c <= row.getLastCellNum(); c++) {
				Cell cell = row.getCell(c);
				if (cell != null && c == 0) {
					if (cell.toString().equalsIgnoreCase("id")||cell.toString().equalsIgnoreCase("学号")||cell.toString().equalsIgnoreCase("studentid")) {
						break;
					}
				}
				if (c >= row.getLastCellNum() && cell == null) {
					continue;
				}
				try {
					cells[c] = getValueFromCell(cell);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					System.out.println("--------------"+r+"-----------"+c);
					e.printStackTrace();
					throw new RuntimeException();
				}

			}
			if (cells[0] != null)
				list.add(cells);
		}

		return list;
	}

 4. 最后获取每个单元格的数据

	public static final String getValueFromCell(Cell cell) throws Exception {


       if (cell == null) {
			System.out.printf("Cell is null !!!");
			return "";
		}
		String value = null;

        //核心代码就是找到每个单元格的数据,并返回这个单元格的坐标

       // 使用[]记录坐标
		return value;// + "["+cell.getRowIndex()+","+cell.getColumnIndex()+"]" ;



}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值