通过poi获取Excel单元格数据

前情:我做的是通过poi读取Excel中的手机号,然后发短信的功能。(maven项目 SpringMVC)实现步骤如下:

  1. POI版本3.8 下载地址:https://pan.baidu.com/s/1EbVFV2hRJbIhzKQhXmSJHA

  2. 将jar包放到lib目录下 并修改pom文件如图所示
    pom文件:
    在这里插入图片描述
    在这里插入图片描述
    3.Java部分
    Controler方法:

@SuppressWarnings("unused")
     @RequestMapping(value = "smsdemo", produces =  "text/html;charset=utf-8",method = RequestMethod.POST)
     @ResponseBody
     public String smsdemo(@RequestParam("excelFile")MultipartFile  excelFile,String aliTemplateCode) throws Exception {
       JSONObject result = new JSONObject();
       //--------------------校验参数------------------------------
       if(excelFile.isEmpty()){
            result.put("success", 3000);
            result.put("msg","请上传文件!");
            return result.toString();
       }
       if("".equals(aliTemplateCode) || aliTemplateCode ==  null){
            result.put("success", 3000);
            result.put("msg","请填写模板编号!");
            return result.toString();
       }else{
            SmsTemplate template =  smsTemplateService.queryTemplateByAliCode(aliTemplateCode);
            if(template==null ||  "".equals(template.getTemplateContent())){
                 result.put("success", 3000);
                  result.put("msg","短信模板不存在!");
                  return result.toString();
            }
       }
      //-----------------------开始解析Excel-------------------------------
        // 创建excel工作簿对象
        Workbook workbook = null;
        FormulaEvaluator formulaEvaluator = null;
        InputStream is = excelFile.getInputStream();
        // 判断文件是xlsx还是xls
        if (excelFile.getOriginalFilename().endsWith("xlsx")) {
           workbook = new XSSFWorkbook(is);
            formulaEvaluator = new  XSSFFormulaEvaluator((XSSFWorkbook) workbook);
       }else {
            workbook = new HSSFWorkbook(is);
            formulaEvaluator = new  HSSFFormulaEvaluator((HSSFWorkbook) workbook);
        }
        //判断excel文件打开是否正确
        if(workbook == null){
             result.put("success", 3000);
            result.put("msg","未读取到内容,请检查文件!");
            return result.toString();
        }
        //创建二维数组,储存excel行列数据
        ArrayList<ArrayList<String>> als = new  ArrayList<ArrayList<String>>();
        //遍历工作簿中的sheet
        for (int numSheet = 0; numSheet <  workbook.getNumberOfSheets(); numSheet++) {
            Sheet sheet = workbook.getSheetAt(numSheet);
            //当前sheet页面为空,继续遍历
            if (sheet == null) {
                continue;
                }
            // 对于每个sheet,读取其中的每一行
            for (int rowNum = 0; rowNum <= sheet.getLastRowNum();  rowNum++) {
               Row row = sheet.getRow(rowNum);
                if (row == null) {
                   continue;
                 }
                // 遍历每一行的每一列
                ArrayList<String> al = new ArrayList<String>();
                for(int columnNum = 0 ; columnNum <  row.getLastCellNum(); columnNum++){
                   Cell cell = row.getCell(columnNum);
                   al.add(ExcelUtil.getValue(cell,  formulaEvaluator));
                   }
                als.add(al);
            }
        }
        is.close();
       //------------------------开始发短信------------------------------------------------
       int count =0;
       for(ArrayList<String> list : als){
           for(String moblie : list){
                 try {
                 smsService.toTeacherV3Message(moblie,aliTemplateCode);
                count++;
                logger.info("batch count is "+ count );
                } catch (Exception e) {
                e.printStackTrace();
                logger.info("batch is failed  mobilePhone="+moblie);
                }
           }
       }
       result.put("success", 1000);
       return result.toString();
     }

