2013-04-02 125 views
1

好吧,我知道在將所有數據輸入到工作表和工作簿後,您必須添加autoSizeColumns()方法。這就是我正在做的,但它只是調整最後一個單元格輸入的寬度?無法使Apache POI autosizeColumn()正常工作

public void writeFile() { 
      Workbook wb = new HSSFWorkbook(); 
      Sheet s = wb.createSheet(); 
      try { 

       FileOutputStream out = new FileOutputStream(
         this.getSelectedFile()); 
       // create a new workbook 

       // create a new sheet 

       // declare a row object reference 
       Row r = null; 
       // declare a cell object reference 
       Cell c = null; 
       // in case of plain ascii 
       wb.setSheetName(0, "Street Light Report"); 
       // create a sheet with 30 rows (0-29) 
       // int rownum; 
       // short rownum; 
       // PrintWriter printOut = new PrintWriter(
       // this.getSelectedFile()); 
       String[] colName = { "Light Id", "Flagged", 
         "Malfunction", "Comments", "Location", "Date" }; 
       // printOut.println("Light Id,Flagged,Malfunction,Comments,Location,Date"); 
       Connections.connect(); 
       String[][] data = Connections.searchForFlagged(); 
       for (int i = 0; i < data.length; i++) { 
        r = s.createRow(i); 
       } 
       r.setRowNum(0); 
       for (int j = 0; j < 6; j++) { 
        c = r.createCell(j); 
        switch (j) { 
        case 0: 
         c.setCellValue(colName[j]); 
         break; 
        case 1: 
         c.setCellValue(colName[j]); 
         break; 
        case 2: 
         c.setCellValue(colName[j]); 
         break; 
        case 3: 
         c.setCellValue(colName[j]); 
         break; 
        case 4: 
         c.setCellValue(colName[j]); 
         break; 
        case 5: 
         c.setCellValue(colName[j]); 
         break; 

        } 
       } 

       for (int i = 0; i < data.length; i++) { 

        r.setRowNum(i + 1); 
        for (int j = 0; j < data[i].length; j++) { 

         c = r.createCell(j); 

         // System.out.println(data[i][j]); 

         switch (j) { 
         case 0: 
          c.setCellType(Cell.CELL_TYPE_NUMERIC); 
          c.setCellValue(Integer.parseInt(data[i][j])); 
          break; 
         case 1: 
          if (data[i][j].equals("true")) 
           c.setCellValue("Yes"); 
          else 
           c.setCellValue("No"); 
          break; 
         case 2: 
          if (data[i][j].equals("I")) 
           c.setCellValue("Intermittent"); 
          else 
           c.setCellValue("Not Functional"); 
          break; 
         case 3: 
          c.setCellValue(data[i][j]); 
          break; 
         case 4: 
          c.setCellValue(data[i][j]); 
          break; 
         case 5: 
          c.setCellValue(data[i][j]); 
          break; 
         } 

        } 
       } 
             wb.getSheetAt(0).setPrintGridlines(true); 
       for (int j = 0; j < 6; j++) { 
        s.autoSizeColumn(j); 
       } 
       wb.write(out); 
       out.close(); 
      } catch (Exception ex) { 

      } 
    }; 

回答

-1

看來你沒有太多的列。你可以嘗試像這樣定義每一列:

sheet.autoColumnWidth(column number); //0 for the first column, 1 for the second, etc. 

如果這樣工作,那麼你的循環出了問題。