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

poi

程序员文章站 2022-07-14 11:10:57
...

简介

  1. Apache POI是java编写的免费开源的跨平台的java API

  2. Apache POI提供api给java提供对office格式档案读和写的功能

  3. POI为“Poor Obfuscation Implementation”的首字母缩写,意为“可怜的模糊实现

  4. 用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件。

  5. Apache POI 提供Java操作Excel解决方案\

导包

<!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
		<dependency>
			<groupId>commons-lang</groupId>
			<artifactId>commons-lang</artifactId>
			<version>2.4</version>
		</dependency>
		<!-- poi导包 -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.15-beta2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>3.15-beta2</version>
		</dependency>	

读取

  1. 读取Excel


    • XSSFWorkbook wb = new XSSFWorkbook(); // .xlsx
      HSSFWorkbook wb = new HSSFWorkbook();// .xls
    • 基础api
      • Sheet sheet = wb.getSheetAt(索引); //获取工作簿
      • int i = wb. getNumberOfSheets() //获取表的数量
      • int I = sheet.getFirstRowNum(); // 获取第一行有值的索引
      • int i = sheet.getLastRowNum(); // 获取最后一行有值的索引
      • for(Row row : sheet){} // poi中直接可以直接遍历工作簿 (row每行)
      • int i = row.getFirstCellNum(); // 获取this行的第一列有值的索引
      • int i =row.getLastCellNum(); // 获取this行的最后一列有值的索引
      • row.getLastCellNum() // 获取this行的总列数
      • row.getRowNum() // 获取正在遍历的行(索引)
      • row.getCell(0).getStringCellValue(); // 获取this行的第一列(索引)类型必须一致

    同一类型格式

    /**
    	 * 转换类型
    	 * 
    	 * @param cell
    	 * @return
    	 */
    	public static String getCellValue(Cell cell) {
    
    		String cellValue = "";
    
    		if (cell == null) {
    
    			return cellValue;
    
    		}
    		// 判断数据的类型
    		switch (cell.getCellType()) {
    		case Cell.CELL_TYPE_NUMERIC: // 数字
    
    			// short s = cell.getCellStyle().getDataFormat();
    
    			if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
    
    				SimpleDateFormat sdf = null;
    
    				// 验证short值
    
    				if (cell.getCellStyle().getDataFormat() == 14) {
    
    					sdf = new SimpleDateFormat("yyyy/MM/dd");
    
    				} else if (cell.getCellStyle().getDataFormat() == 21) {
    
    					sdf = new SimpleDateFormat("HH:mm:ss");
    
    				} else if (cell.getCellStyle().getDataFormat() == 22) {
    
    					sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    
    				} else {
    
    					throw new RuntimeException("日期格式错误!!!");
    
    				}
    
    				Date date = cell.getDateCellValue();
    
    				cellValue = sdf.format(date);
    
    			} else if (cell.getCellStyle().getDataFormat() == 0) {// 处理数值格式
    
    				cell.setCellType(Cell.CELL_TYPE_STRING);
    
    				cellValue = String.valueOf(cell.getRichStringCellValue().getString());
    
    			}
    
    			break;
    
    		case Cell.CELL_TYPE_STRING: // 字符串
    
    			cellValue = String.valueOf(cell.getStringCellValue());
    
    			break;
    
    		case Cell.CELL_TYPE_BOOLEAN: // Boolean
    
    			cellValue = String.valueOf(cell.getBooleanCellValue());
    
    			break;
    
    		case Cell.CELL_TYPE_FORMULA: // 公式
    
    			cellValue = String.valueOf(cell.getCellFormula());
    
    			break;
    
    		case Cell.CELL_TYPE_BLANK: // 空值
    
    			cellValue = null;
    
    			break;
    
    		case Cell.CELL_TYPE_ERROR: // 故障
    
    			cellValue = "非法字符";
    
    			break;
    
    		default:
    
    			cellValue = "未知类型";
    
    			break;
    
    		}
    
    		return cellValue;
    
    	}
    

写入

  1. 写入 Excel

      • XSSFWorkbook wb = new XSSFWorkbook(); // .xlsx
      • HSSFWorkbook wb = new HSSFWorkbook();// .xls
    • 基础api

      • Workbook xwb = new XSSFWorkbook(); //创建对象Excel
      • Sheet xs = xwb.createSheet();// 创建工作簿 “有参:给工作簿命名”
      • Row row = xs.createRow(0); // 创建行(索引)
      • Cell cell = row.createCell(0); // 创建this行的列(索引)
      • cell.setCellValue(); // 向this索引赋值
      • xwb.write(new FileOutputStream(new File(“D:\a.xlsx”))); // 向文档保存到XX目录下,后缀固定
  2. 实际java代码

    	@RequestMapping("uplode")
    	public void uplode(MultipartFile excelFile) throws Exception {
    		/*
    		 * =================================================== 获取文档数据Excel
    		 */
    		// 判断文件类型
    		Workbook wb = null;
    		// 获取后缀判断使用哪个类
    		String houZhui = excelFile.getOriginalFilename()
    				.substring(excelFile.getOriginalFilename().lastIndexOf(".") + 1);
    		if (houZhui.equalsIgnoreCase("xlsx")) {
    			wb = new XSSFWorkbook(excelFile.getInputStream());
    		} else if (houZhui.equalsIgnoreCase("xls")) {
    			wb = new HSSFWorkbook(excelFile.getInputStream());
    		}
    		// 获取第几个工作簿(索引)
    		Sheet sheet = wb.getSheetAt(0);
    		List<Student> list = new ArrayList<Student>();
    		// 内置遍历每列
    		for (Row row : sheet) {
    			String st = "";
    			Student student = new Student();
    			/* 获取每行的总列数 */
    //			short s = row.getLastCellNum();
    //			System.out.println(s + "a");
    			/* 获取正在操作的行(索引) */
    //			int i = row.getRowNum();
    //			System.out.println(i);
    			/* 获取第一列(索引) 的值 */
    			/* 如果类型不同需要转换 */
    //			 row.getCell(0).getStringCellValue();
    			/* 通过遍历获取this行的每列数据 */
    			short s = row.getLastCellNum();
    			for (int i = 0; i < s; i++) {
    
    				String value = row.getCell(i).getStringCellValue();
    				st = st + "," + value;
    			}
    			String[] split = st.split(",");
    			student.setName(split[1]);
    			student.setPassword(split[2]);
    			list.add(student);
    		}
    
    		/*
    		 * ==================================================== 创建并写入Excel
    		 */
    		/* 创建Excel对象 */
    		XSSFWorkbook xwb = new XSSFWorkbook();
    		// 创建工作簿
    		XSSFSheet xs = xwb.createSheet();
    		for (int i = 0; i < list.size(); i++) {
    			// 创建每行
    			XSSFRow row = xs.createRow(i);
    			// 创建并赋值this行的列
    			XSSFCell cell = row.createCell(0);
    			cell.setCellValue(list.get(i).getName());
    			
    			row.createCell(1).setCellValue(list.get(i).getPassword());
    		}
    		// 保存到xx目录 “后缀固定”
    		xwb.write(new FileOutputStream(new File("D:\\a.xlsx")));
    	}
    
    
相关标签: 小知识点