欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

POI 通用 读取excle xls xlsx 文件

程序员文章站 2022-07-13 13:22:26
...

格式要求:文件中第一行必须是标题 全文不能有合并单元格

例如:

姓名 性别
张三

xlsx 文件读取

	/**
	 * 读取xlsx文件
	 * @param inputStream
	 * @return
	 * @throws IOException
	 */
	public static List<List<String>> getXlsxList(InputStream inputStream) throws IOException {
		/** 对应一个Excel文件 */
		XSSFWorkbook xssfworkbook = null;
		List<List<String>> sheetlist = null;
		try {
			xssfworkbook = new XSSFWorkbook(inputStream);
			/** 默认第一个工作表 */
			XSSFSheet sheet = xssfworkbook.getSheetAt(0);
			sheetlist = new ArrayList<List<String>>();// 对应一页sheet
			/** 获取行数 */
			int titleCellSize = 0;
			if (sheet.getLastRowNum() > 0) {
				XSSFRow titleRow = sheet.getRow(0);// 获取标题行
				titleCellSize = titleRow.getLastCellNum();// 行中有多少个单元格,也就是有多少列
			}

			/** 获得行数 */
			int rowSize = sheet.getLastRowNum();
			/** 解析数据 */
			for (int j = 1; j < rowSize; j++) {// 遍历行
				XSSFRow row = sheet.getRow(j);
				if (row == null) {// 略过空行
					continue;
				}
				/** 获取每一列的数据 */
				sheetlist.add(getXlsxRowList(row, titleCellSize));
			}
		} finally {
			if (xssfworkbook != null) {
				xssfworkbook.close();
			}
		}
		return sheetlist;
	}
	/**
	 * 获取一行 每一列的信息 注 这个方法 必须传入标题列数  列为空时 以空字符补充
	 * @param row
	 * @param titleCellSize
	 * @return
	 */
	private static List<String> getXlsxRowList(XSSFRow row, int titleCellSize) {
		List<String> rowList = new ArrayList<String>();// 对应一个数据行,一行的数据
		for (int k = 0; k < titleCellSize; k++) {
			XSSFCell cell = row.getCell(k);
			String value = "";
			if (cell != null) {
				/** 设置单元格类型 */
				cell.setCellType(CellType.STRING);
				/** 内容转化字符串 */
				value = cell.getStringCellValue();
			}
			rowList.add(value);
		}
		return rowList;
	}

xls文件读取

	/**
	 * 将xls 表格中的数据 转换成集合
	 * @return
	 * @throws IOException
	 */
	public static List<List<String>> getXlsList(InputStream inputStream) throws IOException {
		/** 对应一个Excel文件 */
		HSSFWorkbook hssfworkbook = null;
		List<List<String>> sheetlist = null;
		try {
			hssfworkbook = new HSSFWorkbook(inputStream);
			/** 默认第一个工作表 */
			HSSFSheet sheet = hssfworkbook.getSheetAt(0);
			sheetlist = new ArrayList<List<String>>();// 对应一页sheet
			/** 获取行数 */
			int titleCellSize = 0;
			if (sheet.getLastRowNum() > 0) {
				HSSFRow titleRow = sheet.getRow(0);// 获取标题行
				titleCellSize = titleRow.getLastCellNum();// 行中有多少个单元格,也就是有多少列
			}

			/** 获得行数 */
			int rowSize = sheet.getLastRowNum();
			/** 解析数据 */
			for (int j = 1; j < rowSize; j++) {// 遍历行
				HSSFRow row = sheet.getRow(j);
				if (row == null) {// 略过空行
					continue;
				}
				/** 获取每一列的数据 */
				sheetlist.add(getXlsRowList(row, titleCellSize));
			}
		} finally {
			if (hssfworkbook != null) {
				hssfworkbook.close();
			}
		}
		return sheetlist;
	}
	/**
	 * 获取一行 每一列的信息 注 这个方法 必须传入标题列数  列为空时 以空字符补充
	 * @param row
	 * @param titleCellSize
	 * @return
	 */
	private static List<String> getXlsRowList(HSSFRow row, int titleCellSize) {
		List<String> rowList = new ArrayList<String>();// 对应一个数据行,一行的数据
		for (int k = 0; k < titleCellSize; k++) {
			HSSFCell cell = row.getCell(k);
			String value = "";
			if (cell != null) {
				/** 设置单元格类型 */
				cell.setCellType(CellType.STRING);
				/** 内容转化字符串 */
				value = cell.getStringCellValue();
			}
			rowList.add(value);
		}
		return rowList;
	}

maven 依赖

		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>RELEASE</version>
		</dependency>
相关标签: JAVA poi java