2016-06-28 6 views
1

zu setzen Ich habe 2 Arrays, die in der Länge variieren und möchten die Daten beginnend bei B3 und D3 nach unten einfügen Dies sind v8columnname und v9columnname. Ich habe auch 2 v8tableNames und v9tableNames, die bereits gefüllt sind. Meine Arraylisten werden aus zwei verschiedenen Datenbanken abgefragt und ich plane, die beiden Zeilen in VBA zu vergleichen, aber ich habe dieses Makro bereits eingerichtet. Ich bleibe nur dran, die Zeilen so auszurichten, dass sie genau ausgerichtet sind, denn der Code hat jetzt die B-Spalte, die bei B3 beginnt, aber die D-Spalte beginnt beim letzten Index der B-Zeile. Jede Hilfe wird sehr geschätztZellenwerte werden nicht in die richtige Zeile kopiert, wenn versucht wird, cellvalue in Excel aus Java (POI API)

ArrayList v8tableNames = new ArrayList(); 
ArrayList v9tableNames = new ArrayList(); 
XSSFWorkbook workbook = new XSSFWorkbook(); 
XSSFSheet sheet; 
XSSFRow row; 

ArrayList v8columns = new ArrayList(); 
ArrayList v9columns = new ArrayList(); 
for (int i = 0; i<5; i++) { 
     sheet = workbook.createSheet(); 
     row = sheet.createRow(0); 
     Cell cell = row.createCell(0); 
     cell.setCellValue("Version 8"); 
     row = sheet.getRow(0); 
     cell = row.createCell(2); 
     cell.setCellValue("Version 9"); 
     row = sheet.getRow(0); 
     cell = row.createCell(3); 
     cell.setCellValue(v9tableNames.get(i).toString()); 

     //getv9 is a function that returns column names from v8table 

     v9columns = getv9Columns(v9tableNames.get(i).toString()); 

     row = sheet.getRow(0); 

     //set C1 to v9tablename, one value from the array 
     cell = row.createCell(3); 
     cell.setCellValue(v9tableNames.get(i).toString()); 

     //loop through all table names on v9 to see if there is a match for v8 
     for (int count = 0; count<v9tableNames.size();count++) { 
     //checks if there is a match in table names 
      if (v9tableNames.get(i).toString().equals(v8tableNames.get(count).toString())) { 
       //puts v8 table name in B1 
       cell = row.createCell(1); 
       cell.setCellValue(v8tableNames.get(count).toString()); 

       //getv8 is a function that returns table names 

       v8columns = getv8Columns(v8tableNames.get(count).toString()); 

       for (int k = 0; k<v8columns.size() || k<v9columns.size();k++) { 
        //would like to put columnnames from v8table here starting at B3 
        row = sheet.createRow(k+2); 
        cell = row.createCell(1); 
        cell.setCellValue(v8columns.get(k).toString()); 
       } 
      } 
     } 


     //put v9columns into D3, this is where it gets stuck putting the last value into D(lastindex of B) 
     for (int m = 0; m<v9columns.size();m++) { 
        cell = row.createCell(3); 
        cell.setCellValue(v9columns.get(m).toString()); 
     } 
    } 
    try { 
     FileOutputStream out = new FileOutputStream( 
       new File("Connect.xlsx")); 
     workbook.write(out); 
     out.close(); 
     System.out.println("Workbook.xlsx written successfully"); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 

Antwort

1

Sie müssen die 'Reihe' aktualisieren, um die v9columns for-Schleife eingeben:

for (int m = 0; m<v9columns.size();m++) { 
    // Start at row zero and shift to row 3, then increment by m++ on each iteration 
    row = sheet.createRow(0+m+2); 
    cell = row.createCell(3); 
    cell.setCellValue(v9columns.get(m).toString()); 
} 

Auch bemerke ich einige redundante Verwendung von ‚row = sheet.getRow (0) In Ihrem Code verweist die Zeile in einigen Fällen bereits auf sheet.getRow (0). Es kann Ihnen helfen, Ihren Code zu kommentieren, wo Sie Zeile/Zelle create/get haben, um sich selbst anzuzeigen, welche Spalte oder Zeile adressiert wird.

Verwandte Themen