2015-11-11 29 views
6
Cell cell = row.createCell(1); 
    cell.setCellValue(rdf.getEffectiveDate()); 
    cell.getCellStyle().setDataFormat(HSSFDataFormat.getBuiltinFormat("d-mmm-yy")); 

    cell = row.createCell(2); 
    cell.setCellValue(rdf.getExpiryDate()); 
    cell.getCellStyle().setDataFormat(HSSFDataFormat.getBuiltinFormat("d-mmm-yy")); 

    row.createCell(3).setCellValue(rdf.getPremium()); 
    row.createCell(4).setCellValue(rdf.getAccountNumber()); 
    row.createCell(5).setCellValue(rdf.getLedgerName()); 

Chciałem zastosować format daty w dwóch z powyższych kolumn. Ale zaczyna się stosować do wszystkich komórek. Jak mogę temu zapobiec?Styl Apache POI zostanie zastosowany do wszystkich komórek

Odpowiedz

12

Zgodnie z dokumentacją Cell.getCellStyle() nigdy nie zwróci wartości null.

https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Cell.html#getCellStyle()

Kiedy nie styl komórka została jawnie ustawiona na komórki to powróci domyślny styl komórki, który początkowo jest współdzielony przez wszystkie komórki w skoroszycie. Zmiana tego będzie miała oczywiście wpływ na wszystkie komórki, które nie mają wyraźnie przypisanego stylu.

Musisz utworzyć nowy CellStyle, a następnie przypisać go do odpowiednich komórek.

Od przewodnika dewelopera POI:

https://poi.apache.org/spreadsheet/quick-guide.html#CreateDateCells

Workbook wb = new HSSFWorkbook(); 
    //Workbook wb = new XSSFWorkbook(); 
    CreationHelper createHelper = wb.getCreationHelper(); 
    Sheet sheet = wb.createSheet("new sheet"); 

    // Create a row and put some cells in it. Rows are 0 based. 
    Row row = sheet.createRow(0); 

    // Create a cell and put a date value in it. The first cell is not styled 
    // as a date. 
    Cell cell = row.createCell(0); 
    cell.setCellValue(new Date()); 

    // we style the second cell as a date (and time). It is important to 
    // create a new cell style from the workbook otherwise you can end up 
    // modifying the built in style and effecting not only this cell but other cells. 
    CellStyle cellStyle = wb.createCellStyle(); 
    cellStyle.setDataFormat(
     createHelper.createDataFormat().getFormat("m/d/yy h:mm")); 
    cell = row.createCell(1); 
    cell.setCellValue(new Date()); 
    cell.setCellStyle(cellStyle); 

    //you can also set date as java.util.Calendar 
    cell = row.createCell(2); 
    cell.setCellValue(Calendar.getInstance()); 
    cell.setCellStyle(cellStyle); 

    // Write the output to a file 
    FileOutputStream fileOut = new FileOutputStream("workbook.xls"); 
    wb.write(fileOut); 
    fileOut.close(); 
+0

dzięki. Zmarnowałem 5 godzin nad tym. Uratowałeś ten dzień. –

3

Spróbuj utworzyć nowy styl komórek. Myślę, że możesz zmienić domyślny styl. Więc coś w tym rodzaju ...

CellStyle dateTimeCS = wb.createCellStyle(); 
dateTimeCS.setDataFormat(HSSFDataFormat.getBuiltinFormat("d-mmm-yy")); 
cell.setCellStyle(dateTimeCS);