1. (各自根据具体的poi版本进行相应的替换即可)
  2.  
  3. package com.br.loan.strategy.common.utils;
  4.  
  5. import lombok.extern.slf4j.Slf4j;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.xssf.streaming.SXSSFSheet;
    import org.apache.poi.xssf.streaming.SXSSFWorkbook;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  6.  
  7. import java.io.*;
    import java.util.*;
  8.  
  9. /**
    * @Company:
    * @Author: shaobin.fu
    * @Date: 2018/9/6 16:33
    * @Description:
    */
    @Slf4j
    public class Excel {
    //总行数
    private int totalRows = 0;
    //总列数
    private int totalCells = 0;
    //错误信息
    private String errorInfo;
  10.  
  11. public Excel() {
    }
  12.  
  13. //得到总行数
    public int getTotalRows() {
    return totalRows;
    }
  14.  
  15. //得到总行数
    public int getTotalCells() {
    return totalCells;
    }
  16.  
  17. //得到错误信息
    public String getErrorInfo() {
    return errorInfo;
    }
  18.  
  19. /**
    * @描述:验证excel文件
    * @时间:2012-08-29 下午16:27:15
    * @参数:@param filePath 文件完整路径
    * @参数:@return
    * @返回值:boolean
    */
    public boolean validateExcel(String filePath) {
    /** 检查文件名是否为空或者是否是Excel格式的文件 */
    if (filePath == null || !(WDWUtil.isExcel2003(filePath) || WDWUtil.isExcel2007(filePath))) {
    errorInfo = "文件名不是excel格式";
    return false;
    }
    /** 检查文件是否存在 */
    File file = new File(filePath);
    if (file == null || !file.exists()) {
    errorInfo = "文件不存在";
    return false;
    }
    return true;
    }
  20.  
  21. /**
    * @描述:根据文件名读取excel文件
    * @时间:2012-08-29 下午16:27:15
    * @参数:@param filePath 文件完整路径
    * @参数:@return
    * @返回值:List
    */
    public List<List<String>> read(String filePath) {
    List<List<String>> dataLst = new ArrayList<List<String>>();
    InputStream is = null;
    try {
    /** 验证文件是否合法 */
    if (!validateExcel(filePath)) {
    System.out.println(errorInfo);
    return null;
    }
    /** 判断文件的类型,是2003还是2007 */
    boolean isExcel2003 = true;
    if (WDWUtil.isExcel2007(filePath)) {
    isExcel2003 = false;
    }
    /** 调用本类提供的根据流读取的方法 */
    File file = new File(filePath);
    is = new FileInputStream(file);
    dataLst = read(is, isExcel2003);
    is.close();
    } catch (Exception ex) {
    ex.printStackTrace();
    } finally {
    if (is != null) {
    try {
    is.close();
    } catch (IOException e) {
    is = null;
    e.printStackTrace();
    }
    }
    }
    /** 返回最后读取的结果 */
    return dataLst;
    }
  22.  
  23. /**
    * @描述:根据文件名读取excel文件,以列讀取
    * @时间:2012-08-29 下午16:27:15
    * @参数:@param filePath 文件完整路径
    * @参数:@return
    * @返回值:List
    */
  24.  
  25. /*public Map<Integer, Integer> readByColumn(String filePath) {
  26.  
  27. Map<Integer, Integer> dataLst = new HashMap<>();
    InputStream is = null;
    try {
    *//** 验证文件是否合法 *//*
    if (!validateExcel(filePath)) {
    System.out.println(errorInfo);
    return null;
    }
    *//** 判断文件的类型,是2003还是2007 *//*
    boolean isExcel2003 = true;
    if (WDWUtil.isExcel2007(filePath)) {
    isExcel2003 = false;
    }
    *//** 调用本类提供的根据流读取的方法 *//*
    File file = new File(filePath);
    is = new FileInputStream(file);
    dataLst = readByColumn(is, isExcel2003);
    is.close();
    } catch (Exception ex) {
    ex.printStackTrace();
    } finally {
    if (is != null) {
    try {
    is.close();
    } catch (IOException e) {
    is = null;
    e.printStackTrace();
    }
    }
    }
    *//** 返回最后读取的结果 *//*
    return dataLst;
    }*/
  28.  
  29. /**
    * @描述:根据流读取Excel文件
    * @时间:2012-08-29 下午16:40:15
    * @参数:@param inputStream
    * @参数:@param isExcel2003
    * @参数:@return
    * @返回值:List
    */
  30.  
  31. public List<List<String>> read(InputStream inputStream, boolean isExcel2003) {
  32.  
  33. List<List<String>> dataLst = null;
    try {
    /** 根据版本选择创建Workbook的方式 */
    Workbook wb = null;
    if (isExcel2003) {
    wb = new HSSFWorkbook(inputStream);
    } else {
    wb = new XSSFWorkbook(inputStream);
    }
    dataLst = read(wb);
    } catch (IOException e) {
    e.printStackTrace();
    }
    return dataLst;
  34.  
  35. }
  36.  
  37. /**
    * @描述:根据流读取Excel文件,以列讀取
    * @时间:2012-08-29 下午16:40:15
    * @参数:@param inputStream
    * @参数:@param isExcel2003
    * @参数:@return
    * @返回值:List
    */
  38.  
  39. public Map<Integer, Integer> readByColumn(InputStream inputStream, boolean isExcel2003) {
    Map<Integer, Integer> dataLst = null;
    try {
    /** 根据版本选择创建Workbook的方式 */
    Workbook wb = null;
    if (isExcel2003) {
    wb = new HSSFWorkbook(inputStream);
    } else {
    wb = new XSSFWorkbook(inputStream);
    }
    dataLst = readByColumn(wb);
    } catch (IOException e) {
    e.printStackTrace();
    }
    return dataLst;
    }
  40.  
  41. /**
    * @描述:读取数据,以行读取
    * @时间:2012-08-29 下午16:50:15
    * @参数:@param Workbook
    * @参数:@return
    * @返回值:List<List<String>>
    */
  42.  
  43. private List<List<String>> read(Workbook wb) {
  44.  
  45. List<List<String>> dataLst = new ArrayList<List<String>>();
    /** 得到第一个shell */
    Sheet sheet = wb.getSheetAt(0);
    /** 得到Excel的行数 */
    this.totalRows = sheet.getPhysicalNumberOfRows();
    /** 得到Excel的列数 */
    if (this.totalRows >= 1 && sheet.getRow(0) != null) {
    this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
    }
  46.  
  47. /** 循环Excel的行 */
  48.  
  49. for (int r = 0; r < this.totalRows; r++) {
    Row row = sheet.getRow(r);
    if (row == null) {
    continue;
    }
    List<String> rowLst = new ArrayList<String>();
  50.  
  51. /** 循环Excel的列 */
    for (int c = 0; c < this.getTotalCells(); c++) {
    Cell cell = row.getCell(c);
    String cellValue = "";
    if (null != cell) {
    // 以下是判断数据的类型
    switch (cell.getCellType()) {
    case HSSFCell.CELL_TYPE_NUMERIC: // 数字
    cellValue = cell.getNumericCellValue() + "";
    break;
  52.  
  53. case HSSFCell.CELL_TYPE_STRING: // 字符串
    cellValue = cell.getStringCellValue();
    break;
  54.  
  55. case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
    cellValue = cell.getBooleanCellValue() + "";
    break;
  56.  
  57. case HSSFCell.CELL_TYPE_FORMULA: // 公式
    cellValue = cell.getCellFormula() + "";
    break;
  58.  
  59. case HSSFCell.CELL_TYPE_BLANK: // 空值
    cellValue = "";
    break;
  60.  
  61. case HSSFCell.CELL_TYPE_ERROR: // 故障
    cellValue = "非法字符";
    break;
  62.  
  63. default:
    cellValue = "未知类型";
    break;
    }
    }
    rowLst.add(cellValue);
    }
    /** 保存第r行的第c列 */
    dataLst.add(rowLst);
    }
    return dataLst;
    }
  64.  
  65. /**
    * @描述:读取数据,以列读取
    * @时间:2012-08-29 下午16:50:15
    * @参数:@param Workbook
    * @参数:@return
    * @返回值:List<List<String>>
    */
    public Map<Integer, Integer> readByColumn(SXSSFWorkbook wb) {
  66.  
  67. Map<Integer, Integer> dataMap = new LinkedHashMap<>();
    /** 得到第一个shell */
    Sheet sheet = wb.getSheetAt(0);
    /** 得到Excel的行数 */
    this.totalRows = sheet.getPhysicalNumberOfRows();
    /** 得到Excel的列数 */
    if (this.totalRows >= 1 && sheet.getRow(0) != null) {
    this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
    }
    //从第九列开始
    for (int lie = 9; lie <= totalCells; lie++) {
    //设置为1,代表不需要删除,为0,则删除。
    dataMap.put(lie, 0);
    }
    /** 循环Excel的行(不包括第一行) */
    for (int r = 1; r < this.totalRows; r++) {
    Row row = sheet.getRow(r);
    if (row == null) {
    continue;
    }
    /** 循环Excel的列 */
    for (int c = 0; c < this.getTotalCells(); c++) {
    Cell cell = row.getCell(c);
  68.  
  69. if (null != cell&&StringUtils.isNotEmpty(cell)) {
    dataMap.put(c+1, 1);
    }
    }
    }
    return dataMap;
    }
    /**
    * @描述:读取sheet数据,以列读取
    * @时间:2012-08-29 下午16:50:15
    * @参数:@param Workbook
    * @参数:@return
    * @返回值:List<List<String>>
    */
    public Map<Integer, Integer> readSheetByColumn(Sheet sheet) {
  70.  
  71. Map<Integer, Integer> dataMap = new LinkedHashMap<>();
    /** 得到第一个shell */
    /** 得到Excel的行数 */
    this.totalRows = sheet.getPhysicalNumberOfRows();
    /** 得到Excel的列数 */
    if (this.totalRows >= 1 && sheet.getRow(0) != null) {
    this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
    }
    //从第九列开始
    for (int lie = 9; lie <= totalCells; lie++) {
    //设置为1,代表不需要删除,为0,则删除。
    dataMap.put(lie, 0);
    }
    /** 循环Excel的行(不包括第一行) */
    for (int r = 1; r < this.totalRows; r++) {
    Row row = sheet.getRow(r);
    if (row == null) {
    continue;
    }
    /** 循环Excel的列 */
    for (int c = 0; c < this.getTotalCells(); c++) {
    Cell cell = row.getCell(c);
  72.  
  73. if (null != cell&&StringUtils.isNotEmpty(cell)) {
    dataMap.put(c+1, 1);
    }
    }
    }
    return dataMap;
    }
  74.  
  75. /**
    * 删除列
    * @param sheet
    * @param columnToDelete
    */
    public void deleteColumn(SXSSFSheet sheet, int columnToDelete) {
    for (int rId = 0; rId <= sheet.getLastRowNum(); rId++) {
    Row row = sheet.getRow(rId);
    for (int cID = columnToDelete; cID <= row.getLastCellNum(); cID++) {
    Cell cOld = row.getCell(cID);
    if (cOld != null) {
    row.removeCell(cOld);
    }
    Cell cNext = row.getCell(cID + 1);
    if (cNext != null) {
    Cell cNew = row.createCell(cID, cNext.getCellTypeEnum());
    cloneCell(cNew, cNext);
    //Set the column width only on the first row.
    //Other wise the second row will overwrite the original column width set previously.
    if (rId == 0) {
    sheet.setColumnWidth(cID, sheet.getColumnWidth(cID + 1));
  76.  
  77. }
    }
    }
    }
    }
  78.  
  79. /**
    * 右边列左移
    * @param cNew
    * @param cOld
    */
    private void cloneCell(Cell cNew, Cell cOld) {
    cNew.setCellComment(cOld.getCellComment());
    cNew.setCellStyle(cOld.getCellStyle());
  80.  
  81. if (CellType.BOOLEAN == cNew.getCellTypeEnum()) {
    cNew.setCellValue(cOld.getBooleanCellValue());
    } else if (CellType.NUMERIC == cNew.getCellTypeEnum()) {
    cNew.setCellValue(cOld.getNumericCellValue());
    } else if (CellType.STRING == cNew.getCellTypeEnum()) {
    cNew.setCellValue(cOld.getStringCellValue());
    } else if (CellType.ERROR == cNew.getCellTypeEnum()) {
    cNew.setCellValue(cOld.getErrorCellValue());
    } else if (CellType.FORMULA == cNew.getCellTypeEnum()) {
    cNew.setCellValue(cOld.getCellFormula());
    }
    }
  82.  
  83. /**
    * 读取第一行的cell数据
    */
    public List<String> readFirstRow(SXSSFWorkbook wb) {
    log.info("进入readFirstRow");
    List<String> list = new ArrayList<>();
    int totalColumn=0;
    /** 得到第一个shell */
    Sheet sheet = wb.getSheetAt(0);
    /** 得到Excel的列数 */
    if (sheet.getRow(0) != null) {
    totalColumn = sheet.getRow(0).getPhysicalNumberOfCells();
    log.info("totalColumn:{}",totalColumn);
    for (int lie = 8; lie < totalColumn; lie++) {
    log.info("lie:{}",sheet.getRow(0).getCell(lie).getStringCellValue());
    list.add(sheet.getRow(0).getCell(lie).getStringCellValue());
    }
    }
    log.info("readFirst的大小:{}",list.size());
    return list;
    }
  84.  
  85. /*public static void main(String[] args) {
    File file = new File("C:\\Users\\Bairong\\Desktop\\sjfksj.xlsx");
    Excel excel = new Excel();
    try {
    FileInputStream is = new FileInputStream(file);
    Workbook wb = new XSSFWorkbook(is);
    Map<Integer, Integer> stringIntegerMap = excel.readByColumn(wb);
    Iterator<Map.Entry<Integer, Integer>> it = stringIntegerMap.entrySet().iterator();
    while (it.hasNext()) {
    Map.Entry<Integer, Integer> entry = it.next();
    System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
    if (entry.getValue()==0){
    excel.deleteColumn(wb.getSheetAt(0),entry.getKey()-1);
    }
    }
  86.  
  87. FileOutputStream fileOut = new FileOutputStream(file);
    wb.write(fileOut);
    fileOut.close();
    //excel.deleteColumn(sheet,1);
    System.out.println("删除成功");
    } catch (Exception e) {
    e.printStackTrace();
    }
    }*/
    }
  88.  
  89. /**
    * @描述:工具类
    * @时间:2012-08-29 下午16:30:40
    */
  90.  
  91. class WDWUtil {
  92.  
  93. /**
    * @描述:是否是2003的excel,返回true是2003
    * @时间:2012-08-29 下午16:29:11
    * @参数:@param filePath 文件完整路径
    * @参数:@return
    * @返回值:boolean
    */
  94.  
  95. public static boolean isExcel2003(String filePath) {
  96.  
  97. return filePath.matches("^.+\\.(?i)(xls)$");
  98.  
  99. }
  100.  
  101. /**
    * @描述:是否是2007的excel,返回true是2007
    * @时间:2012-08-29 下午16:28:20
    * @参数:@param filePath 文件完整路径
    * @参数:@return
    * @返回值:boolean
    */
  102.  
  103. public static boolean isExcel2007(String filePath) {
  104.  
  105. return filePath.matches("^.+\\.(?i)(xlsx)$");
  106.  
  107. }
  108.  
  109. public static void main(String[] args) {
    List list1 = new ArrayList();
    List list2 = new ArrayList();
    list1.add("乾隆");
    list1.add("李世民");
    list2.add("康熙");
    list2.add("李世");
    for(int i=0;i<list1.size();i++){
    if (list1.contains(list2.get(i))){
    System.out.println("结果为true");
    }else {
    System.out.println("不等");
    }
    }
  110.  
  111. }
  112.  
  113. }

