码迷,mamicode.com
首页 > 编程语言 > 详细

Java处理Excel,转换为json返回

时间:2021-05-24 08:30:40      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:end   actor   tsp   加载   short   case   表头   sub   tostring   

1.依赖:
<dependencies> <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> <version>3.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.18</version> </dependency> </dependencies>

  1. DTO
    @Data public class ArgumentDTO { private String item; private String specification; private String remark; }

  2. Utils

    `import net.sf.json.JSONArray;
    import org.apache.poi.ss.usermodel.*;

import java.io.File;
import java.util.Arrays;

/**

  • @author ergwang

  • @date 2021-5-13 20:10
    */
    public class Excel2JsonUtils {

    //常亮,用作第一种模板类型,如下图
    private static final int HEADER_VALUE_TYPE_Z = 1;
    //第二种模板类型,如下图
    private static final int HEADER_VALUE_TYPE_S = 2;

    /**

    • 获取一个实例
      */
      private static Excel2JsonUtils getExcel2JSONHelper() {
      return new Excel2JsonUtils();
      }

    /**

    • 文件过滤
    • @throws
    • @Title: fileNameFileter
    • @Description: TODO(这里用一句话描述这个方法的作用)
    • @param:
    • @author LiYonghui
    • @date 2017年1月6日 下午4:45:42
    • @return: void
      */
      private boolean fileNameFileter(File file) {
      boolean endsWith = false;
      if (file != null) {
      String fileName = file.getName();
      endsWith = fileName.endsWith(".xls") || fileName.endsWith(".xlsx");
      }
      return endsWith;
      }

    /**

    • 获取表头行
    • @throws
    • @Title: getHeaderRow
    • @Description: TODO(这里用一句话描述这个方法的作用)
    • @param: @param sheet
    • @param: @param index
    • @param: @return
    • @author LiYonghui
    • @date 2017年1月6日 下午5:05:24
    • @return: Row
      */
      private Row getHeaderRow(Sheet sheet, int index) {
      Row headerRow = null;
      if (sheet != null) {
      headerRow = sheet.getRow(index);
      }
      return headerRow;
      }

    /**

    • 获取表格中单元格的value

    • @throws

    • @Title: getCellValue

    • @Description: TODO(这里用一句话描述这个方法的作用)

    • @param: @param row

    • @param: @param cellIndex

    • @param: @param formula

    • @param: @return

    • @author LiYonghui

    • @date 2017年1月6日 下午5:40:28

    • @return: Object
      */
      private Object getCellValue(Row row, int cellIndex, FormulaEvaluator formula) {
      Cell cell = row.getCell(cellIndex);
      if (cell != null) {
      switch (cell.getCellType()) {
      //String类型
      case Cell.CELL_TYPE_STRING:
      return cell.getRichStringCellValue().getString();

           //number类型
           case Cell.CELL_TYPE_NUMERIC:
               if (DateUtil.isCellDateFormatted(cell)) {
                   return cell.getDateCellValue().getTime();
               } else {
                   return cell.getNumericCellValue();
               }
               //boolean类型
           case Cell.CELL_TYPE_BOOLEAN:
               return cell.getBooleanCellValue();
           //公式
           case Cell.CELL_TYPE_FORMULA:
               return formula.evaluate(cell).getNumberValue();
           default:
               return null;
       }
      

      }
      return null;
      }

    /**

    • 获取表头value
    • @throws
    • @Title: getHeaderCellValue
    • @Description: TODO(这里用一句话描述这个方法的作用)
    • @param: @param headerRow
    • @param: @param cellIndex 英文表头所在的行,从0开始计算哦
    • @param: @param type 表头的类型第一种 姓名(name)英文于实体类或者数据库中的变量一致
    • @param: @return
    • @author LiYonghui
    • @date 2017年1月6日 下午6:12:21
    • @return: String
      */
      private String getHeaderCellValue(Row headerRow, int cellIndex, int type) {
      Cell cell = headerRow.getCell(cellIndex);
      String headerValue = null;
      if (cell != null) {
      //第一种模板类型
      if (type == HEADER_VALUE_TYPE_Z) {
      headerValue = cell.getRichStringCellValue().getString();
      int l_bracket = headerValue.indexOf("(");
      int r_bracket = headerValue.indexOf(")");
      if (l_bracket == -1) {
      l_bracket = headerValue.indexOf("(");
      }
      if (r_bracket == -1) {
      r_bracket = headerValue.indexOf(")");
      }
      headerValue = headerValue.substring(l_bracket + 1, r_bracket);
      } else if (type == HEADER_VALUE_TYPE_S) {
      //第二种模板类型
      headerValue = cell.getRichStringCellValue().getString();
      }
      }
      return headerValue;
      }

    /**

    • 读取excel表格

    • @throws

    • @Title: readExcle

    • @Description: TODO(这里用一句话描述这个方法的作用)

    • @param: @param file

    • @param: @param headerIndex

    • @param: @param headType 表头的类型第一种 姓名(name)英文于实体类或者数据库中的变量一致

    • @author LiYonghui

    • @date 2017年1月6日 下午6:13:27

    • @return: void
      */
      public JSONArray readExcle(File file, int headerIndex) {
      ArgumentDTO[] arguments = null;
      if (!fileNameFileter(file)) {
      return null;
      } else {
      try {
      //加载excel表格
      Workbook wb = WorkbookFactory.create(file);
      //读取第一个sheet页
      Sheet sheet = wb.getSheetAt(0);
      //读取数据
      FormulaEvaluator formula = wb.getCreationHelper().createFormulaEvaluator();

           short cellNum = sheet.getRow(0).getLastCellNum();
      
           arguments = new ArgumentDTO[cellNum];
      
           // 行
           for (int i = headerIndex; i < sheet.getLastRowNum(); i++) {
               // 获取行
               Row dataRow = sheet.getRow(i + 1);
      
               // 遍历一行的每个单元(我这里只有三个参数)
               for (int j = 0; j < dataRow.getLastCellNum(); j++) {
                   String value = dataRow.getCell(j).getRichStringCellValue().getString();
                   if (j == 0) {
                       if (arguments[i] == null) {
                           arguments[i] = new ArgumentDTO();
                       }
                       arguments[i].setItem(value);
                   }
                   if (j == 1) {
                       arguments[i].setSpecification(value);
                   }
                   if (j == 2) {
                       arguments[i].setRemark(value);
                   }
               }
           }
           System.out.println(Arrays.toString(arguments));
      
       } catch (Exception e) {
           e.printStackTrace();
       }
      

      }
      return JSONArray.fromObject(arguments);
      }
      }
      `

大部分参考网上代码,根据实际情况有所调整,原来代码是map,导致我的key相同的情况下数据丢失,暂时这样垃圾代码吧,后面有空再优化

Java处理Excel,转换为json返回

标签:end   actor   tsp   加载   short   case   表头   sub   tostring   

原文地址:https://www.cnblogs.com/ergwang/p/14766625.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!