spring boot 将前端传入的MultipartFile转换成inputStream并使用poi读取内部数据

spring boot 将前端传入的MultipartFile转换成inputStream并使用poi读取内部数据

下面是使用poi插件的依赖

>
		>org.apache.poi>
		>poi-ooxml>
		>3.9>
	>

这个看起来东西好像代码多了些(完善)


	@RequestMapping(value = "/excel", method = RequestMethod.POST)
	public String loadExcel(MultipartFile file, HttpServletRequest request)throws IOException {
	
//	InputStream ips = new FileInputStream("C:\\Users\\Xuliangyong\\Desktop\\aaa.xls");
//	InputStream ips = new FileInputStream(file2);
		//multipartfile转换成inputstream
	InputStream ips = null;
	File file1 = null;
	file1 = File.createTempFile("temp", null);
	file.transferTo(file1);
	ips =new FileInputStream(file1);
	file1.deleteOnExit();
	//-------------------------------读取excel第一行  如何想读取全部excel就再加一重for循环
    HSSFWorkbook wb = new HSSFWorkbook(ips);
    HSSFSheet sheet = wb.getSheetAt(0);
    Iterator ite = sheet.rowIterator(); 
        HSSFRow row = (HSSFRow) ite.next();
        System.out.println("");
        for (Iterator itet = row.cellIterator(); itet.hasNext(); ) {
            HSSFCell cell = (HSSFCell) itet.next();
            switch (cell.getCellType()) {
                case HSSFCell.CELL_TYPE_BOOLEAN:
                    //得到Boolean对象的方法
                    System.out.print(cell.getBooleanCellValue() + " ");
                    break;
                case HSSFCell.CELL_TYPE_NUMERIC:
                    //先看是否是日期格式
                    if (HSSFDateUtil.isCellDateFormatted(cell)) {
                        //读取日期格式
                        System.out.print(cell.getDateCellValue() + " ");
                    } else {
                        //读取数字
                        System.out.print(cell.getNumericCellValue() + " ");
                    }
                    break;
                case HSSFCell.CELL_TYPE_FORMULA:
                    //读取公式
                    System.out.print(cell.getCellFormula() + " ");
                    break;
                case HSSFCell.CELL_TYPE_STRING:
                    //读取String
                    System.out.print(cell.getRichStringCellValue().toString() + " ");
                    break;
            
        }
    }

		
		return "aa";
	}
	

简写

@RequestMapping(value = "/insertData", method = RequestMethod.POST)
			public void excelLoad(MultipartFile uploadFile, HttpServletRequest request) throws IOException {
			
				List<String> dataList = new ArrayList<String>();
				InputStream ips = null;
				File file1 = null;
				file1 = File.createTempFile("temp", null);
				uploadFile.transferTo(file1);
				ips =new FileInputStream(file1);
				file1.deleteOnExit();
				HSSFWorkbook wb = new HSSFWorkbook(ips);//XSSF支持XLSX格式表格
				HSSFSheet sheet = wb.getSheetAt(0);

//就是将所有类型直接读出来,不进行判断数据类型,但是会出现读取电话号码等信息出现E10后缀
//所以就将所有数据都以string读出就行了  //sheet.getRow(i).getCell(j).setCellType(XSSFCell.CELL_TYPE_STRING);  这样就能解决了
				//获得总列数
				int coloumNum=sheet.getRow(0).getPhysicalNumberOfCells();
				int rowNum=sheet.getLastRowNum();//获得总行数
				for (int i = 0; i <= rowNum; i++) {
		            for (int j = 0; j < coloumNum; j++) {
		            	sheet.getRow(i).getCell(j).setCellType(XSSFCell.CELL_TYPE_STRING);
//		                dataList.add(sheet.getRow(i).getCell(j).toString());
		            	dataList.add(sheet.getRow(i).getCell(j).getStringCellValue()); 
		            }
		     //   dataList中每次循环都是存着一行数据   
		            excelToMysqlService.lushuju(dataList,userId);
					dataList.clear();

		        }
			
					
			}

这样是不是简单很多了

你可能感兴趣的:(java)