文件上传,下载,预览,删除(File),分页接口(三)

简介: 文件上传,下载,预览,删除(File),分页接口

7.0 导出excel(xls)

7.1工具类

ExcelUtils

/*
 * 文件名:ExcelUtils.java
 * 版权:Copyright by aostarit
 * 描述:excel表格工具类
 * 
 * 
 */
package com.aostar.ida.framework.util.excel;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellValue;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.xml.sax.SAXException;
import com.aostar.ida.framework.base.IdaConstants;
import com.aostar.ida.framework.base.exception.ServiceException;
import com.aostar.ida.framework.util.DateUtils;
/**
 * 数据转excel和excel转数据
 * 
 */
public class ExcelUtils {
  /**
   * 日志对象
   */
  private static final Logger LOGGER = Logger.getLogger(ExcelUtils.class);
  /**
   * 
   * 把java数据转成excel对象 调用方保证表头和数据的顺序对应,本方法不做检查
   * 
   * @param datas
   *            数据列表
   * @param titles
   *            表头 --单行
   * @return excel对象
   */
  public static HSSFWorkbook data2Excel(List<List<Object>> datas, List<String> titles, String sheetName) {
    HSSFWorkbook book = new HSSFWorkbook();
    HSSFCellStyle style = getCellStyle(book);
    HSSFFont font = getFont(book);
    // 把字体应用到样式
    style.setFont(font);
    // 创建sheet
    HSSFSheet sheet = book.createSheet(sheetName);
    // 设置表格默认列宽度为15个字节
    // sheet.setDefaultColumnWidth((short)15);
    // 设置表头--单行
    HSSFRow titleRow = sheet.createRow(0);
    // 创建标题行
    for (int i = 0; i < titles.size(); i++) {
      HSSFCell cell = titleRow.createCell(i);
      cell.setCellStyle(style);
      cell.setCellValue(titles.get(i));
    }
    // 写入数据
    for (int i = 0; i < datas.size(); i++) {
      // 创建数据行
      HSSFRow dataRow = sheet.createRow(i + 1);
      List<Object> rowDatas = datas.get(i);
      if (CollectionUtils.isEmpty(rowDatas)) {
        continue;
      }
      for (int j = 0; j < rowDatas.size(); j++) {
        HSSFCell cell = dataRow.createCell(j);
        setCellValue(cell, rowDatas.get(j));
      }
    }
    return book;
  }
  public static HSSFWorkbook createWorkbook() {
    HSSFWorkbook book = new HSSFWorkbook();
    return book;
  }
  public static void addNewSheet(HSSFWorkbook book, List<List<Object>> datas, List<String> titles, String sheetName) {
    HSSFCellStyle style = getCellStyle(book);
    HSSFFont font = getFont(book);
    // 把字体应用到样式
    style.setFont(font);
    // 创建sheet
    HSSFSheet sheet = book.createSheet(sheetName);
    // 设置表格默认列宽度为15个字节
    // sheet.setDefaultColumnWidth((short)15);
    // 设置表头--单行
    HSSFRow titleRow = sheet.createRow(0);
    // 创建标题行
    for (int i = 0; i < titles.size(); i++) {
      HSSFCell cell = titleRow.createCell(i);
      cell.setCellStyle(style);
      cell.setCellValue(titles.get(i));
    }
    // 写入数据
    for (int i = 0; i < datas.size(); i++) {
      // 创建数据行
      HSSFRow dataRow = sheet.createRow(i + 1);
      List<Object> rowDatas = datas.get(i);
      if (CollectionUtils.isEmpty(rowDatas)) {
        continue;
      }
      for (int j = 0; j < rowDatas.size(); j++) {
        HSSFCell cell = dataRow.createCell(j);
        setCellValue(cell, rowDatas.get(j));
      }
    }
  }
  // 表格样式
  private static HSSFCellStyle getCellStyle(HSSFWorkbook book) {
    HSSFCellStyle style = book.createCellStyle();
    // 设置样式
    style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
    style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    style.setBorderRight(HSSFCellStyle.BORDER_THIN);
    style.setBorderTop(HSSFCellStyle.BORDER_THIN);
    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    return style;
  }
  // 设置字体
  private static HSSFFont getFont(HSSFWorkbook book) {
    HSSFFont font = book.createFont();
    font.setColor(HSSFColor.VIOLET.index);
    font.setFontHeightInPoints((short) 12);
    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    return font;
  }
  // 单元格填充数据
  private static void setCellValue(HSSFCell cell, Object value) {
    if (null == value) {
      return;
    }
    if (value instanceof Boolean) {
      cell.setCellValue((Boolean) value);
    } else if (value instanceof Date) {
      cell.setCellValue(DateUtils.dateToString((Date) value));
    } else if (value instanceof Calendar) {
      cell.setCellValue((Calendar) value);
    } else if (value instanceof Double) {
      cell.setCellValue((Double) value);
    } else if (value instanceof String) {
      if (((String) value).length() > 32767) {
        value = ((String) value).substring(0, 32767);
      }
      cell.setCellValue((String) value);
    } else {
      cell.setCellValue(value.toString());
    }
  }
  public static ExcelVO byte2BigExcel(byte[] bytes, int type) throws IOException, OpenXML4JException, SAXException {
    ExcelVO excelVO = null;
    if (IdaConstants.EXCEL_TYPE_XLS == type) { // 处理excel2003文件
      // ExcelXlsReader excelXls = new ExcelXlsReader();
      // excelXls.process(fileName);
      // 暂时2003用老的方式处理
      return byte2Excel(bytes, type);
    } else if (IdaConstants.EXCEL_TYPE_XLSX == type) {// 处理excel2007文件
      ExcelXlsxReader excelXlsxReader = new ExcelXlsxReader();
      excelVO = excelXlsxReader.process(bytes);
    } else {
      return null;
    }
    return excelVO;
  }
  /**
   * 
   * 将字节流转换为excel对象
   * 
   * @param bytes
   *            内容
   * @param type
   *            文件类型
   * @return excel对象
   */
  public static ExcelVO byte2Excel(byte[] bytes, int type) {
    Workbook wb = null;
    InputStream is = new ByteArrayInputStream(bytes);
    if (IdaConstants.EXCEL_TYPE_XLS == type) {
      try {
        wb = new HSSFWorkbook(is);
      } catch (IOException e) {
        LOGGER.error(e.getMessage());
        return null;
      }
    } else if (IdaConstants.EXCEL_TYPE_XLSX == type) {
      try {
        wb = new XSSFWorkbook(is);
      } catch (IOException e) {
        LOGGER.error(e.getMessage());
        return null;
      }
    } else {
      return null;
    }
    ExcelVO excelVO = new ExcelVO();
    int sheetCount = wb.getNumberOfSheets();
    if (sheetCount == 0) {
      return excelVO;
    }
    List<SheetVO> sheets = new ArrayList<SheetVO>();
    excelVO.setSheets(sheets);
    // 计算公式
    FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
    for (int i = 0; i < sheetCount; i++) {
      SheetVO sheetVO = loadSheet(wb.getSheetAt(i), evaluator);
      if (null == sheetVO || CollectionUtils.isEmpty(sheetVO.getTitles())) {
        continue;
      }
      sheets.add(sheetVO);
    }
    return excelVO;
  }
  private static SheetVO loadSheet(Sheet sheet, FormulaEvaluator evaluator) {
    SheetVO sheetVO = new SheetVO();
    sheetVO.setName(sheet.getSheetName());
    // 总行数
    int rownum = sheet.getPhysicalNumberOfRows();
    if (rownum == 0) {
      return null;
    }
    // 获取第一行
    Row titleRow = sheet.getRow(0);
    // 列数
    int coloumNum = sheet.getRow(0).getPhysicalNumberOfCells();
    // 表头
    List<String> titles = new ArrayList<>(coloumNum);
    for (int i = 0; i < coloumNum; i++) {
      String titleStr = titleRow.getCell(i).toString().trim();
      // 处理特殊字符,全部替换为下划线,避免SQL报错,只保留汉字,字母,数字
      String patten = "[^\u4e00-\u9fa5a-zA-Z0-9]";
      titleStr = titleStr.replaceAll(patten, "_");
      if (StringUtils.isBlank(titleStr)) {
        throw new ServiceException("表格的第一行必须有值");
      }
      // 处理表头过长
      if (titleStr.length() > 40) {
        titleStr = titleStr.substring(0, 40);
      }
      titles.add(titleStr);
    }
    sheetVO.setTitles(titles);
    // 只有表头,没有数据
    if (rownum == 1) {
      return sheetVO;
    }
    // 装数据
    List<RowVO> datas = new ArrayList<RowVO>();
    for (int i = 1; i < rownum; i++) {
      Row dataRow = sheet.getRow(i);
      if (null == dataRow) {
        continue;
      }
      RowVO rowVO = new RowVO();
      datas.add(rowVO);
      List<CellVO> cells = new ArrayList<CellVO>();
      rowVO.setCells(cells);
      for (int j = 0; j < coloumNum; j++) {
        String cellStr = "";
        Cell cell = dataRow.getCell(j);
        if (null == cell) {
          cells.add(null);
          continue;
        }
        CellVO cellVO = new CellVO();
        int type = cell.getCellType();
        if (Cell.CELL_TYPE_FORMULA == type) {
          CellValue tempCellValue = evaluator.evaluate(cell);
          double iCellValue = tempCellValue.getNumberValue();
          cellStr = iCellValue + "";
        }
        if (Cell.CELL_TYPE_NUMERIC == type) {
          if (DateUtil.isCellDateFormatted(cell)) {
            cellVO.setDataType(CellVO.DATA_TYPE_DATE);
            Date date = DateUtil.getJavaDate(cell.getNumericCellValue());
            cellStr = DateUtils.dateToString(date);
          } else {
            cellVO.setDataType(CellVO.DATA_TYPE_NUMERIC);
            // 处理数字精度和科学计数法
            BigDecimal bd = new BigDecimal(cell.toString());
            cellStr = bd.toPlainString();
          }
        } else {
          cellVO.setDataType(CellVO.DATA_TYPE_STRING);
          cellStr = cell.toString();
        }
        cellVO.setValue(cellStr);
        cells.add(cellVO);
      }
    }
    sheetVO.setDatas(datas);
    return sheetVO;
  }
  /**
   * 
   * 获取excel表头和本地数据表字段名称映射
   * 
   * @param sheetVO
   *            sheet页
   * @return 映射关系 key:原始名称 value:本地存储表字段名称和数据类型
   */
  public static Map<String, Map<String, String>> getColMapping(SheetVO sheetVO) {
    List<String> titles = sheetVO.getTitles();
    List<RowVO> datas = sheetVO.getDatas();
    RowVO row = null;
    if (CollectionUtils.isNotEmpty(datas)) {
      row = datas.get(0);
    }
    Map<String, Map<String, String>> map = new HashMap<String, Map<String, String>>();
    for (int i = 0; i < titles.size(); i++) {
      Map<String, String> temMap = new HashMap<>();
      String localCol = "col_" + i;
      temMap.put("name", localCol);
      String type = IdaConstants.DATA_TYPE_VARCHAR;
      if (null != row) {
        CellVO cell = row.getCells().get(i);
        if (null != cell) {
          int dataType = cell.getDataType();
          if (CellVO.DATA_TYPE_NUMERIC == dataType) {
            type = IdaConstants.DATA_TYPE_NUMERIC;
          }
          if (CellVO.DATA_TYPE_DATE == dataType) {
            type = IdaConstants.DATA_TYPE_TIMESTAMP;
          }
        }
      }
      temMap.put("type", type);
      map.put(titles.get(i), temMap);
    }
    return map;
  }
//   public static void main(String[] args) {
//   File f = new File("e://安徽业绩考核综合指标2.xlsx");
//   FileInputStream fs;
//   try {
//   fs = new FileInputStream(f);
//   ExcelVO excel = byte2BigExcel(IOUtils.toByteArray(fs),
//   IdaConstants.EXCEL_TYPE_XLSX);
//   Map<String,Map<String,String>> da =
//   getColMapping(excel.getSheets().get(0));
//   System.out.println();
//   } catch (Exception e) {
//   // TODO Auto-generated catch block
//   e.printStackTrace();
//   }
//   }
}

