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

package org.framework.core.util;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.PushbackInputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.POIXMLDocument;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
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;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelRead {
	
	
	public static Workbook create(InputStream inp) throws Exception {
		if (!inp.markSupported()) {
	        inp = new PushbackInputStream(inp, 8);
	    }
	    if (POIFSFileSystem.hasPOIFSHeader(inp)) {
	        return new HSSFWorkbook(inp);
	    }
	    if (POIXMLDocument.hasOOXMLHeader(inp)) {
	        return new XSSFWorkbook(OPCPackage.open(inp));
	    }
	    throw new IllegalArgumentException("你的excel版本目前poi解析不了");
	}
	
	/**
	 * 通过流读取Excel文件
	 * @param stream
	 * @return
	 * @throws Exception
	 */
	public static Map<String, List<List<Map<Integer,String>>>> getExcelDataByStream(String streamPath) throws Exception {
		try {
			Map<String, List<List<Map<Integer,String>>>> data = new HashMap<String, List<List<Map<Integer,String>>>>();
			Workbook book = create(new BufferedInputStream(new FileInputStream(streamPath)));
			if (null == book.getSheetAt(0)) {
				return null;
			}
			List<Map<Integer,String>> rowData = null;// 每一行的数据
			List<List<Map<Integer,String>>> sheetData = null;// 每个SHEET的数据
			String sheetName = null;
			// 遍历Excel得到SHEET
			for (int i = 0; i < book.getNumberOfSheets(); i++) {
				Sheet sheet = book.getSheetAt(i);
				// 获取SHEET的名字
				sheetName = sheet.getSheetName();
				sheetData = new ArrayList<List<Map<Integer,String>>>();
				// 遍历SHEET得到每一行
				for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
					Row row = sheet.getRow(rowNum);
					if (null == row) {
						continue;
					}
					// 再遍历该行的所有列
					rowData = new ArrayList<Map<Integer,String>>();
					for (int cellNum = 0; cellNum < row.getLastCellNum(); cellNum++) {
						Cell cell = row.getCell(cellNum);
						if (null == cell) {
							continue;
						}
						String cellVal = getCellVal(cell);
						Map<Integer,String> map = new HashMap<Integer,String>();
						map.put(cellNum, cellVal);
						rowData.add(map);
					}
					// 如上遍历后rowData中填充了每一行的数据,将其加入到sheet中
					sheetData.add(rowData);
				}
				// 有了SHEET名字和SHEET中的数据了,以SHEET名字为键值,加入到MAP中
				data.put(sheetName, sheetData);
			}
			return data;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	private static String getCellVal(Cell cell) {
		if (null == cell) {
			return "";
		}
		switch (cell.getCellType()) {
		// 数字
		case HSSFCell.CELL_TYPE_NUMERIC:
			// 日期格式的处理
			if (HSSFDateUtil.isCellDateFormatted(cell)) {
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
				return sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())).toString();
			}
			return String.valueOf(cell.getNumericCellValue());
		// 字符串
		case HSSFCell.CELL_TYPE_STRING:
			return cell.getStringCellValue();
		// 公式
		case HSSFCell.CELL_TYPE_FORMULA:
			return cell.getCellFormula();
		// 空白
		case HSSFCell.CELL_TYPE_BLANK:
			return "";
		case HSSFCell.CELL_TYPE_BOOLEAN:
			return cell.getBooleanCellValue() + "";
		// 错误类型
		case HSSFCell.CELL_TYPE_ERROR:
			return cell.getErrorCellValue() + "";
		default:
			break;
		}
		return "";
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你需要使用EasyExcel读取或写入20032007格式的Excel文件,可以按照以下步骤进行: 1. 引入EasyExcel依赖 在你的Java项目中,需要引入EasyExcel的依赖,可以在你的pom.xml文件中添加如下依赖: ``` <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version> </dependency> ``` 2. 读取Excel文件 如果你需要读取Excel文件,可以使用EasyExcel提供的读取器进行操作。下面是一个使用EasyExcel读取Excel文件的示例代码: ``` public class ReadExcelDemo { public static void main(String[] args) { String fileName = "test.xlsx"; // Excel文件ExcelReader excelReader = null; try { excelReader = EasyExcel.read(fileName).build(); // 创建Excel读取器 ReadSheet readSheet = EasyExcel.readSheet(0).build(); // 创建Sheet读取器 List<Object> dataList = excelReader.read(readSheet).getDatas(); // 读取Excel文件中的数据 // 处理读取到的数据 } finally { if (excelReader != null) { excelReader.finish(); // 关闭Excel读取器 } } } } ``` 上面的代码中,我们首先创建了一个Excel读取器,然后创建了一个Sheet读取器,指定要读取的Sheet索引为0,最后通过调用`excelReader.read(readSheet).getDatas()`方法来读取Excel文件中的所有数据。你可以在处理读取到的数据时,根据自己的需求进行操作。 3. 写入Excel文件 如果你需要写入Excel文件,可以使用EasyExcel提供的写入器进行操作。下面是一个使用EasyExcel写入Excel文件的示例代码: ``` public class WriteExcelDemo { public static void main(String[] args) { String fileName = "test.xlsx"; // Excel文件ExcelWriter excelWriter = null; try { excelWriter = EasyExcel.write(fileName).build(); // 创建Excel写入器 WriteSheet writeSheet = EasyExcel.writerSheet(0, "Sheet1").build(); // 创建Sheet写入器 List<Object> dataList = new ArrayList<>(); // 要写入Excel文件的数据 // 添加数据到dataList中 excelWriter.write(dataList, writeSheet); // 将数据写入Excel文件 } finally { if (excelWriter != null) { excelWriter.finish(); // 关闭Excel写入器 } } } } ``` 上面的代码中,我们首先创建了一个Excel写入器,然后创建了一个Sheet写入器,指定要写入的Sheet索引为0,Sheet名称为"Sheet1",最后通过调用`excelWriter.write(dataList, writeSheet)`方法来将数据写入Excel文件中。你可以自己定义要写入Excel文件的数据,并按照自己的需求进行操作。 希望这些示例代码能够帮助你解决EasyExcel下载兼容20032007格式的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值