2016-07-15 3 views
0

Ich schreibe ein Programm, um Mitarbeiter Sitzplätze mit Java und Apache Poi zu verfolgen, um eine Excel-Tabelle zu schreiben. Das Programm wird den Benutzer auffordern, die Schreibtischnummer, den Angestelltennamen und die Anzahl der Angestellten, die an diesem Schreibtisch sitzen, einzugeben. Mein Problem ist, dass das Programm nur die letzte Information schreibt, die vom Benutzer eingegeben wurde, und löscht, was zuvor in dieser Zeile eingegeben wurde. Wie kann ich behalten, was in der ersten Zeile des Excel-Blattes eingegeben wurde? Ich habe es in einer Schleife, wo der Benutzer aufgefordert wird, die Sitzplatzinformationen aufgefordert werden, bis der Benutzer EXIT eintritt. Ich möchte, dass jedes Mal, wenn neue Informationen eingegeben werden, eine Zeile inkrementiert wird.Wie kann ich die Zeilen in Excel erhöhen mit Apache poi

Dies ist, was ich bisher:

import java.util.*; 
import org.apache.poi.hssf.usermodel.*; 
import org.apache.poi.hssf.util.*; 
import org.apache.poi.ss.usermodel.*; 
import org.apache.poi.ss.util.*; 
import java.io.*; 

public class EmployeeSeatingRep { 

public static void main(String[] args){ 

    String deskNumber = ""; 
    String employeeName = ""; 
    int empsAtDesk = 0; 
    boolean keepRunning = true; 


//Blank workbook 
    HSSFWorkbook workbook = new HSSFWorkbook(); 
//Blank sheet 
    HSSFSheet sheet = workbook.createSheet("Seating Details"); 

//create heading 

     Row rowHeading = sheet.createRow(0); 
     rowHeading.createCell(0).setCellValue("Desk:"); 
     rowHeading.createCell(1).setCellValue("Employee(s)Name:"); 
     rowHeading.createCell(2).setCellValue("Number At Desk:"); 

//Font size and style loop for my headers 

     for(int i = 0; i < 3; i++) 
     { 
      CellStyle stylerowHeading = workbook.createCellStyle(); 
      Font font = workbook.createFont(); 
      font.setBold(true); 
      font.setFontName(HSSFFont.FONT_ARIAL); 
      font.setFontHeightInPoints((short) 11); 
      stylerowHeading.setFont(font); 
      stylerowHeading.setVerticalAlignment(CellStyle.ALIGN_CENTER); 
      rowHeading.getCell(i).setCellStyle(stylerowHeading); 
     } 
    while(keepRunning){ 
     Scanner scnr = new Scanner(System.in); 

     System.out.print("Enter desk number: "); 
     deskNumber = scnr.nextLine(); 
     if(deskNumber.equals("EXIT")) 
     { 
      System.out.print("You have ended the program"); 
      System.exit(0); 
     } 
     else 
     { 
      System.out.print("Enter employee name: "); 
      employeeName = scnr.nextLine(); 
      System.out.print("Enter amount of employees at desk: "); 
      empsAtDesk = scnr.nextInt(); 







//This data needs to be written (Object[]) 
     Map <String, Object[]> data = new TreeMap<String, Object[]>(); 
     data.put("2", new Object[] {deskNumber, employeeName, empsAtDesk}); 

//Iterate over data and write to sheet 
     Set<String> keyset = data.keySet(); 
     int rownum = 1; 
     for(String Key : keyset) 
     { 
      Row row = sheet.createRow(rownum++); 
      Object [] objArr = data.get(Key); 
      int cellnum = 0; 
      for(Object obj : objArr) 
      { 
       Cell cell = row.createCell(cellnum++); 
       if(obj instanceof String) 
       { 
        cell.setCellValue((String)obj); 
       } 
       else if(obj instanceof Integer) 
       { 
        cell.setCellValue((Integer)obj); 
       } 
      } 
      if(!(deskNumber.equals("EXIT"))) 
      { 
       rownum++; 

     } 

//Auto size my columns that will be filled out with user input info.    
     for (int i = 0; i < 3; i++) 
     { 
      sheet.autoSizeColumn(i); 
     } 
     } 
try{ 

//save to excel file 
     FileOutputStream out = new FileOutputStream(new File("Employee Seating Report.xls")); 
     workbook.write(out); 
     out.flush(); 
     out.close(); 
     System.out.println("Excel Written Succesfully..."); 
    } catch (FileNotFoundException e) { 

     e.printStackTrace(); 

    } catch (IOException e){ 

     e.printStackTrace(); 

    } catch (Exception e) { 

     System.out.println(e.getMessage()); 
    } 
    } 
}  
}//pub static void end brace  
}//pub class end brace 

Antwort

1

Das Problem Sie beschreiben, wird durch diese verursacht:

int rownum = 1; <-- 
for(String Key : keyset) 
{ 
    Row row = sheet.createRow(rownum++); 

Sie rownum in Ihrem Haupt-Schleife deklariert haben und als Ergebnis wird es immer 1.

Anstatt zu schaffen sein, Befüllen und Schreiben Sie Ihre data Karte jedes Mal durch die Schleife, würde es die Dinge erheblich vereinfachen, wenn Sie die Schleife verwenden, um eine List von Zeilenobjekte zu erstellen, dann schreiben Sie sie in die Datei, wenn der Benutzer fertig ist.

+0

Vielen Dank! Ich kann nicht glauben, dass das mein Problem die ganze Zeit war! – Mel

0

Jede Information vom Benutzer eingegebene sollte auf eine neue Zeile in Excel hinzugefügt werden, so dass Sie Reihe außerhalb der for-Schleife erstellen müssen und nur Zellen zu schaffen, in für Schleife für eingegebene Daten. Etwas wie dieses:

Scanner scnr = new Scanner(System.in); 

    System.out.print("Enter desk number: "); 
    deskNumber = scnr.nextLine(); 
    if(deskNumber.equals("EXIT")) 
    { 
     System.out.print("You have ended the program"); 
     System.exit(0); 
    } 
    else 
    { 
     System.out.print("Enter employee name: "); 
     employeeName = scnr.nextLine(); 
     System.out.print("Enter amount of employees at desk: "); 
     empsAtDesk = scnr.nextInt(); scnr.next(); 
     Row row = sheet.createRow(rownum++); 
     Object [] objArr = new Object[] {deskNumber, employeeName, empsAtDesk}; 
     int cellnum = 0; 
     for(Object obj : objArr) 
     { 
      Cell cell = row.createCell(cellnum++); 
      if(obj instanceof String) 
      { 
       cell.setCellValue((String)obj); 
      } 
      else if(obj instanceof Integer) 
      { 
       cell.setCellValue((Integer)obj); 
      } 
     } 
    } 

Hoffe, dass dies hilft.

Verwandte Themen