2013-01-14 140 views
1

我是POI的新手,我的代碼沒有給我合適的結果。當Excel工作表正在填充時,它不會在日期完成列中應用樣式,也不會將日期完成列的格式更改爲日期(格式應該是dd-mmm)。這是我的代碼。apache POI問題格式化

package oup.excel.report; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import org.apache.poi.hssf.usermodel.HSSFCell; 
import org.apache.poi.hssf.usermodel.HSSFCellStyle; 
import org.apache.poi.hssf.usermodel.HSSFFont; 
import org.apache.poi.hssf.usermodel.HSSFPalette; 
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.Cell; 
import org.apache.poi.ss.usermodel.CellStyle; 
import org.apache.poi.ss.usermodel.CreationHelper; 

import oup.dbconnection.ConnectionObject; 
import util.Mail; 

public class CreateExcelReport { 
    public static void main(String[] args) { 
     try { 
      File reportPath = new File("/a1/reports/"); 
      reportPath.mkdirs(); 
      String filename = "/a1/reports/OUP_Delivery_Report_" + getTodaysDate() + ".xls"; 
      HSSFWorkbook hwb = new HSSFWorkbook(); 
      HSSFSheet sheet = hwb.createSheet("OUP Delivery Report");   
      HSSFRow rowhead = sheet.createRow((short) 0); 

      HSSFFont font = hwb.createFont(); 
      font.setFontName("Trebuchet MS"); 
      font.setFontHeightInPoints((short) 8); 
      font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); 

      HSSFCellStyle style = hwb.createCellStyle(); 

      HSSFColor CYAN = setColor(hwb, (byte) 204, (byte) 255, (byte) 255); 

      style.setBorderBottom(HSSFCellStyle.BORDER_THIN); 
      style.setBorderTop(HSSFCellStyle.BORDER_THIN); 
      style.setBorderRight(HSSFCellStyle.BORDER_THIN); 
      style.setBorderLeft(HSSFCellStyle.BORDER_THIN); 

      style.setFillForegroundColor(CYAN.getIndex()); 
      //style.setFillBackgroundColor(new HSSFColor.BLACK().getIndex()); 
      style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 

      style.setFont(font); 
      style.setAlignment(HSSFCellStyle.ALIGN_CENTER); 

      HSSFCell jrnlcell = rowhead.createCell(0); 
      HSSFCell uidcell = rowhead.createCell(1); 
      HSSFCell stepcell = rowhead.createCell(2); 
      HSSFCell ptcell = rowhead.createCell(3); 
      HSSFCell dccell = rowhead.createCell(4); 
      HSSFCell cmtscell = rowhead.createCell(5); 

      jrnlcell.setCellValue("Journal"); 
      uidcell.setCellValue("Unique ID"); 
      stepcell.setCellValue("Step"); 
      ptcell.setCellValue("Proof typeset pages"); 
      dccell.setCellValue("Date completed"); 
      cmtscell.setCellValue("Comments"); 

      jrnlcell.setCellStyle(style); 
      uidcell.setCellStyle(style); 
      stepcell.setCellStyle(style); 
      ptcell.setCellStyle(style); 
      dccell.setCellStyle(style); 
      cmtscell.setCellStyle(style); 

      Connection con = ConnectionObject.getConnection(); 
      String sql = "SELECT getjrabbr (journalbookid) journal, clientreference UniqueID, (CASE WHEN currentstageid = 11 THEN 'GALLEY' WHEN currentstageid = 1 THEN 'PROOF' WHEN currentstageid = 54 THEN 'FROM T/S' WHEN currentstageid = 2 THEN 'REV1' WHEN currentstageid = 3 THEN 'REV2' WHEN currentstageid = 4 THEN 'REV3' WHEN currentstageid = 14 THEN 'REV4' WHEN currentstageid = 18 THEN 'REV5' WHEN currentstageid = 19 THEN 'REV6' WHEN currentstageid = 20 THEN 'REV7' WHEN currentstageid = 21 THEN 'REV8' WHEN currentstageid = 70 THEN 'REV9' WHEN currentstageid = 71 THEN 'REV10' WHEN currentstageid = 6 THEN 'Supply Files for QA' WHEN currentstageid = 93 THEN 'Resupp QA' WHEN currentstageid = 39 THEN 'PAP' WHEN currentstageid = 99 THEN 'PAP1' WHEN currentstageid = 100 THEN 'PAP2' END) step, tsp Prooftypesetpages, TO_CHAR (CLIENTUPLOADDATE, 'MM/DD/YYYY') Datecompleted FROM v_jobitems_history ji WHERE ji.clientid = 1487 AND CLIENTUPLOADDATE IS NOT NULL AND CLIENTUPLOADDATE BETWEEN TRUNC (SYSDATE - 1) + 3/24 AND TRUNC (SYSDATE) + 3/24 order by 5"; 
      PreparedStatement pstmt = con.prepareStatement(sql); 
      ResultSet rs = pstmt.executeQuery(); 

      int i=1; 

      HSSFCellStyle style1 = hwb.createCellStyle(); 
      HSSFFont font1 = hwb.createFont(); 
      font1.setFontName("Trebuchet MS"); 
      font1.setFontHeightInPoints((short) 8); 

      style1.setFont(font1); 
      style1.setBorderBottom(HSSFCellStyle.BORDER_THIN); 
      style1.setBorderTop(HSSFCellStyle.BORDER_THIN); 
      style1.setBorderRight(HSSFCellStyle.BORDER_THIN); 
      style1.setBorderLeft(HSSFCellStyle.BORDER_THIN); 
      style1.setAlignment(HSSFCellStyle.ALIGN_CENTER); 

      CellStyle cellStyle = hwb.createCellStyle(); 
      CreationHelper createHelper = hwb.getCreationHelper(); 
      // Set the date format of date 
      cellStyle.setDataFormat(createHelper.createDataFormat().getFormat("d-mmmm")); 
      cellStyle.setFont(font1); 
      cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); 
      cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); 
      cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); 
      cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); 
      cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); 

      CellStyle cellStyleInt = hwb.createCellStyle(); 
      cellStyleInt.setDataFormat(createHelper.createDataFormat().getFormat("#")); 
      cellStyleInt.setFont(font1); 
      cellStyleInt.setBorderBottom(HSSFCellStyle.BORDER_THIN); 
      cellStyleInt.setBorderTop(HSSFCellStyle.BORDER_THIN); 
      cellStyleInt.setBorderRight(HSSFCellStyle.BORDER_THIN); 
      cellStyleInt.setBorderLeft(HSSFCellStyle.BORDER_THIN);   
      cellStyleInt.setAlignment(HSSFCellStyle.ALIGN_CENTER); 

      while(rs.next()){ 
       String journal = rs.getString("journal"); 
       String UniqueID = rs.getString("UniqueID"); 
       String step = rs.getString("step"); 
       String tsp = rs.getString("Prooftypesetpages"); 
       String Datecompleted = rs.getString("Datecompleted"); 

       System.out.println("journal : " + journal); 
       System.out.println("UniqueID : " + UniqueID); 
       System.out.println("step : " + step); 
       System.out.println("tsp : " + tsp); 
       System.out.println("Datecompleted : " + Datecompleted); 
       System.out.println("================================================"); 

       HSSFRow row = sheet.createRow((short) i); 

       HSSFCell jcell = row.createCell(0); 
       HSSFCell ucell = row.createCell(1); 
       HSSFCell scell = row.createCell(2); 
       HSSFCell tcell = row.createCell(3); 
       HSSFCell dcell = row.createCell(4); 
       HSSFCell ccell = row.createCell(5); 

       tcell.setCellType(Cell.CELL_TYPE_NUMERIC); 

       jcell.setCellValue(journal); 
       ucell.setCellValue(UniqueID); 
       scell.setCellValue(step); 
       if(tsp!=null && !tsp.equals("")){ 
        tcell.setCellValue(Integer.parseInt(tsp.trim())); 
       }else{ 
        tcell.setCellValue(0); 
       } 

       SimpleDateFormat oldFormat = new SimpleDateFormat("dd/MM/yyyy"); 
       SimpleDateFormat newFormat = new SimpleDateFormat("dd-MMM"); 

       String reformattedDt = null; 
       Date inputDt = null; 
       try { 
        reformattedDt = newFormat.format(oldFormat.parse(Datecompleted)); 
        inputDt = newFormat.parse(reformattedDt);     
       } catch (ParseException e) { 
        e.printStackTrace(); 
       } 
       dcell.setCellValue(inputDt); 
       ccell.setCellValue(""); 

       jcell.setCellStyle(style1); 
       ucell.setCellStyle(style1); 
       scell.setCellStyle(style1); 
       tcell.setCellStyle(cellStyleInt); 
       dccell.setCellStyle(cellStyle); 
       ccell.setCellStyle(style1); 

       i++; 
      } 

      try{ 
       if(rs!=null){ 
        rs.close(); 
       } 
       if(pstmt!=null){ 
        pstmt.close(); 
       } 
       if(con!=null){ 
        con.close(); 
       } 
      }catch (Exception e) { 
       e.printStackTrace(); 
      } 
      for(int j=0;j<6;j++){ 
       sheet.autoSizeColumn((short) j); 
      } 
      FileOutputStream fileOut = new FileOutputStream(filename); 
      hwb.write(fileOut); 
      fileOut.close(); 
      Mail mail = new Mail(); 
      boolean sendmail = mail.sendMailWithAttachHtmlFormat("[email protected]", "[email protected]", "[email protected]", "OUP daily delivery report", "<p style='color:blue'>Hi, <br/>Please find the daily delivery report for the articles.</p><br/><p style='color:blue'>Thanks,<br/>Aptara Automailer</p>", filename, "", "DBADMIN"); 
      if(sendmail){ 
       System.out.println("Mail sent successfully."); 
      } 
      System.out.println("Your excel file has been generated!"); 
     } 
     catch(FileNotFoundException fnf){ 
      if(fnf.getMessage().indexOf("The process cannot access the file because it is being used by another process")>=0){ 
       System.out.println("The file is already being used by another process. Please close the file and try again."); 
      }else{ 
       System.out.println("Exception occured : " + fnf.getMessage()); 
      }   
     } 
     catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 

    private static String getTodaysDate(){ 
     Date date = new Date(); 
     SimpleDateFormat sdf;    
     sdf = new SimpleDateFormat("ddMMMyyyy_hh_mm_ss"); 
     String dtString = sdf.format(date); 
     return dtString; 
    } 

    private static HSSFColor setColor(HSSFWorkbook workbook, byte r,byte g, byte b){ 
     HSSFPalette palette = workbook.getCustomPalette(); 
     HSSFColor hssfColor = null; 
     try { 
     hssfColor= palette.findColor(r, g, b); 
     if (hssfColor == null){ 
      palette.setColorAtIndex(HSSFColor.LAVENDER.index, r, g,b); 
      hssfColor = palette.getColor(HSSFColor.LAVENDER.index); 
     } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return hssfColor; 
     } 
} 

請給我一個合適的解決方案。

感謝

Saikat

+0

@Sankar:請緊急回覆 – sairajgemini

+0

您是否可以創建顯示相同問題的較短的代碼片段?說一個只處理單個日期單元格的單元? – Gagravarr

回答

2

你創建你的HSSFCell dcell存儲您while循環中的日期值。但是,這個單元格的風格從未設置。

你行

dccell.setCellStyle(cellStyle); 

while循環內部設置你的標題單元格的單元格樣式(「dccell」),而不是實際的日期值單元格樣式(「DCELL」)。