apache poi做的一個到出到導出Excel功能


/*
* 創建人:cwq
* 創建時間 :20160105
* 創建用於 用於臨時文件的下載
*
* */
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;

// import com.sunrise.foundation.utils.RequestWrapper;
// import com.sunrise.framework.core.ApplicationManager;
// import com.sunrise.framework.struts2.Header;
// import com.sunrise.framework.struts2.JsonObject;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
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.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Workbook;

public class DownloadExcel {
    // private RequestWrapper request = ApplicationManager.getRequest();
    //tomcat地址
    // private String Path = request.getSession().getServletContext().getRealPath("/");
    private File resultFile = null;
    private String sheetName = "sheet";
    private int sheetRow = 0;
    private String fileName=null;
    private String [] gaugeHead = {"第一列","第二列"};
    private String [][] cellValue = {{"1","2"},{"1","2"},{"3","4"}};
    private Map<String, Object> params = new HashMap<String, Object>();
    private String gauge = null;
    private String cell = null;
//     public JsonObject main()throws Exception{
//         if(request.getParameter("sheetName")!=null) sheetName = request.getParameter("sheetName");
//         if(request.getParameter("sheetRow")!=null)  sheetRow = Integer.parseInt(request.getParameter("sheetRow"));
//         if(request.getParameter("gaugeHead")!=null)  gauge = request.getParameter("gaugeHead");
//         if(request.getParameter("cellValue")!=null)  cell = request.getParameter("cellValue");
//         showParams(request);
//         System.out.println("======"+gauge+"=======");
//         System.out.println("===="+cell+"==========");
// //        sheetRow=2;
//         deleteFile(new File(Path+"/uploadfile/download/DownloadExcel/"),60*30);//刪除30分鐘前的文件
// //        deleteFile(new File(Path+"/uploadfile/download/DownloadExcel/result201601060941462.xlsx"),0);
//         return export(sheetName, sheetRow, gaugeHead, cellValue);
//     }

    /*
    * 刪除刪除本文件
    * @fileName 文件名字
    * */
    // public JsonObject Delete(){
    //     if(request.getParameter("fileName")!=null){
    //         fileName=request.getParameter("fileName");
    //         deleteFile(new File(Path+"/uploadfile/download/DownloadExcel/"+fileName+".xls"),1);
    //         params.put("fileName",fileName);
    //         return new JsonObject(new Header(0, "success"), params);
    //     }else{
    //         params.put("message","文件已經刪除");
    //         return new JsonObject(new Header(0, "false"), params);
    //     }
    // }

    /*
    * 測試直接調用方法
    *
    * */

    public void exportExcel() throws Exception{
        exportExcel(null,null);
    }
    /*
    * 直接調用方法
    *
    * */
//     public JsonObject exportExcel(String [] gaugeHead,List cellValue) throws Exception{
// ////        List list = new ArrayList();
// //        List list = new ArrayList();
// //        String [] str ={"8986061509000064555","已經初始化該數據,並且更新"};
// //        String [] str2 ={"8986061509000064558","已經初始化該數據,並且更新"};
// //        list.add(str);
// //        list.add(str2);
// //        ToList(list);
//         return export(sheetName, sheetRow, gaugeHead, ToList(cellValue));
//     }

    /*
    * 轉爲二數組
    * */

    private String[][] ToList( List list){
        int listLength = list.size();
        Object[] listArray = list.toArray();
        String[][] arrList = new String[listLength][];
        for(int i=0;i<listArray.length;i++){
            arrList[i]=(String[]) listArray[i];
        }
       return arrList;
    }

      /*
    * 用於導出xlsx 文件
    * @sheetName 頁的名字
    * @sheetRow 多少行一個頁
    * @gaugeHead 表頭
    * @cellValue 內容
    * */
    private String export(String sheetName,int sheetRow,String [] gaugeHead,String [][] cellValue) throws IOException {
        fileName="result"+createTime()+createRandom();
        //結果存放文件以及地址
        resultFile = new File(Path+"/uploadfile/download/DownloadExcel/"+fileName+".xls");
        // 創建工作簿
        HSSFWorkbook wb = new HSSFWorkbook();
        //工作簿的樣式
        CellStyle cellType= CellStyle(wb);
        if(sheetRow>0) {
            int len = cellValue.length;//數據的行數
            int yuShu = len%sheetRow;//取餘數
            int ye = (yuShu==0)?(int)Math.ceil(len/sheetRow):((int)Math.ceil(len/sheetRow)+1);
//            System.out.println(ye);
            for(int i=0;i<ye;i++){
                String name=  (i==0)? sheetName : sheetName+ String.valueOf(i);//頁的名字
                wb.createSheet(name);//創建頁
                gaugeHead(wb.getSheet(name), cellType, gaugeHead);//表頭
                CellValue(wb.getSheet(name), cellType,setPage(i,cellValue,sheetRow,ye,yuShu));//設置內容
            }
        }else {
            // 創建頁
            HSSFSheet sheet = wb.createSheet(sheetName);
            gaugeHead(sheet, cellType, gaugeHead);//表頭
            CellValue(sheet, cellType, cellValue);//設置內容
        }
        FileOutputStream os = new FileOutputStream(resultFile);
        //保存工作簿
        wb.write(os);
        os.flush();
        os.close();
        // params.put("fileName",fileName);
        // return new JsonObject(new Header(0, "success"), params);
        return fileName;
    }

    /*
    * 處理分頁的數據
    * @page 頁碼
    * @arr 存進來的數據
    * @sheetRow 多少行一頁
    * @ye 共多少頁
    * @yuShu 最後一頁多少個
    * */

