java 导入excle

14 篇文章 0 订阅

 

说一下大体的思路:

 

1.首先通过页面的上传文件,选择excle;

2.通过ajax 传到后台(有回调函数);

3.后台处理,返回数据;

因为我想将数据先检查数据,是否满足我们的插入条件,执行回调函数,假如其中的数据有问题,就将在页面弹框显示,有问题的原因(后面我是输出在控制台,还没有传到前台),。我只是将数据打印在控制台,也还没有写入数据库,所以其中写入数据库部分,要将输出语句改为插入到数据库的方法,这个后面会完成

 

一。先上前台和ajax

 

 

导入数据

<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.9</version>
        </dependency>

二。后台

package com.ciitc.hsi.controller;

import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.Locale;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.alibaba.fastjson.JSONObject;
import com.ciitc.hsi.bean.BaseResponseBean;


/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	//这个是响应实体
	BaseResponseBean brb=new BaseResponseBean();

	

	//对取得的列中的数据类型进行判断
	public static String  getCellValue(HSSFCell cell) {  
        String cellValue = "";  
        DecimalFormat df = new DecimalFormat("#");  
      	  switch (cell.getCellType()) {  
            case HSSFCell.CELL_TYPE_STRING:  
                cellValue = cell.getRichStringCellValue().getString().trim();  
                break;  
            case HSSFCell.CELL_TYPE_NUMERIC:  
                cellValue = df.format(cell.getNumericCellValue()).toString();  
                break;  
            case HSSFCell.CELL_TYPE_BOOLEAN:  
                cellValue = String.valueOf(cell.getBooleanCellValue()).trim();  
                break;  
            case HSSFCell.CELL_TYPE_FORMULA:  
                cellValue = cell.getCellFormula();  
                break;  
            default:  
            	 cellValue = "";
            }  
        return cellValue.toString();  
    } 
	
	
	
	
	
	/*方法二:在不满足条件的字段,给出错误提示*/
	@RequestMapping(value="doCheck",method=RequestMethod.POST)
	public @ResponseBody  String doCheck(HttpServletRequest request,HttpServletResponse response,
			@RequestParam("uploadexcle") MultipartFile file) {
		try {
			//获取excle的输入流
			InputStream inputStream=file.getInputStream();
			POIFSFileSystem fs=new POIFSFileSystem(inputStream);
			HSSFWorkbook workbook=new HSSFWorkbook(fs);
			
			//设置开始行为
			int  currentPosition=0;
			//设置当前位置
			int currentSheet=0;
			//设置sheet数
			int numOfSheet=workbook.getNumberOfSheets();
			
			//获取第一个sheet 
			HSSFSheet sheet=workbook.getSheetAt(currentSheet);
			//getLastRowNum  是列
			//判断当前行是否到达sheet的结尾
			System.out.println("currentPosition值:"+currentPosition);
			System.out.println("sheet.getLastRowNum()值:"+sheet.getLastRowNum());
			
			int i=0;;
			while(currentPosition<=sheet.getLastRowNum()) {
				//获取当前行数
				int row=currentPosition;
				currentPosition++;
				//读取当前行的数据
				String line=getLine2(sheet,row);
				System.out.println( line);
				i++;
			}
			
			currentPosition=0;
			//判断是否还有sheet 
			while(currentSheet!=numOfSheet-1) {
				//得到下一张sheet
				sheet=workbook.getSheetAt(currentSheet+1);
				//获取当前行数
				int row=currentPosition;
				//当前行数是否到达文件末尾
				if(currentPosition==sheet.getLastRowNum()) {
					//当前sheet只想下一张sheet
					currentSheet++;
					//重新设定当前行数为0;
					currentPosition=0;
					String line= getLine2(sheet,row);
					System.out.println( line);
					continue;
				}else{
					currentPosition++;
					//读取当前行的数据
					String line= getLine2(sheet,row);
					System.out.println( line);
				}
			}
			
			if(i!=0) {
				brb.setCode("200");
				brb.setMsg("执行成功");
			}else {
			brb.setCode("100");
			brb.setMsg("未执行数据检查");
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		return JSONObject.toJSONString(brb);
	}
	
	
	//函数getLine返回sheet的一行数据
	public  static String getLine2(HSSFSheet sheet,int row) {
		//创建字符缓冲区
		StringBuffer buffer=new StringBuffer();
		StringBuffer error=new StringBuffer();
		//根据行数取䮻sheet的一行数据
		HSSFRow rowline=sheet.getRow(row);
		//获得当前行的列数
		//int filedColumns=rowline.getLastCellNum();
		HSSFCell cell;
		
		//此处 i<列数,可以写成i

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值