ExcelUtil 拿去用不谢

package com.app.web.manger.utils;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.hssf.usermodel.HSSFCell;
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.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelUtil {

    public static Log log = LogFactory.getLog(ExcelUtil.class);
    
    public static List<Map<String,String>> ExcelToList(String filePath) throws Exception{
        
        List<Map<String,String>> mapList = new ArrayList<Map<String,String>>();
        String filetype = filePath.substring(filePath.lastIndexOf(".") + 1);
        FileInputStream fi = null;
        try {
            fi = new FileInputStream(filePath);
        } catch (FileNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        if(fi == null){
            throw new Exception("文件不存在");
        }
        //xls文件
        if("xls".equals(filetype.toLowerCase())){
            try {
                HSSFWorkbook wookbook = new HSSFWorkbook(fi);
                HSSFSheet sheet = wookbook.getSheet("Sheet1");
                int rows = sheet.getPhysicalNumberOfRows();
                
                //获取标题行
                HSSFRow title = sheet.getRow(0);
                log.info(title.getLastCellNum());
                int index = title.getFirstCellNum();
                int rowcount = title.getLastCellNum();
                for (int i = 1; i < rows; i++){
                    
                    HSSFRow row = sheet.getRow(i);
                    if(isBlankRow(row, index, rowcount)){
                        continue;
                    }
                    if (row != null){
                        Map<String,String> map = new TreeMap<String,String>();
                        int cells = title.getPhysicalNumberOfCells();
                        
                        for (int j = 0; j < cells; j++){
                            String value = "";
                            HSSFCell cell = row.getCell(j);
                            if (cell != null){
                                switch (cell.getCellType()){
                                    case HSSFCell.CELL_TYPE_FORMULA:
                                        break;
                                    case HSSFCell.CELL_TYPE_NUMERIC:
                                        cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                                        value += cell.getStringCellValue().trim();
                                        break;
                                    case HSSFCell.CELL_TYPE_STRING:
                                        value += cell.getStringCellValue().trim();
                                        break;
                                    default:
                                        value = "";
                                        break;
                                }
                            }
                            //String key = title.getCell(j).getStringCellValue().trim();
                            map.put(title.getCell(j).getStringCellValue().trim(), value);
                        }
                        
                        mapList.add(map);
                    }
                }
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch(Exception e){
                e.printStackTrace();
            }
        }else if("xlsx".equals(filetype.toLowerCase())){
            //xlsx文件
            try {
                XSSFWorkbook wookbook = new XSSFWorkbook(new FileInputStream(filePath));
                XSSFSheet sheet = wookbook.getSheet("Sheet1");
                int rows = sheet.getPhysicalNumberOfRows();
                //获取标题行
                XSSFRow title = sheet.getRow(0);
                int index = title.getFirstCellNum();
                int rowcount = title.getLastCellNum();
                for (int i = 1; i < rows; i++){
                    
                    XSSFRow row = sheet.getRow(i);
                    if(isBlankRow(row, index, rowcount)){
                        continue;
                    }
                    if (row != null){
                        Map<String,String> map = new TreeMap<String,String>();
                        int cells = title.getPhysicalNumberOfCells();
                        
                        for (int j = 0; j < cells; j++){
                            String value = "";
                            XSSFCell cell = row.getCell(j);
                            if (cell != null){
                                switch (cell.getCellType()){
                                    case HSSFCell.CELL_TYPE_FORMULA:
                                        break;
                                    case HSSFCell.CELL_TYPE_NUMERIC:
                                        cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                                        value += cell.getStringCellValue().trim();
                                        break;
                                    case HSSFCell.CELL_TYPE_STRING:
                                        value += cell.getStringCellValue().trim();
                                        break;
                                    default:
                                        value = "";
                                        break;
                                }
                            }
                            map.put(title.getCell(j).getStringCellValue().trim(), value);
                        }
                        
                        mapList.add(map);
                    }
                }
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(fi != null){
            fi.close();
        }
        return mapList;
    }
    
    public static boolean isBlankRow(HSSFRow row, int index, int rowCount){
        if(row == null){
            return true;
        }
        for(int i=index; i < rowCount; i++){
            if(row.getCell(i) != null &&
                    !"".equals(row.getCell(i).getStringCellValue().trim())){
                return false;
            }
        }
        return true;
    }
    
    public static boolean isBlankRow(XSSFRow row, int index, int rowCount){
        if(row == null){
            return true;
        }
        for(int i=index; i < rowCount; i++){
            if(row.getCell(i) != null ||
                    !"".equals(row.getCell(i).getStringCellValue().trim())){
                return false;
            }
        }
        return true;
    }
}

Hutool是一款Java工具库,提供了丰富的API,其中ExcelUtil是其中一个非常有用的工具类,可以方便地读取、写入和操作Excel文件。下面是ExcelUtil的详细使用方法: 1. 读取Excel文件 使用ExcelUtil的read方法可以读取Excel文件并返回一个List<Object[]>对象。每个Object[]代表一行数据,其中的元素是每个单元格的值。 ```java // 读取Excel文件 List<Object[]> dataList = ExcelUtil.read(FileUtil.file("test.xlsx")); for (Object[] objects : dataList) { for (Object object : objects) { System.out.print(object + "\t"); } System.out.println(); } ``` 2. 写入Excel文件 使用ExcelUtil的write方法可以将数据写入到Excel文件中。需要传入一个List<List<Object>>对象,每个List<Object>代表一行数据,其中的元素是每个单元格的值。 ```java // 写入Excel文件 List<List<Object>> dataList = new ArrayList<>(); List<Object> row1 = CollUtil.newArrayList("姓名", "年龄", "性别"); List<Object> row2 = CollUtil.newArrayList("张三", 20, "男"); List<Object> row3 = CollUtil.newArrayList("李四", 25, "女"); dataList.add(row1); dataList.add(row2); dataList.add(row3); ExcelUtil.write(dataList, FileUtil.file("test.xlsx")); ``` 3. 操作Excel文件 可以使用ExcelUtil的getCellValue和setCellValue方法来获取和设置单元格的值。 ```java // 操作Excel文件 Workbook workbook = ExcelUtil.getWorkbook(FileUtil.file("test.xlsx")); Sheet sheet = workbook.getSheetAt(0); Cell cell = sheet.getRow(1).getCell(0); System.out.println(ExcelUtil.getCellValue(cell)); ExcelUtil.setCellValue(cell, "王五"); ExcelUtil.write(workbook, FileUtil.file("test.xlsx")); ``` 以上就是ExcelUtil的详细使用方法,通过这个工具类,我们可以方便地读取、写入和操作Excel文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值