2013-07-09 24 views
7

Tôi đang làm việc với tệp apache poi và XLSX. tôi sử dụng các lớp xssf để tự động tạo một bảng tính. tôi muốn thiết lập phong cách di động trong một vòng lặp for, nhưng nó dường như không làm việc ... đây là mã của tôi:đặt kiểu ô không hoạt động

for(int i=1;i<=gc.getActualMaximum(GregorianCalendar.DAY_OF_MONTH);i++,gc.add(GregorianCalendar.DATE, 1),righe++){ 
     Row r = foglio.createRow(righe); 

     if(getDayOfWeek(gc)== 6 || getDayOfWeek(gc) == 7){ 
      XSSFCellStyle cs1 = wb.createCellStyle(); 
      cs1.setFillBackgroundColor(IndexedColors.YELLOW.getIndex()); 
      cs1.setFillPattern(CellStyle.SOLID_FOREGROUND); 
      XSSFFont f = wb.createFont(); 
      f.setBold(true); 
      f.setColor(IndexedColors.RED.getIndex()); 
      cs1.setFont(f); 
      Cell c1 = r.createCell(0); 
       c1.setCellValue(cost.getGiorni().get(getDayOfWeek(gc)-1).getNomeGiorno()); 
       c1.setCellStyle(cs1); 
      Cell c2 = r.createCell(1); 
       c2.setCellValue(i); 
       c2.setCellStyle(cs1); 
     }    
     r.createCell(0).setCellValue(cost.getGiorni().get(getDayOfWeek(gc)-1).getNomeGiorno()); 
     r.createCell(1).setCellValue(i); 

... này tôi chỉ là một phần của mã ... tôi không thể hiểu tại sao không hoạt động. Dường như kiểu di động bị bỏ qua hoặc bị ghi đè ....

bất kỳ đầu mối nào?

Trả lời

4

Kiểu ô là mỗi sổ làm việc và có giới hạn cứng mà Excel áp đặt trên các số mà tệp được phép có, vì vậy bạn cần đảm bảo bạn tạo kiểu ô một lần ngoài vòng lặp.

Mã của bạn sau đó sẽ giống như thế:

XSSFCellStyle cs1 = wb.createCellStyle(); 
cs1.setFillBackgroundColor(IndexedColors.YELLOW.getIndex()); 
cs1.setFillPattern(CellStyle.SOLID_FOREGROUND); 

XSSFFont f = wb.createFont(); 
f.setBold(true); 
f.setColor(IndexedColors.RED.getIndex()); 
cs1.setFont(f); 

for(int i=1;i<=gc.getActualMaximum(GregorianCalendar.DAY_OF_MONTH) i++,gc.add(GregorianCalendar.DATE, 1),righe++){ 
    Row r = foglio.createRow(righe); 

    if(getDayOfWeek(gc)== 6 || getDayOfWeek(gc) == 7){ 
     Cell c1 = r.createCell(0); 
     c1.setCellValue(cost.getGiorni().get(getDayOfWeek(gc)-1).getNomeGiorno()); 
     c1.setCellStyle(cs1); 
     Cell c2 = r.createCell(1); 
     c2.setCellValue(i); 
     c2.setCellStyle(cs1); 
    } 
} 

Nếu bạn đang gặp vấn đề với phong cách không nhìn khá như bạn mong đợi, lựa chọn tốt nhất là để tạo kiểu một tế bào như bạn muốn nó trong Excel, lưu tệp, đọc tệp đó vào POI và xem lại kiểu ô mà Excel đã viết. Đôi khi, Excel có thể làm một số điều kỳ lạ mà có một số nhận được sử dụng để, vì vậy hãy kiểm tra những gì nó làm để làm việc ra những gì bạn cần phải làm!

+0

Tôi đã thử phương pháp của bạn nhưng không giải quyết bất cứ điều gì ... tôi cũng đã nghĩ về việc tạo tệp mô hình .xlsx nhưng tôi đang tạo bảng tính động 100% dựa trên một số tiêu chí do người dùng xác định khi chạy ... – Medioman92

+0

Hơn nữa nếu tôi sử dụng lớp "IndexedColor" để thiết lập nền, nó luôn luôn kết quả đen – Medioman92

+1

Xem lời khuyên của tôi ở dưới cùng của câu trả lời - tạo nó như bạn muốn trong excel, đọc lại từ POI, và làm việc ra những gì tùy chọn cần thiết lập để làm cho phong cách trông giống như bạn muốn – Gagravarr

6

Bạn có thể sử dụng Phương pháp sau, có lẽ cách này sẽ giải quyết được sự cố của bạn.

public static void setCellColorAndFontColor(XSSFCell cell, IndexedColors FGcolor, IndexedColors FontColor){ 
    XSSFWorkbook wb = cell.getRow().getSheet().getWorkbook(); 
    CellStyle style = wb.createCellStyle(); 
    XSSFFont font = wb.createFont(); 
    font.setBold(true); 
    font.setColor(FontColor.getIndex()); 
    style.setFont(font); 
    style.setFillForegroundColor(FGcolor.getIndex()); 
    style.setFillPattern(CellStyle.SOLID_FOREGROUND); 
    cell.setCellStyle(style); 
} 

Khi bạn đang gọi phương pháp này đường nên giống như

setCellColorAndFontColor(cell, IndexedColors.BLACK, IndexedColors.WHITE); 

sẽ tạo đậm màu sắc văn bản & phông chữ màu trắng với màu nền di động màu đen trong bảng.

+3

Điều đó sẽ tạo ra một phong cách cho mỗi ô, mặc dù bạn không nên làm như bạn sẽ nhanh chóng chạy ra ngoài - phong cách là phạm vi làm việc! – Gagravarr

Các vấn đề liên quan