springmvc解析excel表

第一步:导入支持的jar包

<!-- ============================上传excel包======================================= -->
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>3.9</version>
</dependency>
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>3.9</version>
</dependency>
<!--上传文件需要的jar包-->
<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.5</version>
</dependency>
<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.3.3</version>
</dependency>

第二步:在springmvc中配置上传文件

<!--配置上传文件10m-->
  <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="10485760" />
    <property name="defaultEncoding" value="UTF-8"/>
  </bean>

第三步:接收文件

@RequestMapping(value = "analysisExcel", method = RequestMethod.POST)
@ResponseBody
public JSONObject analysisExcel(@RequestParam(value = "file") MultipartFile file, @RequestParam(value = "token") String token) throws Exception {
    return this.ompSmsService.analysisExcel(file, token);
}

第四步:解析

package im.qingtui.utils;

import im.qingtui.comstants.CodeMessage;
import im.qingtui.dto.omp.SmsUserDto;
import im.qingtui.dto.omp.SmsUserUnqualified;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import net.sf.json.JSONObject;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;

/**
 * 解析Excel的内容,并返回给前端
 *
 * @author jiajia
 */
public class ExcelAnalysisContents {

    /*
     * 操作excel存入数据
     */
    public static JSONObject analysisExcel(MultipartFile file) throws Exception{
        JSONObject message = new JSONObject();
        message.put("code", CodeMessage.PARAMETER_IS_NULL);
        message.put("message", "文档格式不正确");
        //存放所有用户信息的List
        List<SmsUserDto> upEmpList = new ArrayList<SmsUserDto>();
        //存放所有不合格信息集合
        List<SmsUserUnqualified> smsUserUnqualified = new ArrayList<SmsUserUnqualified>();
        //错误标志
        boolean isErr = false;
        Workbook wb = null; // 工作区域
        //获取文件名
        String filename=file.getOriginalFilename();
        // 获取文件后缀
        String prefix=filename.substring(filename.lastIndexOf(".")+1);

        if (prefix.equals("xlsx")) {
            try {
                wb = new XSSFWorkbook(file.getInputStream());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
        else if (prefix.equals("xls")) {
            try {
                wb = new HSSFWorkbook(file.getInputStream());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } else {
            return message;
        }
        int j=1;
        // 这个必须用接口
        Sheet sheet1 = wb.getSheetAt(0);
        for (org.apache.poi.ss.usermodel.Row row : sheet1) {
            if(j--==1)    //跳过第一列
                continue;
            int i = 1;
            SmsUserDto emp = new SmsUserDto();//构建一个用户对象bean
            for (Cell cell : row) {
                String data=getStringCellValue(cell);
                // cell.getCellType是获得cell里面保存的值的type
                switch (i++) {
                    case 1:
                        // 姓名
                        if (StringUtils.isBlank(data)){
                            isErr = true;
                            smsUserUnqualified.add(ExcelAnalysisContents.nameOrMobileIsNull(i, "用户名为空"));
                            break;
                        }
                        emp.setName(data);break;
                    case 2:
                        // 电话号码
                        if (StringUtils.isBlank(data)){
                            isErr = true;
                            smsUserUnqualified.add(ExcelAnalysisContents.nameOrMobileIsNull(i, "电话号码为空"));break;
                        }
                        emp.setMobile(data);break;
                        default:break; }
            }
            upEmpList.add(emp);
        }
        if(isErr){
            message.put("data", smsUserUnqualified);
            message.put("message", CodeMessage.PARAMETER_IS_ERR_MESSAGE);
            message.put("code", CodeMessage.PARAMETER_IS_ERR);
        }else {
            message.put("data", upEmpList);
            message.put("message", CodeMessage.SUCCESS_MESSAGE);
            message.put("code", CodeMessage.SUCCESS);
        }
        return message;
    }
    //读取单元格内容 并转为字符串
    private static String getStringCellValue(Cell cell) {
        String strCell;
        switch (cell.getCellType()) {
            case HSSFCell.CELL_TYPE_STRING:
                strCell = cell.getStringCellValue();
                break;
            case HSSFCell.CELL_TYPE_NUMERIC:
                strCell = String.valueOf((int)cell.getNumericCellValue());
                break;
            case HSSFCell.CELL_TYPE_BOOLEAN:
                strCell = String.valueOf(cell.getBooleanCellValue());
                break;
            case HSSFCell.CELL_TYPE_BLANK:
                strCell = "";
                break;
            default:
                strCell = "";
                break;
        }
        if (strCell.equals("")) {
            return "";
        }
        return strCell;
    }

    /**
     * 产生记录错误的对象
     * @param i 第几行
     * @return SmsUserUnqualified记录对象
     */
    private static SmsUserUnqualified nameOrMobileIsNull(int i, String err){
        SmsUserUnqualified unqualified = new SmsUserUnqualified();
        unqualified.setLine(i);
        unqualified.setErrStr(err);
        return unqualified;
    }
}
由于使用的是全json数据,后端提供接口,所以返回的是json对象


ok



poi解析excel功能参数说明 此项目是基于springMVC实现的,基本流程为从前台jsp页面使用Ajax文件上传导入excel文件(.xls(97-03)/.xlsx(07以后)),传到后台controller调用相应工具类解析后返回指定参数做后续处理. 1. POIUtil.java工具类 解析通过MutilpartFile导入的Excel解析里面数据,先判断文件的类型(excel处理有两种此处为两种通用)是.xls/.xlsx,通过workbook.getNumberOfSheets()获取工作簿数量,遍历工作簿,sheet.getLastRowNum()获取最大行数,将每行数据放入List list = new Array List(),并根据excel数据类型将器转换为字符串、数字、Boolean、公式、空值类型防止出现错误,最后返回一个list. 2. ExcelUtil.java工具类 解析通过MutilpartFile导入的Excel解析里面数据,先判断文件的类型(excel处理有两种此处为两种通用)是.xls/.xlsx,采用Apache的POI的API来操作Excel读取内容后保存到List中,再将List转Json(使用Linked,增删快,与Excel顺序保持一致),Sheet1————>List1<Map> 步骤1:根据Excel版本类型创建对于的Workbook以及CellSytle 步骤2:遍历每一个中的每一行的每一列,这里做了些小改动,因为后续可能解析过后可能会保存入数据库,这里为第一行数据添加一个自定义头 String[] p = new String[]{"name","age","sex","tel","address","e-mail","phone"}; 遍历的列数量以p的length为准 步骤3:一个sheet就是一个Json,多就多Json,对应一个 List 一个sheet的一行数据就是一个 Map 一行中的一列,就把当前列头为key,列值为value存到该列的Map中 Map 一个线性Hash Map,以Excel的sheet顺序,并以sheet明作为key,sheet转换Json后的字符串作为value 最后返回一个LinkedHashMap 3. ExcelToJsonPoi.java工具类 这个与上面工具类类似,不过这个是解析本地excel文件不是使用的流,使用迭代遍历sheet工作簿与每行每列的值,将所有类型作为String类型处理返回一个json对象输出至控制台
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值