ExcelVO

/*
 * 文件名:Excel.java
 * 版权:Copyright by aostarit
 * 描述:excel对象
 * 
 * 创建时间:2019年5月17日
 */
package com.aostar.ida.framework.util.excel;
import java.util.List;
import com.alibaba.fastjson.JSONObject;
/**
 * excel 实体对象
 */
public class ExcelVO {
    /**
     * sheet页
     */
    private List<SheetVO> sheets;
    public List<SheetVO> getSheets() {
        return sheets;
    }
    public void setSheets(List<SheetVO> sheets) {
        this.sheets = sheets;
    }
    public String toString(){
        JSONObject jobj = (JSONObject)JSONObject.toJSON(this);
        return jobj.toJSONString();
    }
}

ExcelXlsReader

/*
 * 文件名:ExcelXlsReader.java
 * 版权:Copyright by aostarit
 * 描述:处理excel2003,暂时未使用
 * 
 * 创建时间:2019年5月6日
 */
package com.aostar.ida.framework.util.excel;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.eventusermodel.EventWorkbookBuilder;
import org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener;
import org.apache.poi.hssf.eventusermodel.HSSFEventFactory;
import org.apache.poi.hssf.eventusermodel.HSSFListener;
import org.apache.poi.hssf.eventusermodel.HSSFRequest;
import org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener;
import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord;
import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord;
import org.apache.poi.hssf.model.HSSFFormulaParser;
import org.apache.poi.hssf.record.BOFRecord;
import org.apache.poi.hssf.record.BlankRecord;
import org.apache.poi.hssf.record.BoolErrRecord;
import org.apache.poi.hssf.record.BoundSheetRecord;
import org.apache.poi.hssf.record.FormulaRecord;
import org.apache.poi.hssf.record.LabelRecord;
import org.apache.poi.hssf.record.LabelSSTRecord;
import org.apache.poi.hssf.record.NumberRecord;
import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.SSTRecord;
import org.apache.poi.hssf.record.StringRecord;
import org.apache.poi.hssf.usermodel.HSSFDataFormatter;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
/**
 * @author 
 * @create 2018-01-19 14:18
 * @desc 用于解决.xls2003版本大数据量问题
 **/
