欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java之导入excel

程序员文章站 2022-03-12 18:14:38
接口: 1 /** 2 * 3 * Description: 导入excel表 4 * @param map 5 * @param request 6 * @param session 7 * @return 8 * @author shiqianyu 9 * @throws Exception 1 ......

接口:

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

工具类:

java之导入excel
  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