`

ExcelUtil——基本工具类

阅读更多

public class ExcelUtil {
 
 private static final Log log = LogFactory.getLog(ExcelUtil.class);//日志
 
 /**
  * 創建Excel對象
  * @param excelBean
  * @return
  */
 public static HSSFWorkbook creatExcel(ExcelBean excelBean){
  HSSFWorkbook wb = new HSSFWorkbook(); //創建Excel工作薄
  //在Excel工作薄中建一工作表,默認為缺省值
//  HSSFSheet sheet = wb.createSheet();
        HSSFSheet sheet = wb.createSheet(excelBean.getSheetName());
        //設置工作表各列寬度
       // setColumnWidth(sheet, excelBean.getWidth());
        //設置字體,樣式
        //HSSFFont font = setFont(wb, "宋體");
        //HSSFCellStyle style = setCellStyle(wb, font);
        //設置第一行
        List<String> titleList = excelBean.getTitleList();
        setRowValue(sheet, titleList, 0); //在索引0的位置創建行(最頂端的行)
        //設置數據行
        List dataList = excelBean.getDataList();
        if(dataList != null){
         for(int i=0; i<dataList.size(); i++){          
          List rowList = (List) dataList.get(i);
          setRowValue(sheet, rowList, i+1); //在索引1的位置創建行(第2行)          
         }
        }
        return wb;
 }
 
 /**
  * 設置行值
  * @param sheet
  * @param List
  * @return
  */
 public static HSSFSheet setRowValue(HSSFSheet sheet, List<String> list,int rowNo){
  if(list != null){
   //在索引rowNo的位置創建行
   HSSFRow rowTitle = sheet.createRow(rowNo);
   for(int i= 0 ; i<list.size();i++){
    String title = list.get(i);
    //從索引0的位置開始創建單元格(左上端)
    HSSFCell cell = rowTitle.createCell((short)i);
    cell.setCellValue(title); //設置單元格內容
   }
  }
  return sheet;
 }
 
 /**
  * 下載Excel
  * @param wb
  * @param filename MemberList.xls
  * @param response
  * @return
  */
 public static boolean downloadExcel(HSSFWorkbook wb, String filename, HttpServletResponse response){
  boolean flag = true;  
  //設置輸入流
  OutputStream output = null;
  try {
//   設置響應類型
   response.setHeader("Content-disposition", "attachment;filename="+new String(filename.getBytes("gbk"),"ISO-8859-1"));
   response.setContentType("application/x-msdownload");
   
   output = response.getOutputStream();   
   wb.write(output);//輸出到網頁中
   output.flush();
   log.info("下載Excel:" + filename + ", 成功!");
  } catch (Exception e) {
   flag = false;
   log.info("下載Excel:" + filename + ", 失敗!");
   e.printStackTrace();
  } finally{
   try {
    output.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  return flag;  
 }
 
 /**
  * 下載Excel
  * add by zhangde 2011-3-17
  * @param wb
  * @param filename MemberList.xls
  * @param response
  * @return
  */
 public static boolean downloadExcelEncode(String encoding, HSSFWorkbook wb, String filename, HttpServletResponse response){
  boolean flag = true;  
  //設置輸入流
  OutputStream output = null;
  try {
//   設置響應類型,用utf-8,可能会出现高位(前面)被截。gbk在简体操作系统中不会。
//   response.setHeader("Content-disposition", "attachment;filename="+new String(filename.getBytes(encoding),"ISO-8859-1"));
   response.setHeader("Content-disposition", "attachment;filename="+URLEncoder.encode(filename, encoding));
   System.out.println("filename=" + filename);
   System.out.println("URLEncoderfilename=" + URLEncoder.encode(filename, encoding));
   response.setContentType("application/x-msdownload");
   
   output = response.getOutputStream();   
   wb.write(output);//輸出到網頁中
   output.flush();
   log.info("下載Excel:" + filename + ", 成功!");
  } catch (Exception e) {
   flag = false;
   log.info("下載Excel:" + filename + ", 失敗!");
   e.printStackTrace();
  } finally{
   try {
    output.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  return flag;  
 }
 
 
 /**
  * 下載Excel
  * @param wb
  * @param filename MemberList.xls
  * @param response
  * @param encoding 編碼參數 例如 gbk, utf-8
  * @return
  */
 public static boolean downloadExcel(String encoding, HSSFWorkbook wb, String filename, HttpServletResponse response){
  boolean flag = true;  
  //設置輸入流
  OutputStream output = null;
  String name = "";
  try {
//   設置響應類型
   name = FileUtil.toEncodeString(filename, encoding); // 文件名編碼
   response.setHeader("Content-disposition", "attachment;filename=" + name);
   response.setContentType("application/x-msdownload");
   output = response.getOutputStream();   
   wb.write(output);//輸出到網頁中
   output.flush();
   log.info("下載Excel:" + filename + ", 成功!");
  } catch (Exception e) {
   flag = false;
   log.info("下載Excel:" + filename + ", 失敗!");
   e.printStackTrace();
  } finally{
   try {
    output.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  return flag;  
 }
 
 /**
  * 導入文件(excel)
  * @param path   路徑+檔案名
  * @param line   從第幾欄開始
  * @param rowLen 到第幾列結束
  * @return list
  * @throws Exception
  */
 public static List<Object> importData(InputStream inputStream,int atRow, int line, int rowLen) throws Exception{ 
  List<Object> tmpList = new ArrayList<Object>(); 
  POIFSFileSystem pfs = new POIFSFileSystem(inputStream);
  HSSFWorkbook wb = new HSSFWorkbook(pfs);
  HSSFSheet sheet = wb.getSheetAt(0);
  HSSFRow row = null;
  try{  
   int totalRow = sheet.getLastRowNum(); //excel資料行數
   if(totalRow>0){ //判斷excel是否為空
    for(int i = atRow ; i <=totalRow; i++){
        List<Object> rowList = new ArrayList<Object>(); 
        row = sheet.getRow(i);
        if(row!=null){ //判斷行是否為空
         for(int j = line; j < rowLen; j++){ 
       HSSFCell cell = row.getCell((short) j);
       if(cell == null){ //判斷列是否為空
        rowList.add("");
       }else{
        int ctype = cell.getCellType();
        switch(ctype){
         // 處理string部份
         case HSSFCell.CELL_TYPE_BLANK:
          rowList.add("");
         break;
         
         case HSSFCell.CELL_TYPE_STRING:
          rowList.add(cell.getRichStringCellValue().getString().trim());
         break;
         
         //處理number部份
         case HSSFCell.CELL_TYPE_NUMERIC:
          
          if (HSSFDateUtil.isCellDateFormatted(cell)) { // 是否為日期型
           System.out.print( cell.getDateCellValue());
           //須轉date格式
           rowList.add(cell.getDateCellValue());
             }else{
              
           double tmpdouble = cell.getNumericCellValue();
           if(tmpdouble - (int)tmpdouble < Double.MIN_VALUE) {
            
            //int
            rowList.add(Integer.toString((int)tmpdouble));
           }else{
            
            //double
            rowList.add(Double.toString(cell.getNumericCellValue()));
           }
             }
         break;
         
         //處理boolean部份
         case HSSFCell.CELL_TYPE_BOOLEAN: 
          rowList.add(cell.getBooleanCellValue());
         break;
        }
       } 
         }
         tmpList.add(rowList);
        }
       }
   }
  }catch(Exception e){
   e.printStackTrace();
   throw e;
  }
     return tmpList;
 }

 /**
  * 導入文件(excel)包含空行
  * @param path   路徑+檔案名
  * @param line   從第幾欄開始
  * @param rowLen 到第幾列結束
  * @return list
  * @throws Exception
  */
 public static List<Object> importData1(InputStream inputStream,int atRow, int line, int rowLen) throws Exception{ 
  List<Object> tmpList = new ArrayList<Object>(); 
  POIFSFileSystem pfs = new POIFSFileSystem(inputStream);
  HSSFWorkbook wb = new HSSFWorkbook(pfs);
  HSSFSheet sheet = wb.getSheetAt(0);
  HSSFRow row = null;
  try{  
   int totalRow = sheet.getLastRowNum(); //excel資料行數
   if(totalRow>0){ //判斷excel是否為空
    for(int i = atRow ; i <=totalRow; i++){
        List<Object> rowList = new ArrayList<Object>(); 
        row = sheet.getRow(i);
        if(row!=null){ //判斷行是否為空
         for(int j = line; j < rowLen; j++){ 
       HSSFCell cell = row.getCell((short) j);
       if(cell == null){ //判斷列是否為空
        rowList.add("");
       }else{
        int ctype = cell.getCellType();
        switch(ctype){
         // 處理string部份
         case HSSFCell.CELL_TYPE_BLANK:
          rowList.add("");
         break;
         
         case HSSFCell.CELL_TYPE_STRING:
          rowList.add(cell.getRichStringCellValue().getString().trim());
         break;
         
         //處理number部份
         case HSSFCell.CELL_TYPE_NUMERIC:
          
          if (HSSFDateUtil.isCellDateFormatted(cell)) { // 是否為日期型
           System.out.print( cell.getDateCellValue());
           //須轉date格式
           rowList.add(cell.getDateCellValue());
             }else{
              
           double tmpdouble = cell.getNumericCellValue();
           if(tmpdouble - (int)tmpdouble < Double.MIN_VALUE) {
            
            //int
            rowList.add(Integer.toString((int)tmpdouble));
           }else{
            
            //double
            rowList.add(Double.toString(cell.getNumericCellValue()));
           }
             }
         break;
         
         //處理boolean部份
         case HSSFCell.CELL_TYPE_BOOLEAN: 
          rowList.add(cell.getBooleanCellValue());
         break;
        }
       } 
         }
        }else{
         for(int k = line; k < rowLen; k++){ 
          rowList.add("");
         }
        }
        tmpList.add(rowList);
       }
   }
  }catch(Exception e){
   e.printStackTrace();
   throw e;
  }
     return tmpList;
 }
 
}

分享到:
评论

相关推荐

    ExcelUtil java excel工具类

    ExcelUtil java excel工具类

    Excel工具类ExcelUtil

    `ExcelUtil` 是一个在Java开发中常用的工具类,用于处理Microsoft Excel文件。这个类通常包含了一系列静态方法,便于开发者对Excel数据进行读取、写入、格式转换等操作,而无需深入理解底层的API细节。Excel文件在...

    ExcelUtil便捷读取工具 v3.1.6.zip

    《ExcelUtil便捷读取工具 v3.1.6——高效处理Excel数据的利器》 ExcelUtil便捷读取工具是一款高效且易用的Java库,专为处理Excel数据而设计,适用于各种开发场景,如数据分析、报表生成、数据导入导出等。在v3.1.6...

    ExcelUtil_excel导入_工具类_

    在Java编程中,ExcelUtil是一个常见的工具类,用于处理与Microsoft Excel文件相关的操作,如导入数据、导出数据等。这个工具类的使用极大地简化了开发者处理Excel文件的工作流程,提高了开发效率。以下是对ExcelUtil...

    Excel导入导出工具类

    本文将详细介绍如何使用POI库创建一个名为`ExcelUtil`的工具类,以实现Excel的导入和导出功能。 首先,我们需要在项目中引入Apache POI库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml ...

    最新导入导出工具类ExcelUtil.java

    最新导入导出工具类ExcelUtil.java

    ExcelUtil便捷读取工具 v3.1.5-源码.zip

    《ExcelUtil便捷读取工具 v3.1.5 源码分析》 在IT行业中,数据处理是一项至关重要的任务,而Excel作为一种广泛使用的电子表格工具,其数据处理能力强大,但手动操作效率较低。因此,开发能够高效读取和处理Excel...

    Excel导出工具类

    接下来,我们构建一个名为`ExcelUtil`的工具类。这个类的核心功能是将`List&lt;Object&gt;`数据转换成Excel文件。首先,我们需要定义一个方法来初始化工作簿和工作表: ```java import org.apache.poi.hssf.usermodel....

    excel工具类

    一个用jxl做的导入导出excel表数据的工具类。

    ExcelUtil便捷读取工具 v3.x

    为您提供ExcelUtil便捷读取工具下载,ExcelUtil 借助反射和 POI 对 Excel 读取,省略了以往读取 Excel 的繁琐步骤,调用 ExcelUtil 只需要2步,对,你没有看错,2步足以读取到 Excel 的内容。自动赋值,传入对应...

    java 导入导出excel文件(工具类)

    例如,我们可以创建一个名为`ExcelUtil`的工具类,包含如下方法: - `static Workbook readExcel(File file)`:读取Excel文件并返回Workbook对象。 - `static void writeExcel(Workbook workbook, File outputFile)...

    ExcelUtil万能读取类兼容03/07

    "ExcelUtil万能读取类兼容03/07"指的是一个Java编程中的类库,设计用于读取不同版本的Excel文件,包括Microsoft Excel 2003(.xls格式)和2007以后的版本(.xlsx格式)。这类工具对于开发人员来说至关重要,因为它们...

    JAVA实现的excel与数据互相转换的工具类:ExcelUtil

    本人自主研发的ExcelUtil工具类,主要实现列表数据与excel文件互相转换的功能。 作用:快速实现数据导入和导出功能。 优势:只需配置注解即可实现数据导入导出功能,无需熟悉POI,并编写复杂的代码。

    ExcelUtil借助反射和POI对Excel读取,省略了以往读取Excel的繁琐步骤

    本篇将详细讲解如何利用Java的开源库Apache POI,结合反射机制,通过ExcelUtil工具类简化Excel读取的过程。 Apache POI是一个强大的库,它允许Java程序员创建、修改和展示MS Office格式的文件,包括Excel。在传统的...

    ExcelUtil便捷读取工具-其他

    ExcelUtil使用场景可以想一下我们现在有个Excel导入任务,比如是导入一个班级的学生花名册, 比如学生这个实体类是Student.java一般的导入是需要每行每列对Excel进行遍历,然后给Student的各个属性进行赋值,然后...

    Excel创建工具类

    然后,创建一个名为`ExcelUtil`的工具类,该类包含生成Excel的方法: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; ...

    操作Excel的工具ExcelUtil源码

    一个优秀的工具类库应该具有良好的扩展性和自定义性。ExcelUtil可能提供了接口或策略模式,允许用户自定义样式、数据格式等,满足不同场景的需求。 7. **实际应用** ExcelUtil常被用于数据导入导出、报表生成、...

    ExcelUtil.java

    "ExcelUtil.java"就是一个这样的工具类,它简化了Java处理Excel的流程,提高了开发效率。 ExcelUtil.java通常包含了读取Excel数据、写入Excel数据以及进行一些基础的Excel操作等功能。这类工具类的核心是利用Apache...

Global site tag (gtag.js) - Google Analytics