public class ExcelXlsReader implements HSSFListener {
    private int minColums = -1;
    private POIFSFileSystem fs;
    /**
     * 总行数
     */
    private int totalRows = 0;
    /**
     * 上一行row的序号
     */
    private int lastRowNumber;
    /**
     * 上一单元格的序号
     */
    private int lastColumnNumber;
    /**
     * 是否输出formula,还是它对应的值
     */
    private boolean outputFormulaValues = true;
    /**
     * 用于转换formulas
     */
    private EventWorkbookBuilder.SheetRecordCollectingListener workbookBuildingListener;
    // excel2003工作簿
    private HSSFWorkbook stubWorkbook;
    private SSTRecord sstRecord;
    private FormatTrackingHSSFListener formatListener;
    private final HSSFDataFormatter formatter = new HSSFDataFormatter();
    /**
     * 文件的绝对路径
     */
    private String filePath = "";
    // 表索引
    private int sheetIndex = 0;
    private BoundSheetRecord[] orderedBSRs;
    @SuppressWarnings("unchecked")
    private ArrayList boundSheetRecords = new ArrayList();
    private int nextRow;
    private int nextColumn;
    private boolean outputNextStringRecord;
    // 当前行
    private int curRow = 0;
    // 存储一行记录所有单元格的容器
    private List<String> cellList = new ArrayList<String>();
    /**
     * 判断整行是否为空行的标记
     */
    private boolean flag = false;
    @SuppressWarnings("unused")
    private String sheetName;
    /**
     * 遍历excel下所有的sheet
     *
     * @param fileName
     * @throws Exception
     */
    public int process(String fileName)
        throws Exception {
        filePath = fileName;
        this.fs = new POIFSFileSystem(new FileInputStream(fileName));
        MissingRecordAwareHSSFListener listener = new MissingRecordAwareHSSFListener(this);
        formatListener = new FormatTrackingHSSFListener(listener);
        HSSFEventFactory factory = new HSSFEventFactory();
        HSSFRequest request = new HSSFRequest();
        if (outputFormulaValues) {
            request.addListenerForAllRecords(formatListener);
        } else {
            workbookBuildingListener = new EventWorkbookBuilder.SheetRecordCollectingListener(formatListener);
            request.addListenerForAllRecords(workbookBuildingListener);
        }
        factory.processWorkbookEvents(request, fs);
        return totalRows; // 返回该excel文件的总行数,不包括首列和空行
    }
    /**
     * HSSFListener 监听方法,处理Record
     * 处理每个单元格
     * @param record
     */
    @SuppressWarnings("unchecked")
    public void processRecord(Record record) {
        int thisRow = -1;
        int thisColumn = -1;
        String thisStr = null;
        String value = null;
        switch (record.getSid()) {
            case BoundSheetRecord.sid:
                boundSheetRecords.add(record);
                break;
            case BOFRecord.sid: // 开始处理每个sheet
                BOFRecord br = (BOFRecord)record;
                if (br.getType() == BOFRecord.TYPE_WORKSHEET) {
                    // 如果有需要,则建立子工作簿
                    if (workbookBuildingListener != null && stubWorkbook == null) {
                        stubWorkbook = workbookBuildingListener.getStubHSSFWorkbook();
                    }
                    if (orderedBSRs == null) {
                        orderedBSRs = BoundSheetRecord.orderByBofPosition(boundSheetRecords);
                    }
                    sheetName = orderedBSRs[sheetIndex].getSheetname();
                    sheetIndex++ ;
                }
                break;
            case SSTRecord.sid:
                sstRecord = (SSTRecord)record;
                break;
            case BlankRecord.sid: // 单元格为空白
                BlankRecord brec = (BlankRecord)record;
                thisRow = brec.getRow();
                thisColumn = brec.getColumn();
                thisStr = "";
                cellList.add(thisColumn, thisStr);
                break;
            case BoolErrRecord.sid: // 单元格为布尔类型
                BoolErrRecord berec = (BoolErrRecord)record;
                thisRow = berec.getRow();
                thisColumn = berec.getColumn();
                thisStr = berec.getBooleanValue() + "";
                cellList.add(thisColumn, thisStr);
                checkRowIsNull(thisStr); // 如果里面某个单元格含有值,则标识该行不为空行
                break;
            case FormulaRecord.sid:// 单元格为公式类型
                FormulaRecord frec = (FormulaRecord)record;
                thisRow = frec.getRow();
                thisColumn = frec.getColumn();
                if (outputFormulaValues) {
                    if (Double.isNaN(frec.getValue())) {
                        outputNextStringRecord = true;
                        nextRow = frec.getRow();
                        nextColumn = frec.getColumn();
                    } else {
                        thisStr = '"' + HSSFFormulaParser.toFormulaString(stubWorkbook, frec.getParsedExpression()) + '"';
                    }
                } else {
                    thisStr = '"' + HSSFFormulaParser.toFormulaString(stubWorkbook, frec.getParsedExpression()) + '"';
                }
                cellList.add(thisColumn, thisStr);
                checkRowIsNull(thisStr); // 如果里面某个单元格含有值,则标识该行不为空行
                break;
            case StringRecord.sid: // 单元格中公式的字符串
                if (outputNextStringRecord) {
                    StringRecord srec = (StringRecord)record;
                    thisStr = srec.getString();
                    thisRow = nextRow;
                    thisColumn = nextColumn;
                    outputNextStringRecord = false;
                }
                break;
            case LabelRecord.sid:
                LabelRecord lrec = (LabelRecord)record;
                curRow = thisRow = lrec.getRow();
                thisColumn = lrec.getColumn();
                value = lrec.getValue().trim();
                value = value.equals("") ? "" : value;
                cellList.add(thisColumn, value);
                checkRowIsNull(value); // 如果里面某个单元格含有值,则标识该行不为空行
                break;
            case LabelSSTRecord.sid: // 单元格为字符串类型
                LabelSSTRecord lsrec = (LabelSSTRecord)record;
                curRow = thisRow = lsrec.getRow();
                thisColumn = lsrec.getColumn();
                if (sstRecord == null) {
                    cellList.add(thisColumn, "");
                } else {
                    value = sstRecord.getString(lsrec.getSSTIndex()).toString().trim();
                    value = value.equals("") ? "" : value;
                    cellList.add(thisColumn, value);
                    checkRowIsNull(value); // 如果里面某个单元格含有值,则标识该行不为空行
                }
                break;
            case NumberRecord.sid: // 单元格为数字类型
                NumberRecord numrec = (NumberRecord)record;
                curRow = thisRow = numrec.getRow();
                thisColumn = numrec.getColumn();
                // 第一种方式
                // value = formatListener.formatNumberDateCell(numrec).trim();//这个被写死,采用的m/d/yy h:mm格式,不符合要求
                // 第二种方式,参照formatNumberDateCell里面的实现方法编写
                Double valueDouble = ((NumberRecord)numrec).getValue();
                String formatString = formatListener.getFormatString(numrec);
                if (formatString.contains("m/d/yy")) {
                    formatString = "yyyy-MM-dd hh:mm:ss";
                }
                int formatIndex = formatListener.getFormatIndex(numrec);
                value = formatter.formatRawCellContents(valueDouble, formatIndex, formatString).trim();
                value = value.equals("") ? "" : value;
                // 向容器加入列值
                cellList.add(thisColumn, value);
                checkRowIsNull(value); // 如果里面某个单元格含有值,则标识该行不为空行
                break;
            default:
                break;
        }
        // 遇到新行的操作
        if (thisRow != -1 && thisRow != lastRowNumber) {
            lastColumnNumber = -1;
        }
        // 空值的操作
        if (record instanceof MissingCellDummyRecord) {
            MissingCellDummyRecord mc = (MissingCellDummyRecord)record;
            curRow = thisRow = mc.getRow();
            thisColumn = mc.getColumn();
            cellList.add(thisColumn, "");
        }
        // 更新行和列的值
        if (thisRow > -1) lastRowNumber = thisRow;
        if (thisColumn > -1) lastColumnNumber = thisColumn;
        // 行结束时的操作
        if (record instanceof LastCellOfRowDummyRecord) {
            if (minColums > 0) {
                // 列值重新置空
                if (lastColumnNumber == -1) {
                    lastColumnNumber = 0;
                }
            }
            lastColumnNumber = -1;
            if (flag && curRow != 0) { // 该行不为空行且该行不是第一行,发送(第一行为列名,不需要)
                // ExcelReaderUtil.sendRows(filePath, sheetName, sheetIndex, curRow + 1, cellList); //每行结束时,调用sendRows()方法
                totalRows++ ;
            }
            // 清空容器
            cellList.clear();
            flag = false;
        }
    }
    /**
     * 如果里面某个单元格含有值,则标识该行不为空行
     * @param value
     */
    public void checkRowIsNull(String value) {
        if (value != null && !"".equals(value)) {
            flag = true;
        }
    }
}


