java poi 通用工具类

该博客介绍了如何使用Java的POI库创建一个通用的Excel数据导入导出工具类,包括处理异常、创建Excel工作簿、设置工作表以及将数据列表转换为Excel文件的方法。此外,还提供了将Excel文件内容转化为List对象的实现,支持从Excel文件中读取数据并验证数据完整性。
摘要由CSDN通过智能技术生成


数据导入导出工具类 

 Exception处理 

 
   public ExcelException() { 
       // TODO Auto-generated constructor stub 
   } 
 
   public ExcelException(String message) { 
       super(message); 
       // TODO Auto-generated constructor stub 
   } 
 
   public ExcelException(Throwable cause) { 
       super(cause); 
       // TODO Auto-generated constructor stub 
   } 
 
   public ExcelException(String message, Throwable cause) { 
       super(message, cause); 
       // TODO Auto-generated constructor stub 
   } 


 POI核心处理 

* @author     : SUNZK-QQ:1131341075 
* @Date       : 2018-8-23 下午9:13:21 
* @Comments   : 导入导出Excel工具类 
* @Version    : 1.0.0 
*/ 
 
 { 
 
   /** 
    * @MethodName  : listToExcel 
    * @Description : 导出Excel(可以导出到本地文件系统,也可以导出到浏览器,可
 
    * @param list      数据源 
    * @param fieldMap      类的英文属性和Excel中的中文列名的对应关系 
    * 如果需要的是引用对象的属性,则英文属性使用类似于EL表达式的格式 
    * 如:list中存放的都是student,student中又有college属性,而我们需要学院名
 
    * fieldMap.put("college.collegeName","学院名称") 
    * @param sheetName 工作表的名称 
    * @param sheetSize 每个工作表中记录的最大个数 
    * @param out       导出流 
    * @throws ExcelException 
    */ 
   public static <T>  void   listToExcel ( 
           List<T> list , 
           LinkedHashMap<String,String> fieldMap, 
           String sheetName, 
           int sheetSize, 
           OutputStream out 
           ) throws ExcelException{ 
 
 
       if(list.size()==0 || list==null){ 
           throw new ExcelException("数据源中没有任何数据"); 
       } 
 
       if(sheetSize>65535 || sheetSize<1){ 
           sheetSize=65535; 
       } 
 
       //创建工作簿并发送到OutputStream指定的地方 
       WritableWorkbook wwb; 
       try { 
           wwb = Workbook.createWorkbook(out); 
 
           //因为2003的Excel一个工作表最多可以有65536条记录,除去列头剩下
条 
           //所以如果记录太多,需要放到多个工作表中,其实就是个分页的过程 
           //1.计算一共有多少个工作表 
           double sheetNum=Math.ceil(list.size()/new 

 
           //2.创建相应的工作表,并向其中填充数据 
           for(int i=0; i<sheetNum; i++){ 
               //如果只有一个工作表的情况 
               if(1==sheetNum){ 
                   WritableSheet sheet=wwb.createSheet(sheetName, i); 
                   fillSheet(sheet, list, fieldMap, 0, list.size()-1); 
 
               //有多个工作表的情况 
               }else{ 
                   WritableSheet sheet=wwb.createSheet(sheetName+(i+1), i); 
 
                   //获取开始索引和结束索引 
                   int firstIndex=i*sheetSize; 
                   int lastIndex=(i+1)*sheetSize-1>list.size()-1 ? list.size()-1 : 

                   //填充工作表 
                   fillSheet(sheet, list, fieldMap, firstIndex, lastIndex); 
               } 
           } 
 
           wwb.write(); 
           wwb.close(); 
 
       }catch (Exception e) { 
           e.printStackTrace(); 
           //如果是ExcelException,则直接抛出 
           if(e instanceof ExcelException){ 
               throw (ExcelException)e; 
 
           //否则将其它异常包装成ExcelException再抛出 
           }else{ 
               throw new ExcelException("导出Excel失败"); 
           } 
       } 
 
   } 
 
   /** 
    * @MethodName  : listToExcel 
    * @Description : 导出Excel(可以导出到本地文件系统,也可以导出到浏览器,工
2003支持的最大值) 
    * @param list      数据源 
    * @param fieldMap      类的英文属性和Excel中的中文列名的对应关系 
    * @param out       导出流 
    * @throws ExcelException 
    */ 
   public static  <T>  void   listToExcel ( 
           List<T> list , 
           LinkedHashMap<String,String> fieldMap, 

以下是一个基于 Apache POI通用工具类,可以用于读取和写入 Excel 文件。 ``` import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.poi.ss.usermodel.Cell; 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; public class ExcelUtils { /** * 读取 Excel 文件中的数据 * * @param filePath 文件路径 * @return 读取到的数据列表 * @throws IOException */ public static List<List<String>> readExcel(String filePath) throws IOException { List<List<String>> result = new ArrayList<>(); FileInputStream inputStream = new FileInputStream(new File(filePath)); Workbook workbook = new XSSFWorkbook(inputStream); Sheet sheet = workbook.getSheetAt(0); Iterator<Row> rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); Iterator<Cell> cellIterator = row.iterator(); List<String> rowData = new ArrayList<>(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); switch (cell.getCellType()) { case STRING: rowData.add(cell.getStringCellValue()); break; case BOOLEAN: rowData.add(String.valueOf(cell.getBooleanCellValue())); break; case NUMERIC: rowData.add(String.valueOf(cell.getNumericCellValue())); break; default: rowData.add(""); } } result.add(rowData); } workbook.close(); inputStream.close(); return result; } /** * 将数据写入 Excel 文件 * * @param filePath 文件路径 * @param data 要写入的数据 * @throws IOException */ public static void writeExcel(String filePath, List<List<String>> data) throws IOException { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet(); int rownum = 0; for (List<String> rowData : data) { Row row = sheet.createRow(rownum++); int cellnum = 0; for (String cellData : rowData) { Cell cell = row.createCell(cellnum++); cell.setCellValue(cellData); } } FileOutputStream outputStream = new FileOutputStream(filePath); workbook.write(outputStream); workbook.close(); outputStream.close(); } } ``` 这个工具类包含了两个方法,`readExcel()` 方法用于读取 Excel 文件中的数据,`writeExcel()` 方法用于将数据写入到 Excel 文件中。使用时只需传入文件路径和数据即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值