     private String[][] setPage(int page,String[][] arr,int sheetRow,int ye,int yuShu){
//         System.out.println("page:"+page+",arr:"+arr[0][0]+",sheetRow:"+sheetRow)
         int startNum =page*sheetRow;//開始數據
         int endNum =(page+1)*sheetRow;//結束數據
         int l = 0;
         if(page==(ye-1)){//最後一頁
             if(yuShu!=0){//不是整除
                 l = yuShu;
                 endNum = page*sheetRow+yuShu;
             }else{
                 l = (page+1)*sheetRow-page*sheetRow;
             }
         }else{
             l = (page+1)*sheetRow-page*sheetRow;
         }
//         System.out.println("長度:"+l+"endNum:"+endNum);
         String[][] newArr = new String[l][];
         int index = 0;
         for(int i=startNum;i<endNum;i++){
             int len = arr[i].length;
             String[] arrRow = new String[len];
             for(int j=0;j<len;j++){
                 arrRow[j]=arr[i][j];
             }
             newArr[index]=arrRow;
             index++;
         }
        return newArr;
    }

    /*
    * 刪除文件
    * @file 文件
    * @time 刪前時間 單位s
    * */

    private void deleteFile(File file,int time) {
//        System.out.println(file.isFile());
        time = (time==0)?30:time;
        try {
            if (!file.isFile()) {//不是文件
//                System.out.println(file.listFiles());
                File[] tempList =file.listFiles();
                for (int i = 0; i < tempList.length; i++) {
                    if (tempList[i].isFile()) {
                        if (canDeleteFile(tempList[i],time)) {
                            delete(tempList[i],"文件");
                        }
                    }
                    if (tempList[i].isDirectory()) {
                        if (canDeleteFile(tempList[i],time)) {
                            delete(tempList[i],"文件夾");
                        }
                    }
                }

            }else{
                delete(file,"文件");
            }
        } catch (Exception e) {
            System.out.println("刪除文件失敗!"+ e);
        }
    }

    /*
    * 文件刪除動作
    * */

    private void delete(File file,String name){
        if (file.delete()) {
            System.out.println(name+":" + file.getName() + "刪除成功!");
        } else {
            System.out.println(name+":" + file.getName() + "刪除失敗!此文件可能正在被使用");
        }
    }
     /*
    * 計算文件時間
    * @file 文件
    * @time 刪前時間 單位s
    * */

    private boolean canDeleteFile(File file,int time) {
        Date date = new Date();
        long lastUpTime = file.lastModified() / 1000;
        long secondsOfOneMinute = time;
        //可刪除文件的時間
        long canDelTime = date.getTime() / 1000 - secondsOfOneMinute;
        if(lastUpTime <= canDelTime) {
            return true;
        }
        return false;
    }
       /*
    * 創建時間
    * 時分秒
    * */

     private String createTime(){
        SimpleDateFormat format=new SimpleDateFormat("yyyyMMddHHmmss");
        return format.format(new Date());
    }
    private int createRandom(){
        return (int)(Math.random()*10);
    }
    /*
    * 創建工作簿的樣式
    * @wb 工作簿
    * */

     private CellStyle CellStyle(Workbook wb){
        CellStyle cellType = null;
        cellType = wb.createCellStyle();
        cellType.setBorderTop(HSSFCellStyle.BORDER_THIN);
        cellType.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        cellType.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        cellType.setBorderRight(HSSFCellStyle.BORDER_THIN);
        cellType.setVerticalAlignment(HSSFCellStyle.ALIGN_CENTER); // 設置單元格垂直方向對其方式
        cellType.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平
         cellType.setFillForegroundColor(HSSFColor.WHITE.index);
        cellType.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        return cellType;
    }

    /*
    * 設置導出數據
    * @sheet 工作簿的頁
    * @cellType 工作簿的樣式
    * @cellValue 表頭數組
    * */

   private void CellValue(HSSFSheet sheet,CellStyle cellType,String[][] cellValue){
      HSSFRow row = null;
      HSSFCell cell = null;
      for (int i=0;i<cellValue.length;i++){
          row = sheet.createRow(i+1);  // 第二行
          int len = cellValue[i].length;
          for(int j=0;j<len;j++){
              //列
              cell = row.createCell(j);
              // 單元格樣式
              cell.setCellStyle(cellType);
              // 單元格的值
              cell.setCellValue(cellValue[i][j]);
          }
      }
  }

    /*
    * 設置導出的表頭
    * @sheet 工作簿的頁
    * @cellType 工作簿的樣式
    * @gaugeHead 表頭數組
    * */

     private void gaugeHead(HSSFSheet sheet,CellStyle cellType,String[] gaugeHead){
        HSSFRow row = null;
        HSSFCell cell = null;
        row = sheet.createRow(0);  // 第一行
        for (int i=0;i<gaugeHead.length;i++){
            sheet.autoSizeColumn(i, true);
            sheet.setColumnWidth(i,gaugeHead[i].getBytes().length*2*256);
            // 列
            cell = row.createCell(i);
            // 單元格樣式
            cell.setCellStyle(cellType);
            // 單元格的值
            cell.setCellValue(gaugeHead[i]);
        }
    }

    /*
    * 參數打印調試
    * */

    private void showParams(RequestWrapper request) {
        Map map = new HashMap();
        Enumeration paramNames = request.getParameterNames();
        while (paramNames.hasMoreElements()) {
            String paramName = (String) paramNames.nextElement();
            String[] paramValues = request.getParameterValues(paramName);
            if (paramValues.length == 1) {
                String paramValue = paramValues[0];
                if (paramValue.length() != 0) {
                    map.put(paramName, paramValue);
                }
            }
        }
        Set<Map.Entry<String, String>> set = map.entrySet();
        System.out.println("------------------------------");
        for (Map.Entry entry : set) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println("------------------------------");
    }


 }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章