poiexcel 读取引用列_poi读取excel的列和删除列

(各自根据具体的poi版本进行相应的替换即可)

package com.br.loan.strategy.common.utils;

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;

import java.io.*;

import java.util.*;

/**

* @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;

public Excel() {

}

//得到总行数

public int getTotalRows() {

return totalRows;

}

//得到总行数

public int getTotalCells() {

return totalCells;

}

//得到错误信息

public String getErrorInfo() {

return errorInfo;

}

/**

* @描述:验证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;

}

/**

* @描述:根据文件名读取excel文件

* @时间:2012-08-29 下午16:27:15

* @参数:@param filePath 文件完整路径

* @参数:@return

* @返回值:List

*/

public List> read(String filePath) {

List> dataLst = new ArrayList>();

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;

}

/**

* @描述:根据文件名读取excel文件,以列讀取

* @时间:2012-08-29 下午16:27:15

* @参数:@param filePath 文件完整路径

* @参数:@return

* @返回值:List

*/

/*public Map readByColumn(String filePath) {

Map 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;

}*/

/**

* @描述:根据流读取Excel文件

* @时间:2012-08-29 下午16:40:15

* @参数:@param inputStream

* @参数:@param isExcel2003

* @参数:@return

* @返回值:List

*/

public List> read(InputStream inputStream, boolean isExcel2003) {

List> 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;

}

/**

* @描述:根据流读取Excel文件,以列讀取

* @时间:2012-08-29 下午16:40:15

* @参数:@param inputStream

* @参数:@param isExcel2003

* @参数:@return

* @返回值:List

*/

public Map readByColumn(InputStream inputStream, boolean isExcel2003) {

Map 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;

}

/**

* @描述:读取数据,以行读取

* @时间:2012-08-29 下午16:50:15

* @参数:@param Workbook

* @参数:@return

* @返回值:List>

*/

private List> read(Workbook wb) {

List> dataLst = new ArrayList>();

/** 得到第一个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();

}

/** 循环Excel的行 */

for (int r = 0; r < this.totalRows; r++) {

Row row = sheet.getRow(r);

if (row == null) {

continue;

}

List rowLst = new ArrayList();

/** 循环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;

case HSSFCell.CELL_TYPE_STRING: // 字符串

cellValue = cell.getStringCellValue();

break;

case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean

cellValue = cell.getBooleanCellValue() + "";

break;

case HSSFCell.CELL_TYPE_FORMULA: // 公式

cellValue = cell.getCellFormula() + "";

break;

case HSSFCell.CELL_TYPE_BLANK: // 空值

cellValue = "";

break;

case HSSFCell.CELL_TYPE_ERROR: // 故障

cellValue = "非法字符";

break;

default:

cellValue = "未知类型";

break;

}

}

rowLst.add(cellValue);

}

/** 保存第r行的第c列 */

dataLst.add(rowLst);

}

return dataLst;

}

/**

* @描述:读取数据,以列读取

* @时间:2012-08-29 下午16:50:15

* @参数:@param Workbook

* @参数:@return

* @返回值:List>

*/

public Map readByColumn(SXSSFWorkbook wb) {

Map 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);

if (null != cell&&StringUtils.isNotEmpty(cell)) {

dataMap.put(c+1, 1);

}

}

}

return dataMap;

}

/**

* @描述:读取sheet数据,以列读取

* @时间:2012-08-29 下午16:50:15

* @参数:@param Workbook

* @参数:@return

* @返回值:List>

*/

public Map readSheetByColumn(Sheet sheet) {

Map 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);

if (null != cell&&StringUtils.isNotEmpty(cell)) {

dataMap.put(c+1, 1);

}

}

}

return dataMap;

}

/**

* 删除列

* @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));

}

}

}

}

}

/**

* 右边列左移

* @param cNew

* @param cOld

*/

private void cloneCell(Cell cNew, Cell cOld) {

cNew.setCellComment(cOld.getCellComment());

cNew.setCellStyle(cOld.getCellStyle());

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());

}

}

/**

* 读取第一行的cell数据

*/

public List readFirstRow(SXSSFWorkbook wb) {

log.info("进入readFirstRow");

List 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;

}

/*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 stringIntegerMap = excel.readByColumn(wb);

Iterator> it = stringIntegerMap.entrySet().iterator();

while (it.hasNext()) {

Map.Entry 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);

}

}

FileOutputStream fileOut = new FileOutputStream(file);

wb.write(fileOut);

fileOut.close();

//excel.deleteColumn(sheet,1);

System.out.println("删除成功");

} catch (Exception e) {

e.printStackTrace();

}

}*/

}

/**

* @描述:工具类

* @时间:2012-08-29 下午16:30:40

*/

class WDWUtil {

/**

* @描述:是否是2003的excel,返回true是2003

* @时间:2012-08-29 下午16:29:11

* @参数:@param filePath 文件完整路径

* @参数:@return

* @返回值:boolean

*/

public static boolean isExcel2003(String filePath) {

return filePath.matches("^.+\\.(?i)(xls)$");

}

/**

* @描述:是否是2007的excel,返回true是2007

* @时间:2012-08-29 下午16:28:20

* @参数:@param filePath 文件完整路径

* @参数:@return

* @返回值:boolean

*/

public static boolean isExcel2007(String filePath) {

return filePath.matches("^.+\\.(?i)(xlsx)$");

}

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

if (list1.contains(list2.get(i))){

System.out.println("结果为true");

}else {

System.out.println("不等");

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值