zoukankan      html  css  js  c++  java
  • java之导入excel

    接口:

      1 /**
      2      * 
      3      * Description:  导入excel表 
      4      * @param map
      5      * @param request
      6      * @param session
      7      * @return
      8      * @author shiqianyu
      9      * @throws Exception 
     10      * @Data 2018年3月12日 下午2:40:52
     11      */
     12     @RequestMapping("/importExcelData")
     13     public ModelAndView importExcelData(ModelMap map,HttpServletRequest request,HttpSession session,@RequestParam(value = "file", required = true)MultipartFile multfile) throws Exception{  
     14          //获取页面信息
     15         Map<String, String> pageCrawlValue = StringUtil.getArrayValue(request.getParameterMap());
     16         pageCrawlValue.put("CRAWLRESULTPATH", pageCrawlValue.get("CRAWLRESULTPATH")+File.separator+pageCrawlValue.get("PAGECRAWLNAME"));
     17         PageCrawlTaskManage pageCrawlTaskManage = new PageCrawlTaskManage();
     18         pageCrawlTaskManage.setRegx(pageCrawlValue.get("PageRegx"));
     19         pageCrawlTaskManage.setPage_prdfix(pageCrawlValue.get("PAGE_PRDFIX"));
     20         pageCrawlTaskManage.setCtCycle(pageCrawlValue.get("CTCYCLE"));
     21         pageCrawlTaskManage.setCrawlResultPath(pageCrawlValue.get("CRAWLRESULTPATH"));
     22         pageCrawlTaskManage.setProxyDeployId(pageCrawlValue.get("PROXYID"));
     23         pageCrawlTaskManage.setCrawlIntervalTime(Integer.valueOf(pageCrawlValue.get("CRAWL_INTERVAL_TIME")));
     24         pageCrawlTaskManage.setPageCrawlName(pageCrawlValue.get("PAGECRAWLNAME"));
     25         pageCrawlTaskManage.setIsDrill(pageCrawlValue.get("isDrill"));
     26         pageCrawlTaskManage.setCtCycleUnit(pageCrawlValue.get("CTCYCLEUNIT"));
     27         pageCrawlTaskManage.setDataSourceId(pageCrawlValue.get("DATASOURCEID"));
     28         pageCrawlTaskManage.setPage_start(pageCrawlValue.get("PAGE_START"));
     29         pageCrawlTaskManage.setPage_end(pageCrawlValue.get("PAGE_END"));
     30         pageCrawlTaskManage.setDescribe(pageCrawlValue.get("describe"));
     31         pageCrawlTaskManage.setThreadCount(pageCrawlValue.get("CTTHREADCOUNT"));
     32         pageCrawlTaskManage.setPage_suffix(pageCrawlValue.get("PAGE_SUFFIX"));
     33         
     34         int startRow = Integer.parseInt(pageCrawlValue.get("startRow"))-1;//导入excel 起始行号 -3
     35         int endRow = Integer.parseInt(pageCrawlValue.get("endRow"))-1; //导入excel 结束行号 -3
     36         int column = Integer.parseInt(pageCrawlValue.get("column"))-1; //导入 excel指定的列号 -1
     37         
     38         //获取页码后缀
     39         List<String> suffixs = new ArrayList<String>();
     40         
     41         
     42         //检查文件
     43         ExcelData.checkFile(multfile);
     44          //获得Workbook工作薄对象
     45         Workbook workbook = ExcelData.getWorkBook(multfile);
     46         //创建返回对象,把每行中的值作为一个数组,所有行作为一个集合返回
     47         List<String[]> list = new ArrayList<String[]>();
     48         if(workbook != null){
     49             for(int sheetNum = 0;sheetNum < workbook.getNumberOfSheets();sheetNum++){
     50                 //获得当前sheet工作表
     51                 Sheet sheet = workbook.getSheetAt(sheetNum);
     52                 if(sheet == null){
     53                     continue; 
     54                 }
     55                 //获得当前sheet的开始行
     56                 int firstRowNum  = startRow;
     57                 //获得当前sheet的结束行
     58                 int lastRowNum = endRow;
     59                 //循环行
     60                 for(int rowNum = firstRowNum;rowNum <= lastRowNum;rowNum++){ //firstRowNum+1;
     61                     //获得当前行
     62                     Row row = sheet.getRow(rowNum);
     63                     if(row == null){
     64                         continue;
     65                     }
     66                     //获得当前行的开始列
     67                     int firstCellNum = row.getFirstCellNum();
     68                     //获得当前行的列数
     69                     int lastCellNum = row.getLastCellNum();
     70                     String[] cells = new String[row.getLastCellNum()];
     71                     //循环当前行
     72                     for(int cellNum = firstCellNum; cellNum < lastCellNum;cellNum++){
     73                         if(cellNum==column){
     74                             Cell cell = row.getCell(cellNum);
     75                             cells[cellNum] = ExcelData.getCellValue(cell);
     76                         }
     77                         
     78                     }
     79                     list.add(cells);
     80                 }
     81             }
     82         }
     83         
     84        
     85         for(int i= 0;i<list.size();i++){//startRow
     86             String[] arr=null;
     87             arr = list.get(i);//[张飞, As255, c2, d2, f2]
     88             if(arr!=null){
     89                 //遍历列
     90                 for(int j=0;j<arr.length;j++){
     91                     if(j==column){
     92                         suffixs.add(arr[j]);//As255
     93                     }
     94                 }
     95             }
     96         }
     97          
     98         map.put("pageCrawlTaskManage", pageCrawlTaskManage);
     99         map.put("times",suffixs); 
    100         return new ModelAndView("crawl/CrawlTaskToExcel");
    101     }
    View Code

    工具类:

      1 package com.dimensoft.splider.util;
      2 
      3 import java.io.IOException;
      4 import java.io.InputStream;
      5 import java.text.DecimalFormat;
      6 import java.text.SimpleDateFormat;
      7 import java.util.ArrayList;
      8 import java.util.Date;
      9 import java.util.List;
     10 
     11 import org.apache.log4j.Logger;
     12 import org.apache.poi.hssf.usermodel.HSSFDataFormat;
     13 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
     14 import org.apache.poi.ss.usermodel.Cell;
     15 import org.apache.poi.ss.usermodel.CellStyle;
     16 import org.apache.poi.ss.usermodel.Row;
     17 import org.apache.poi.ss.usermodel.Sheet;
     18 import org.apache.poi.ss.usermodel.Workbook;
     19 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
     20 import org.springframework.web.multipart.MultipartFile;
     21  
     22 
     23 /**
     24  * 解析excel 上传数据
     25  * @author shiqianyu
     26  *
     27  */
     28 public class ExcelData {
     29     
     30     private static final Logger log = Logger.getLogger(ExcelData.class);
     31     
     32     public static List<String[]> getExcelData(MultipartFile file) throws IOException{
     33         checkFile(file);
     34          //获得Workbook工作薄对象
     35         Workbook workbook = getWorkBook(file);
     36         //创建返回对象,把每行中的值作为一个数组,所有行作为一个集合返回
     37         List<String[]> list = new ArrayList<String[]>();
     38         if(workbook != null){
     39             for(int sheetNum = 0;sheetNum < workbook.getNumberOfSheets();sheetNum++){
     40                 //获得当前sheet工作表
     41                 Sheet sheet = workbook.getSheetAt(sheetNum);
     42                 if(sheet == null){
     43                     continue; 
     44                 }
     45                 //获得当前sheet的开始行
     46                 int firstRowNum  = sheet.getFirstRowNum();
     47                 //获得当前sheet的结束行
     48                 int lastRowNum = sheet.getLastRowNum();
     49                 //循环除了第一行的所有行
     50                 for(int rowNum = firstRowNum+1;rowNum <= lastRowNum;rowNum++){
     51                     //获得当前行
     52                     Row row = sheet.getRow(rowNum);
     53                     if(row == null){
     54                         continue;
     55                     }
     56                     //获得当前行的开始列
     57                     int firstCellNum = row.getFirstCellNum();
     58                     //获得当前行的列数
     59                     int lastCellNum = row.getLastCellNum();
     60                     String[] cells = new String[row.getLastCellNum()];
     61                     //循环当前行
     62                     for(int cellNum = firstCellNum; cellNum < lastCellNum;cellNum++){
     63                         Cell cell = row.getCell(cellNum);
     64                         cells[cellNum] = getCellValue(cell);
     65                     }
     66                     list.add(cells);
     67                 }
     68             }
     69         }
     70         return list;
     71     }
     72 
     73     
     74     /**
     75      * 检查文件
     76      * @param file
     77      * @throws IOException
     78      */
     79      public static  void checkFile(MultipartFile file) throws IOException{
     80          //判断文件是否存在
     81          if(null == file){
     82              log.error("文件不存在!");
     83          }
     84          //获得文件名
     85          String fileName = file.getOriginalFilename();
     86          //判断文件是否是excel文件
     87          if(!fileName.endsWith("xls") && !fileName.endsWith("xlsx")){
     88              log.error(fileName + "不是excel文件");
     89          }
     90      }
     91      
     92      
     93      public static  Workbook getWorkBook(MultipartFile file) {
     94          //获得文件名
     95          String fileName = file.getOriginalFilename();
     96          //创建Workbook工作薄对象,表示整个excel
     97          Workbook workbook = null;
     98          try {
     99              //获取excel文件的io流
    100              InputStream is = file.getInputStream();
    101              //根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象
    102              if(fileName.endsWith("xls")){
    103                  //2003
    104                  workbook = new HSSFWorkbook(is);
    105              }else if(fileName.endsWith("xlsx")){
    106                  //2007 及2007以上
    107                  workbook = new XSSFWorkbook(is);
    108              }
    109          } catch (IOException e) {
    110              log.error(e.getMessage());
    111          }
    112          return workbook;
    113      }
    114      
    115      public static String getCellValue(Cell cell){
    116          String cellValue = "";
    117          if(cell == null){
    118              return cellValue;
    119          }
    120      //判断数据的类型
    121          switch (cell.getCellType()){
    122              case Cell.CELL_TYPE_NUMERIC: //数字
    123                  cellValue = stringDateProcess(cell);
    124                  break;
    125              case Cell.CELL_TYPE_STRING: //字符串
    126                  cellValue = String.valueOf(cell.getStringCellValue());
    127                  break;
    128              case Cell.CELL_TYPE_BOOLEAN: //Boolean
    129                  cellValue = String.valueOf(cell.getBooleanCellValue());
    130                  break;
    131              case Cell.CELL_TYPE_FORMULA: //公式
    132                  cellValue = String.valueOf(cell.getCellFormula());
    133                  break;
    134              case Cell.CELL_TYPE_BLANK: //空值
    135                  cellValue = "";
    136                  break;
    137              case Cell.CELL_TYPE_ERROR: //故障
    138                  cellValue = "非法字符";
    139                  break;
    140              default:
    141                  cellValue = "未知类型";
    142                  break;
    143          }
    144          return cellValue;
    145      }
    146      
    147      /**
    148       * 时间格式处理
    149       * @return
    150       * @author Liu Xin Nan
    151       * @data 2017年11月27日
    152       */
    153      public static String stringDateProcess(Cell cell){
    154          String result = new String();  
    155          if (true) {// 处理日期格式、时间格式  
    156              SimpleDateFormat sdf = null;  
    157              if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")) {  
    158                  sdf = new SimpleDateFormat("HH:mm");  
    159              } else {// 日期  
    160                  sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
    161              }  
    162              Date date = cell.getDateCellValue();  
    163              result = sdf.format(date);  
    164          } else if (cell.getCellStyle().getDataFormat() == 58) {  
    165              // 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)  
    166              SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
    167              double value = cell.getNumericCellValue();  
    168              Date date = org.apache.poi.ss.usermodel.DateUtil  
    169                      .getJavaDate(value);  
    170              result = sdf.format(date);  
    171          } else {  
    172              double value = cell.getNumericCellValue();  
    173              CellStyle style = cell.getCellStyle();  
    174              DecimalFormat format = new DecimalFormat();  
    175              String temp = style.getDataFormatString();  
    176              // 单元格设置成常规  
    177              if (temp.equals("General")) {  
    178                  format.applyPattern("#");  
    179              }  
    180              result = format.format(value);  
    181          }  
    182          
    183          return result;
    184      }
    185 }
    View Code
  • 相关阅读:
    [Vue] Computed property "XXX" was assigned to but it has no setter.
    vue路由传参的三种基本方式
    ECharts大屏数据可视化展板项目 适配rem
    vue-cli3.0结合lib-flexible、px2rem实现适配,完美解决第三方ui库样式变小问题
    element-ui 实现行合并-亲测有效!
    ui自动化用Tesseract类截取和识别验证码【多测师】
    史上最全软件测试工程师常见的面试题总结(一)【多测师】
    Python操作非关系型数据库Redis【多测师】
    Java当中的重载和重写的区别【多测师】
    3道经典的Python练习题【多测师】
  • 原文地址:https://www.cnblogs.com/sqy-yyr/p/9364327.html
Copyright © 2011-2022 走看看