2017-02-07 53 views
0

Apache POIで固定列幅を設定する方法。 最初の列を固定幅にしたい。Apache POIで固定列幅を設定する方法

私はsheet.setColumnWidth(0、1000)で試しました。 cellStyle.setWrapText(true); //セット...それが動作するはず

public XSSFWorkbook generateReport(List<Dto> result, boolean isRes, boolean isRes1) { 
    XSSFWorkbook workbook = null; 
    XSSFSheet sheet = null; 
    XSSFRow row = null; 
    XSSFCell cell = null; 
    String[] headers = null; 
    int rowNum = 0; 
    int colNum = 0; 
    CellStyle cellStyle = null; 
    CellStyle headerStyle = null; 
    XSSFFont font = null; 
    CellStyle datecellStyle = null; 
    /* set the weight of the font */ 



    try { 
     workbook = new XSSFWorkbook(); 

     headers = new String[] { ...values goes here...}; 
     row = sheet.createRow(rowNum); 
     font = workbook.createFont(); 
     font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD); 

     headerStyle = workbook.createCellStyle(); 
     headerStyle.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM); 
     headerStyle.setBorderTop(HSSFCellStyle.BORDER_MEDIUM); 
     headerStyle.setBorderRight(HSSFCellStyle.BORDER_MEDIUM); 
     headerStyle.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM); 
     headerStyle.setFillForegroundColor((short) 200); 
     headerStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); 
     headerStyle.setFont(font); 

     cellStyle = workbook.createCellStyle(); 
     cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); 
     cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); 
     cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); 
     cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); 



     datecellStyle = workbook.createCellStyle(); 
     datecellStyle.setDataFormat(workbook.getCreationHelper().createDataFormat().getFormat("dd-MMM-yyyy")); 
     datecellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); 
     datecellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); 
     datecellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); 
     datecellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); 



     /** 
     * Writing Headers 
     */ 
     for (String header : headers) { 
      cell = row.createCell(colNum); 
      cell.setCellValue(header); 
      cell.setCellStyle(headerStyle); 
      ++colNum; 
     } 

     /** 
     * Writing Other Rows 
     */ 
     SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss"); 
     for (Dto detail : result) { 
      ++rowNum; 
      colNum = 0; 
      row = sheet.createRow(rowNum); 
      cell = row.createCell(colNum); 
      //sheet.setColumnWidth(0, 4000); 
      cell. 
      if(null != detail.getGid()){ 
       cell.setCellValue(detail.getGid()); 
      }else{ 
       cell.setCellValue("-"); 
      } 
      cell.setCellStyle(cellStyle); 

      ++colNum; 
      cell = row.createCell(colNum); 
      if(null != detail.getName()){ 
       cell.setCellValue(detail.getName()); 
      }else{ 
       cell.setCellValue("-"); 
      } 
      cell.setCellStyle(cellStyle); 

      ++colNum; 
      cell = row.createCell(colNum); 
      if(null != detail.getNGid()){ 
       cell.setCellValue(detail.getNGid()); 
      }else{ 
       cell.setCellValue("-"); 
      } 
      cell.setCellStyle(cellStyle); 

      ++colNum; 
      cell = row.createCell(colNum); 
      if(null != detail.getName()){ 
       cell.setCellValue(detail.getName()); 
      }else{ 
       cell.setCellValue("-"); 
      } 
      cell.setCellStyle(cellStyle); 




     } 

     for (int i = 0; i < headers.length; i++) { 
      sheet.autoSizeColumn(i); 
     } 
     sheet.createFreezePane(1, 1); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return workbook; 
} 
+2

したがって、列0の幅を自動サイズ設定することは望ましくありませんか?したがって、 'sheet.autoSizeColumn(i);'から 'i == 0'を単純に除外します。 –

+0

それは働く..ありがとう、アレックス –

答えて

3

setColumnWidth(int, int)が反映されていないWORDWRAPあなたがループ内で自動にサイズをリセットするため、それを何ですか?

for (int i = 0; i < headers.length; i++) { 
    sheet.autoSizeColumn(i); 
} 

代わりに1からheaders.lengthまでループを開始します。

関連する問題