1. 程式人生 > >poi 列印格式程式碼設定

poi 列印格式程式碼設定

偷個懶,直接上程式碼吧,大家每一行我都寫註釋了的,更具需求可以自己設計自己的表格 

@Action(value="outProductAction_print")
    public String print() throws Exception{
        //HSSF  2003版 ,   XSSF 2007 版,07可以載入03,但03載入不來07      SXSSF      
        HSSFWorkbook workbook = new HSSFWorkbook(); //建立筆記本
        HSSFSheet sheet = workbook.createSheet();//建立表空間
        sheet.setColumnWidth(1,25*256);//設定寬度 第一行   寬度25
        sheet.setColumnWidth(2,10*256);
        sheet.setColumnWidth(3,25*256);
        sheet.setColumnWidth(4,10*256);
        sheet.setColumnWidth(5,25*256);
        sheet.setColumnWidth(6,10*256);
        sheet.setColumnWidth(7,25*256);
        sheet.setColumnWidth(8,10*256);
        
        HSSFCell createCell=null;  //提升單元格的作用域
        
        //大標題
        int rownum=0;               //設定行數為0,建立一次加一次,迴圈增加,就可以迴圈建立行數了
        HSSFRow row = sheet.createRow(rownum++);//建立一行
        row.setHeightInPoints(36);  //設定高度
        createCell = row.createCell(1);  //建立一個單元格,重第2個算
        sheet.addMergedRegion(new CellRangeAddress(0,0,1,8));//合併單元格
        String replace = inputDate.replace("-0", "-").replace("-", "年")+"月出貨單";//把頁面傳過來的時間裝換成XXXX年X月格式
        createCell.setCellValue(replace); //賦值到大標題內容中
        
        createCell.setCellStyle(bigTitle(workbook));//呼叫下面大標題的樣式
        //小標題
        String[] smartStrs = {"客戶","訂單號","貨號","數量","工廠","工廠交期","船期","貿易條款"};
        
        HSSFRow createRow = sheet.createRow(rownum++); //建立一行
        createRow.setHeightInPoints(26); //設立高度
        for (int i = 0; i < smartStrs.length; i++) {//迴圈資料
            createCell = createRow.createCell(i+1);//建立單元格,迴圈一次,建立一個單元格
            createCell.setCellValue(smartStrs[i]);//賦值
            createCell.setCellStyle(title(workbook));//呼叫標題樣式
        
        }
        //內容
        
        
        //通過選擇的時間 查詢資料庫  由於預設語法中沒有我們要的語法,這裡我自定義了一個更具時間查詢的語法 ContractProduct:貨物表,其對應了合同表Contract 詳情表結構看一看做到物流雲專案
        List<ContractProduct> findDateAll = contractProductServiceimpl.findDateAll(inputDate);
         System.out.println(findDateAll.size());
        for (ContractProduct contractProduct : findDateAll) {
            
            row = sheet.createRow(rownum++); //建立一行
            createRow.setHeightInPoints(26);//設定高度26
            int i1=1;
            createCell = row.createCell(i1++);//客戶名   建立一個單元格
            createCell.setCellValue(contractProduct.getContract().getCustomName());//賦值
            createCell.setCellStyle(text(workbook));//引入樣式
            
            
            createCell = row.createCell(i1++);//訂單號
            createCell.setCellValue(contractProduct.getContract().getContractNo());
            createCell.setCellStyle(text(workbook));
            
            createCell = row.createCell(i1++);//貨號
            createCell.setCellValue(contractProduct.getProductNo());
            createCell.setCellStyle(text(workbook));
            
            createCell = row.createCell(i1++);//數量
            createCell.setCellValue(contractProduct.getCnumber());
            createCell.setCellStyle(text(workbook));
            
            createCell = row.createCell(i1++);//工廠
            createCell.setCellValue(contractProduct.getFactoryName());
            createCell.setCellStyle(text(workbook));
            
            createCell = row.createCell(i1++);//工廠交期
            //根據工具類UtilFuns的dateTimeFormat方法,把日期格式轉換成      String
            createCell.setCellValue(UtilFuns.dateTimeFormat(contractProduct.getContract().getDeliveryPeriod()));
            createCell.setCellStyle(text(workbook));
            
            createCell = row.createCell(i1++);//船期
            createCell.setCellValue(UtilFuns.dateTimeFormat(contractProduct.getContract().getShipTime()));
            createCell.setCellStyle(text(workbook));
            
            createCell = row.createCell(i1++);//貿易條款
            createCell.setCellValue(contractProduct.getContract().getTradeTerms());
            createCell.setCellStyle(text(workbook));
            
        } 
                    //輸出
        ByteArrayOutputStream os = new ByteArrayOutputStream();//new 一個io流
        HttpServletResponse response = ServletActionContext.getResponse(); //建立一個Response
        
        DownloadUtil util = new DownloadUtil();//呼叫下載工具類 DownloadUtil
        workbook.write(os);//把工作薄裡的內容寫入io流中
        util.download(os, response, replace + ".xls");//呼叫DownloadUtil工具類的download方法,設立下載檔名
        os.close();//關閉流
        return NONE;
    }

==============================下面的都是樣式,不必死記================================
    //大標題的樣式
    public CellStyle bigTitle(Workbook wb){
        CellStyle style = wb.createCellStyle();
        Font font = wb.createFont();
        font.setFontName("宋體");
        font.setFontHeightInPoints((short)16);
        font.setBoldweight(Font.BOLDWEIGHT_BOLD);                    //字型加粗
        
        style.setFont(font);
        
        style.setAlignment(CellStyle.ALIGN_CENTER);                    //橫向居中
        style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);      //縱向居中
        
        return style;
    }
    //小標題的樣式
    public CellStyle title(Workbook wb){
        CellStyle style = wb.createCellStyle();
        Font font = wb.createFont();
        font.setFontName("黑體");
        font.setFontHeightInPoints((short)12);
        
        style.setFont(font);
        
        style.setAlignment(CellStyle.ALIGN_CENTER);                    //橫向居中
        style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);      //縱向居中
        
        style.setBorderTop(CellStyle.BORDER_THIN);                    //上細線
        style.setBorderBottom(CellStyle.BORDER_THIN);                //下細線
        style.setBorderLeft(CellStyle.BORDER_THIN);                    //左細線
        style.setBorderRight(CellStyle.BORDER_THIN);                //右細線
        
        return style;
    }
    
    //文字樣式
    public CellStyle text(Workbook wb){
        CellStyle style = wb.createCellStyle();
        Font font = wb.createFont();
        font.setFontName("Times New Roman");
        font.setFontHeightInPoints((short)10);
        
        style.setFont(font);
        
        style.setAlignment(CellStyle.ALIGN_LEFT);                    //橫向居左
        style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);      //縱向居中
        
        style.setBorderTop(CellStyle.BORDER_THIN);                    //上細線
        style.setBorderBottom(CellStyle.BORDER_THIN);                //下細線
        style.setBorderLeft(CellStyle.BORDER_THIN);                    //左細線
        style.setBorderRight(CellStyle.BORDER_THIN);                //右細線
        
        return style;
    }
}