poi读取excel的列和删除列的更多相关文章

  1. 使用jxl,poi读取excel文件

    作用:在java后台添加一个方法,读取导入的excel内容,根据需要返回相应的sql语句,以完成对临时表的插入操作. 使用jxl读取excel文件 package com.sixthf.bi.sapp ...

  2. java用poi读取Excel表格中的数据

    Java读写Excel的包是Apache POI(项目地址:http://poi.apache.org/),因此需要先获取POI的jar包,本实验使用的是POI 3.9稳定版.Apache POI 代 ...

  3. Java开发小技巧(六):使用Apache POI读取Excel

    前言 在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel.csv.xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化存储的, ...

  4. POI读取Excel数据

    POI读取Excel表格数据 * {所需相关jar下载: * commons-collections4-4.4.jar * commons-compress-1.19.jar * poi-4.1.1. ...

  5. POI读取Excel内容格式化

    在用POI读取Excel内容时,经常会遇到数据格式化的问题. 比如:数字12365会变为12365.0;字符串数字123也会变为123.0,甚至会被变为科学计数法.另外日期格式化也是一个头疼的问题.其 ...

  6. java使用poi读取ppt文件和poi读取excel、word示例

    java使用poi读取ppt文件和poi读取excel.word示例 http://www.jb51.net/article/48092.htm

  7. JAVA使用POI读取EXCEL文件的简单model

    一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...

  8. 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据

    1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...

  9. 使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10

    使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10 [问题点数:40分,结帖人xieyongqiu]             不显示删除回复             ...

随机推荐

  1. http请求的header的一个小细节

    今天前后端联调的时候无论如何后端都搜不到前端的token,以为是公司全局网关拦截了token,最后发现也不是,最终在无意之中发现http请求的header的key不能带有下划线,比如app_token ...

  2. 修改qt版本

    安装了qt4和qt5 /usr/lib/x86_64-linux-gnu/qt-default/qtchooser 的default.conf 第一行改成自己qmake的bin路径即可

  3. win101903版本vmware 14虚拟机插usb设备卡死

    win101903版本vmware 14虚拟机插usb设备卡死 问题的环境: win10,1903版本: vmware 14 版本: 安装的是ubuntu1604虚拟机: 当插入usb摄像头,并连接到 ...

  4. http状态码610,613

    610  请求超时 613  dns解析错误

  5. 使用Python解压zip、rar文件

    解压 zip 文件 基本解压操作 import zipfile ''' 基本格式:zipfile.ZipFile(filename[,mode[,compression[,allowZip64]]]) ...

  6. Cassandra开发入门文档第一部分

    Cassandra的特点 横向可扩展性: Cassandra部署具有几乎无限的存储和处理数据的能力.当需要额外的容量时,可以简单地将更多的机器添加到集群中.当新机器加入集群时,Cassandra需要对 ...

  7. jzy3D从入门到弃坑_4尝试使用jzy3D1.0画图失败

    jzy3D从入门到弃坑_4 尝试使用jzy3D1.0画图失败 觉得有用的话,欢迎一起讨论相互学习~Follow Me 记录一下使用jzy3D1.0失败 究其原因在于 本人才疏学浅,对于JAVA ope ...

  8. IDEA代码折叠

    IDEA代码折叠 觉得有用的话,欢迎一起讨论相互学习~Follow Me 选中内容-->右键 folding -->fold selection/remove region

  9. OpenStack(一)——OpenStack的相关概念

    (1).OpenStack概述 OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目. OpenStack是 ...

  10. idea内置tomcat中java代码热更新

    按照上图设置后,然后修改代码后按shift+F9快捷键,即可实现代码更新,这时在debug模式下会看到代码变更后的输出