Java处理Excel,转换为json返回

2021-05-29 19:02

阅读:555

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

1.依赖:
com.github.jsqlparser jsqlparser 3.2org.apache.poi poi 3.17org.apache.poi poi-ooxml 3.17net.sf.json-lib json-lib 2.4jdk15org.projectlombok lombok 1.18.18

  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 

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

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

Java处理Excel,转换为json返回

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

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


评论


亲,登录后才可以留言!