新建一个工具类ExcelUtil:

import java.text.SimpleDateFormat;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
importorg.springframework.stereotype.Component;
/**
* 读取Excel工具类
* @author zx
* @date 2018年11月20日
*/
@Component
public class ExcelUtil {
      /**
     * excel文件的数据读取,包括后缀为xls,xlsx
     * @param xssfRow
     * @author zx
     * @return
     */
    public static String getValue(Cell cell, FormulaEvaluator  formulaEvaluator) {
        if(cell==null){
            return null;
        }
        switch (cell.getCellType()) {
            case Cell.CELL_TYPE_STRING:
                return cell.getRichStringCellValue().getString();
            case Cell.CELL_TYPE_NUMERIC:
                // 判断是日期时间类型还是数值类型
                if (DateUtil.isCellDateFormatted(cell)) {
                    short format =  cell.getCellStyle().getDataFormat();
                    SimpleDateFormat sdf = null;
                    /* 所有日期格式都可以通过getDataFormat()值来判断
                     *     yyyy-MM-dd----- 14
                     *    yyyy年m月d日----- 31
                     *    yyyy年m月--------57
                     *    m月d日  --------- 58
                     *    HH:mm---------- 20
                     *    h时mm分  --------- 32
                     */
                    if(format == 14 || format == 31 || format ==  57 || format == 58){
                        //日期
                        sdf = new SimpleDateFormat("yyyy-MM-dd");
                      }else if (format == 20 || format == 32) {
                        //时间
                        sdf = new SimpleDateFormat("HH:mm");
                      }
                    return sdf.format(cell.getDateCellValue());
                } else {
                    // 对整数进行判断处理
                    double cur = cell.getNumericCellValue();  
                    long longVal = Math.round(cur);  
                    Object inputValue = null;
                    if(Double.parseDouble(longVal + ".0") == cur)  {   
                        inputValue = longVal;
                    }
                    else {   
                        inputValue = cur;
                    }
                    return String.valueOf(inputValue);
                }
            case Cell.CELL_TYPE_BOOLEAN:
                return  String.valueOf(cell.getBooleanCellValue());
            case Cell.CELL_TYPE_FORMULA:
                //对公式进行处理,返回公式计算后的值,使用cell.getCellFormula()只会返回公式
                return  String.valueOf(formulaEvaluator.evaluate(cell).getNumberValue());
            //Cell.CELL_TYPE_BLANK || Cell.CELL_TYPE_ERROR
            default:
                return null;
        }
    }  
     
}

4.View部分

 <div>
            <input type="file" name="FileUpload" id="FileUpload">
            <a class="layui-btn layui-btn-mini"  id="btn_uploadimg">短信模板编号</a>
            <input type="text" name="aliTemplateCode"  id="aliTemplateCode" value="">
            <button onclick="batch()">开始发送短信</button>
         </div>
function batch(){
     var fileObj =  document.getElementById("FileUpload").files[0]; // js 获取文件对象
    if (typeof (fileObj) == "undefined" || fileObj.size <= 0) {
        alert("请选择Excel文件");
        return;
    }
     var aliTemplateCode = $("#aliTemplateCode").val();
     if(aliTemplateCode == '' || aliTemplateCode == null){
           alert("请填写短信模板编号");
           return;
     }
     var formFile = new FormData();
     formFile.append("excelFile", fileObj); //加入文件对象
     formFile.append("aliTemplateCode",aliTemplateCode);
    $.ajax({
        url:  "${rootpath}/teacher/center/batch.html",
        type: "POST",
        data: formFile,
        processData: false, // 告诉jQuery不要去处理发送的数据
        contentType: false, // 告诉jQuery不要去设置Content-Type请求头
        async: true,
        dataType:"json",
        success: function(data){
            if(data.success == 1000){
                 alert("发送成功");
            }else{
                 alert(data.msg);
            }
        }
    });
}
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值