相关文章
|
19天前
|
API
【sgUpload】自定义组件:自定义上传组件,支持上传文件夹及其子文件夹文件、批量上传,批量上传会有右下角上传托盘出现,支持本地上传图片转换为Base64image。
【sgUpload】自定义组件:自定义上传组件,支持上传文件夹及其子文件夹文件、批量上传,批量上传会有右下角上传托盘出现,支持本地上传图片转换为Base64image。
|
4月前
ant-design Upload上传组件使用 编辑功能图片回显
ant-design Upload上传组件使用 编辑功能图片回显
167 0
|
8月前
针对FastAdmin新增上传多个图片,新增上传的视频的预览效果
针对FastAdmin新增上传多个图片,新增上传的视频的预览效果
388 0
|
9月前
文件上传,下载,预览,删除(File),分页接口(四)
文件上传,下载,预览,删除(File),分页接口
28 0
|
9月前
|
存储
Photoshop合并多个图片为PDF格式文件的(PDF文件编辑删除页面及合并的操作方法)解决方案
Photoshop合并多个图片为PDF格式文件的(PDF文件编辑删除页面及合并的操作方法)解决方案
194 0
|
4月前
|
小程序 应用服务中间件 Shell
laravel8(三)文件上传提示 “The file deos not exits ” ,但确实已经上传了文件
Laravel 文件上传提示 “The file "" deos not exits ” ,但确实已经上传了文件
36 1
|
9月前
|
JavaScript Java
文件上传,下载,预览,删除(File),分页接口(二)
文件上传,下载,预览,删除(File),分页接口
135 0
|
9月前
|
XML Java 数据库
文件上传,下载,预览,删除(File),分页接口(一)
文件上传,下载,预览,删除(File),分页接口
52 0
|
9月前
|
存储 Java
Java实现文件上传到本地(自定义保存路径)
Java实现文件上传到本地(自定义保存路径)
611 0
|
9月前
|
安全 前端开发
fastadmin自定义excel文件导入,实现文件上传功能 --已实现
fastadmin自定义excel文件导入,实现文件上传功能 --已实现
527 0