poi读取Excel文件(兼容.xlsx和.xls)

poi读取Excel(兼容.xlsx和.xls)

   点关注不迷路,欢迎再访!		

引入依赖

<!-- 添加poi 依赖 -->
   <dependency>
		<groupId>org.apache.poi</groupId>
		<artifactId>poi</artifactId>
		<version>3.17</version>
  </dependency>
  <dependency>
		<groupId>org.apache.poi</groupId>
		<artifactId>poi-ooxml</artifactId>
		<version>3.17</version>
  </dependency>

工具类

/**
 * 获取Excel文件中的所有内容 (核心方法)
 * @throws IOException
 */
public class GetExcelData {
	
	private static final String EXCEL_XLS = "xls";
	private static final String EXCEL_XLSX = "xlsx";

	/**
	 * 获取Excel文件中的所有内容 (核心方法)
	 * @throws IOException
	 */
	private static List<List<Object>> getExcelData(String path) throws IOException {
		File file = new File(path);
		// 实例化一个输入流
		InputStream is = new FileInputStream(file);
		// 获取workbook
		Workbook wb;
		wb = getWorkbok(is, file);
		// 获取工作表的数量
		int numberOfSheets = wb.getNumberOfSheets();
		// 获取第一个工作表
		Sheet sheet = wb.getSheetAt(0);
		//实例化一个二维list集合
		List<List<Object>> listData = new ArrayList<List<Object>>();
		Row row = null;// 行对象
		Iterator<Cell> cols = null;// 列对象
		List<Object> list = null;// 用来存放数据
		int rows = sheet.getPhysicalNumberOfRows();
		for (int i = 0; i < rows; i++) {// 循环每一行的数据
			row = sheet.getRow(i);
			if (row != null) {
				cols = row.cellIterator();
				list = new ArrayList<Object>();
				while (cols.hasNext()) {
					list.add(cols.next());//添加每一行的数据到list中
				}
				listData.add(list);//将每一行的list放到另一个list中
			}
		}
		return listData;
	}

	/**
	 * @author : andy
	 * @date : 2019年12月23日
	 * @time : 下午5:12:09
	 * @param in
	 * @param file
	 * @return
	 * @throws IOException 判断Excel 文件的版本
	 */
	private static Workbook getWorkbok(InputStream in, File file) throws IOException {
		Workbook wb = null;
		if (file.getName().endsWith(EXCEL_XLS)) { 
			wb = new HSSFWorkbook(in);
		} else if (file.getName().endsWith(EXCEL_XLSX)) { 
			wb = new XSSFWorkbook(in);
		}
		return wb;
	}
	
	/**
	 * 
	 * @param num  想要获取那一列的数据,
	 * @param path 文件路径,
	 * @return 
	 * @throws IOException
	 */
	public static Set<Object> getExcelDataByColumn(int num,String path) throws IOException {
		// 实例化一个集合,用来存放数据,为了保持数据和存入的顺序一致使用LinkedHashSet;
		Set<Object> sets = new LinkedHashSet<Object>();
		// 调用封装好获取数据的方法
		List<List<Object>> list = GetExcelData.getExcelData(path);
		// 调用封装好获取数据的方法
		for (List<Object> list2 : list) {
			// 想办法获取你需要的哪一行或者那一列数据
			// 然后获取每一行中的第几个数据
			Object object = list2.get(num);
			// 将数据存放到set中
			sets.add(object);
		}
		return sets;
	}

}

测试类: ----亲测有效

@Test
	public void excelTest() {

		String path = "C:\\Users\\64966\\Desktop\\测试.xlsx";
		// 调用封装好的方法获取数据
		Set<Object> set;
		try {
			set = GetExcelData.getExcelDataByColumn(2, path);
			System.out.println(set.toString());// 打印出第三列的所有数据
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

在这里插入图片描述
获取第三列数据结果:[职业, 开发, 项目经理, 前端]

发布了101 篇原创文章 · 获赞 33 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_39443053/article/details/103704766