Popolare una lista in excel

di il
9 risposte

Popolare una lista in excel

Ho provato a popolare una lista di record, ma non sò che cosa sbaglio:

for (int i = 0; i < datatypeSheet.getLastRowNum(); i++) {

	//Riga 3 Colonna 2 è qui dove ci sono altri record che mi deve riempire la lista
	if(datatypeSheet.getRow(3).getCell(2) != null) {
	Row riga = datatypeSheet.getRow(i);
		ArrayList<Row> lista = new ArrayList<>();
		lista.add(riga);
		System.out.println(lista.get(i));
				}
			}
datatypeSheet.getRow(3).getCell(2) --> Significa che Alla riga 3 e la colonna 1 mi deve stampare tutti i record.

Output: Targa
Null...

Nemmeno in questo modo, non mi funziona:

for (int i = 0; i < datatypeSheet.getLastRowNum(); i++) {
	if(datatypeSheet.getRow(3).getCell(2) != null) {
	Row riga = (Row) datatypeSheet.getRow(i).getCell(2);
		ArrayList<Row> lista = new ArrayList<>();
		lista.add(riga);
		System.out.println(lista.get(i));
				}
			}
C'è un altro modo per fare?

9 Risposte

  • Re: Popolare una lista in excel

    
    public static void main(String[] args) throws IOException {
    		String file = "C:\\Users/java/Desktop/prova.xlsx";
    		FileInputStream excelFile = new FileInputStream(new File(file));
    		Workbook workbook = new XSSFWorkbook(excelFile);
    		Sheet datatypeSheet = workbook.getSheetAt(0);
    
    		for (int i = 0; i < datatypeSheet.getLastRowNum(); i++) {
    			if (datatypeSheet.getRow(3).getCell(2).getStringCellValue() != null) {
    				ArrayList<String> lista = new ArrayList<>();
    				lista.add(datatypeSheet.getRow(3).getCell(i).getStringCellValue());
    				System.out.println(lista);
    			}
    		}
    
    	}
    
    
    Nemmeno in questo modo, mi restituisce null, c'è qualcuno che mi può aiutare?
  • Re: Popolare una lista in excel

    imparareJava ha scritto:


    Nemmeno in questo modo, mi restituisce null, c'è qualcuno che mi può aiutare?
    Scusa ma a parte l'uso di Apache POI, che senso ha quel tuo codice??

    Fai un ciclo for su N righe, ok. Poi testi una cella specifica, indipendente da quell'indice i e poi in quel if più "interno" crei una lista che però sarà di un solo elemento, prendendo getCell(i) (una colonna) mentre i è concettuale una "riga".
  • Re: Popolare una lista in excel

    Questo è il mio codice è ci sono riuscito, il problema sta nella stampa che mi stampa più volte la stessa cosa dove sbaglio?
    
    public static void main(String[] args) {
    		try (FileInputStream fis = new FileInputStream("C:\\Users\\java\\Desktop\\prova.xlsx")) {
    			XSSFWorkbook workbook = new XSSFWorkbook(fis);
    			XSSFSheet dataTypeSheet = workbook.getSheetAt(0);
    
    			CellReference nomeTable = new CellReference("C5");
    			CellReference nomeCondizione = new CellReference("C6");
    			CellReference valoreCondizione = new CellReference("C7");
    			CellReference nomeColonnaAScelta = new CellReference("C4");
    			CellReference idRecordDaModificare = new CellReference("F6");
    			
    
    			// Nome Colonna Table
    			Cell cellTableC5 = dataTypeSheet.getRow(nomeTable.getRow()).getCell(nomeTable.getCol());
    
    			// Nome Colonna where
    			Cell cellnomeCondizione = dataTypeSheet.getRow(nomeCondizione.getRow()).getCell(nomeCondizione.getCol());
    
    			// Valore Colonna where
    			Cell cellvaloreCondizione = dataTypeSheet.getRow(valoreCondizione.getRow())
    					.getCell(valoreCondizione.getCol());
    
    			// Nome Colonna a scelta
    			Cell cellNomeColonna = dataTypeSheet.getRow(nomeColonnaAScelta.getRow())
    					.getCell(nomeColonnaAScelta.getCol());
    
    			// ID record da modificare
    			Cell cellidRecordDaModificare = dataTypeSheet.getRow(idRecordDaModificare.getRow())
    					.getCell(idRecordDaModificare.getCol());
    
    			// creare un elenco di stringhe per memorizzare i valori delle celle
    			ArrayList<String> lista = new ArrayList<>();
    
    			// creare un elenco di stringhe per memorizzare i valori delle celle
    			ArrayList<Integer> listaNumber = new ArrayList<>();
    
    			for (int rowIndex = 4; rowIndex < 14; rowIndex++) {
    
    				// crea l'oggetto riga
    				XSSFRow currentRow = dataTypeSheet.getRow(rowIndex);
    				// controlla se esiste
    				if (currentRow != null) {
    					// quindi prendi semplicemente la colonna E (indice di cella 4)
    					XSSFCell cell = currentRow.getCell(4);
    
    					// quindi prendi semplicemente la colonna F (indice di cella 5)
    					XSSFCell cellF = currentRow.getCell(5);
    
    					// controlla se esiste
    					if (cell != null && cellF != null) {
    
    						// se esiste, memorizza il suo valore di stringa nella lista
    						lista.add(cell.getStringCellValue());
    
    						// se esiste, memorizza il suo valore di stringa nella lista
    						listaNumber.add((int) cellF.getNumericCellValue());
    						
    					} else {
    						System.err.println("La cella E e F (indeice 4 e 5) della riga " + (rowIndex + 1) + " (indice "
    								+ rowIndex + ") è null");
    					}
    				} else {
    					System.err.println("La Riga " + (rowIndex + 1) + " (indice " + rowIndex + ") è null");
    				}
    			}
    			System.out.println(String.join(", ", lista));
    			System.out.println(String.join(", ", listaNumber.toString()));
    			
    			for (int i = 0; i < lista.size(); i++) {
    				for (int j = 0; j < listaNumber.size(); j++) {
    				System.out.println("UPDATE " + cellTableC5 + " SET " + cellNomeColonna + " = " + "'" + lista.get(i) + "'" + " WHERE "
    						+ cellnomeCondizione + " = " + "'" + (int) cellvaloreCondizione.getNumericCellValue() + "'" + " AND" + " id = " +  listaNumber.get(j).toString() + ";");
    				}
    			}
    			
    			
    
    		} catch (FileNotFoundException e) {
    			System.err.println("File non trovato…");
    			e.printStackTrace();
    		} catch (IOException e) {
    			System.err.println("Errore dell'uscita di ingresso…");
    			e.printStackTrace();
    		}
    
    	}
    
    }
    
    
    La stampa:

    a11, b, ccc, FGMNR, e, rr222ff, dd, yy, ii, pp
    [35, 33, 44444, 23232, 454, 22, 99933, 10, 2222, 3333]
    UPDATE dispositivo_veicolo SET targa = 'a11' WHERE id_anagrafica = '111' AND id = 35;
    UPDATE dispositivo_veicolo SET targa = 'a11' WHERE id_anagrafica = '111' AND id = 33;
    UPDATE dispositivo_veicolo SET targa = 'a11' WHERE id_anagrafica = '111' AND id = 44444;
    ...............

    In pratica la targa mi stampa tantissime volte, come mai mi potete aiutare?
  • Re: Popolare una lista in excel

    imparareJava ha scritto:


    
    			// creare un elenco di stringhe per memorizzare i valori delle celle
    			ArrayList<String> lista = new ArrayList<>();
    
    			// creare un elenco di stringhe per memorizzare i valori delle celle
    			ArrayList<Integer> listaNumber = new ArrayList<>();
    
    			for (int rowIndex = 4; rowIndex < 14; rowIndex++) {
    
                                     [....]
    
    					if (cell != null && cellF != null) {
    
    						// se esiste, memorizza il suo valore di stringa nella lista
    						lista.add(cell.getStringCellValue());
    
    						// se esiste, memorizza il suo valore di stringa nella lista
    						listaNumber.add((int) cellF.getNumericCellValue());
    						
    					}
    			}
    
    Le due liste sono gestite a indici "correlati" tra di loro. Ovvero ad un certo indice i i valori in lista e listaNumber a quell'indice sono associati tra di loro perché rappresentano due dati di due colonne differenti ma sulla STESSA riga dello sheet.

    Ma tu poi alla fine fai un doppio ciclo for ANNIDATO e questo causa il "prodotto cartesiano" dei dati. Ma è sbagliato. Basta 1 solo ciclo for.

    Sono ragionamenti basilari questi ....
  • Re: Popolare una lista in excel

    In che senso?
    In che modo vorresti modificare il ciclo for, facendo 1 solo ciclo con due liste?
  • Re: Popolare una lista in excel

    imparareJava ha scritto:


    In che senso?
    Caso similare/equivalente: hai N righe con due colonne nome e età
    Mario     35
    Roberto   42
    Giacomo   34
    Anna      28
    ....
    In una lista collezioni tutti i nomi [Mario, Roberto, ....] e in un'altra lista collezioni tutte le età [35, 42, .....]
    A rigor di logica OOP sarebbe più appropriato modellare tutto questo con una lista di oggetti di una tua classe, non con due liste separate, ma non è questo il problema (magari è "troppo" per quello che devi fare).
    Il punto è che i valori nelle due liste allo STESSO indice sono correlati.

    Se fai il doppio ciclo for ANNIDATO, fai sostanzialmente la combinazione completa tra tutti i valori. Mario 35, Mario 42, Mario 34, ..... Roberto 35, Roberto 42, Roberto 34, ecc...

    QUALE SENSO HA nel tuo caso? Ragioni su queste cose?
  • Re: Popolare una lista in excel

    Hai ragione, ho provato e mi funziona con 1 solo ciclo
  • Re: Popolare una lista in excel

    Una domanda.
    Visto che in excel ho sempre una lista dei valori di tipo stringa.
    Se nella lista esiste id e targa fammi update, se non esiste id e targa fammi la insert. Secondo voi va bene quello che ho fatto? che cosa bisogna aggiustare?
    
    for (i = 0, y = 0; i < 280; i++, y++) {
    
    					// Se esiste ID E TARGA faccio L'UPDATE
    					if (listaIdVeicolo.get(i).equalsIgnoreCase(listaIdVeicolo.get(y))
    							&& lista_targa.get(i).equalsIgnoreCase(lista_targa.get(y))) {
    
    						System.out.print("UPDATE veicolo" + " set" + " veicolo.data_fine_validita = " + "'"
    								+ lista_data_fine_validita.get(i) + "'" + "," + " veicolo.data_inizo_validita = " + "'"
    								+ lista_data_inizio_validita.get(i) + "'" + "," + " veicolo.classe_euro = " + "'"
    								+ lista_classe_euro.get(i) + "'" + "," + " veicolo.tipo_di_possesso= " + "'"
    								+ lista_tipo_di_possesso.get(i) + "'" + " where veicolo.id = " + "'"
    								+ listaIdVeicolo.get(i) + "'" + " and" + " veicolo.targa = " + "'" + lista_targa.get(i)
    								+ "'" + ";\n");
    
    						fw.write("UPDATE veicolo" + " set" + " veicolo.data_fine_validita = " + "'"
    								+ lista_data_fine_validita.get(i) + "'" + "," + " veicolo.data_inizo_validita = " + "'"
    								+ lista_data_inizio_validita.get(i) + "'" + "," + " veicolo.classe_euro = " + "'"
    								+ lista_classe_euro.get(i) + "'" + "," + " veicolo.tipo_di_possesso= " + "'"
    								+ lista_tipo_di_possesso.get(i) + "'" + " where veicolo.id = " + "'"
    								+ listaIdVeicolo.get(i) + "'" + " and" + " veicolo.targa = " + "'" + lista_targa.get(i)
    								+ "'" + ";\n");
    
    					} else if(listaIdVeicolo.get(i) != cellIdveicolo.getStringCellValue() && lista_targa.get(i) != cell_targa.getStringCellValue()){
    						System.out.print(
    								"insert into veicolo (create_date,modified_date,uuid, classe_euro, codice_cliente_originario,contratto,data_fine_validita,data_inizio_validita, disponibilita,nazione,targa,tipo_di_possesso, id_anagrafica) "
    										+ "VALUES (" + "'" + timestamp + "'" + "," + "'" + timestamp + "'" + "," + "'"
    										+ listaveicoloUuid.get(i) + "'" + "," + "'" + lista_classe_euro.get(i) + "'"
    										+ "," + "'" + listaCodiceClienteOriginario.get(i) + "'" + "," + "'"
    										+ listaContratto.get(i) + "'" + "," + "'"
    										+ lista_data_fine_validita.get(i).toString() + "'" + "," + "'"
    										+ lista_data_inizio_validita.get(i).toString() + "'" + "," + "'"
    										+ listadisponibilita.get(i) + "'" + "," + "'" + listaNazione.get(i) + "'" + ","
    										+ "'" + lista_targa.get(i) + "'" + "," + "'" + lista_tipo_di_possesso.get(i)
    										+ "'" + "," + "'" + listaAnagrafica.get(i) + "'" + ")" + ";\n");
    
    						fw.write(
    								"insert into veicolo (create_date,modified_date,uuid, classe_euro, codice_cliente_originario,contratto,data_fine_validita,data_inizio_validita, disponibilita,nazione,targa,tipo_di_possesso, id_anagrafica) "
    										+ "VALUES (" + "'" + timestamp + "'" + "," + "'" + timestamp + "'" + "," + "'"
    										+ listaveicoloUuid.get(i) + "'" + "," + "'" + lista_classe_euro.get(i) + "'"
    										+ "," + "'" + listaCodiceClienteOriginario.get(i) + "'" + "," + "'"
    										+ listaContratto.get(i) + "'" + "," + "'"
    										+ lista_data_fine_validita.get(i).toString() + "'" + "," + "'"
    										+ lista_data_inizio_validita.get(i).toString() + "'" + "," + "'"
    										+ listadisponibilita.get(i) + "'" + "," + "'" + listaNazione.get(i) + "'" + ","
    										+ "'" + lista_targa.get(i) + "'" + "," + "'" + lista_tipo_di_possesso.get(i)
    										+ "'" + "," + "'" + listaAnagrafica.get(i) + "'" + ")" + ";\n");
    
    					}
    					else {
    						System.out.println("Nessuna Azione!!!");
    					}
    				}
    
    				fw.flush();
    				fw.close();
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    
  • Re: Popolare una lista in excel

    Ho provato anche in questo modo:
    
    for (i = 0; i < 280; i++) {
    					// Se il valore NON E' NULL: ID E TARGA FACCIO L'UPDATE
    					if ((listaIdVeicolo.get(i) != null || listaIdVeicolo.get(i).isEmpty() == true)
    							&& (lista_targa.get(i) != null || lista_targa.get(i).isEmpty()) == true) {
    						System.out.print("UPDATE veicolo" + " set" + " veicolo.data_fine_validita = " + "'"
    								+ lista_data_fine_validita.get(i) + "'" + "," + " veicolo.data_inizo_validita = " + "'"
    								+ lista_data_inizio_validita.get(i) + "'" + "," + " veicolo.classe_euro = " + "'"
    								+ lista_classe_euro.get(i) + "'" + "," + " veicolo.tipo_di_possesso= " + "'"
    								+ lista_tipo_di_possesso.get(i) + "'" + " where veicolo.id = " + "'"
    								+ listaIdVeicolo.get(i) + "'" + " and" + " veicolo.targa = " + "'" + lista_targa.get(i)
    								+ "'" + ";\n");
    
    						fw.write("UPDATE veicolo" + " set" + " veicolo.data_fine_validita = " + "'"
    								+ lista_data_fine_validita.get(i) + "'" + "," + " veicolo.data_inizo_validita = " + "'"
    								+ lista_data_inizio_validita.get(i) + "'" + "," + " veicolo.classe_euro = " + "'"
    								+ lista_classe_euro.get(i) + "'" + "," + " veicolo.tipo_di_possesso= " + "'"
    								+ lista_tipo_di_possesso.get(i) + "'" + " where veicolo.id = " + "'"
    								+ listaIdVeicolo.get(i) + "'" + " and" + " veicolo.targa = " + "'" + lista_targa.get(i)
    								+ "'" + ";\n");
    					}
    					else {
    						System.out.print(
    								"insert into veicolo (create_date,modified_date,uuid, classe_euro, codice_cliente_originario,contratto,data_fine_validita,data_inizio_validita, disponibilita,nazione,targa,tipo_di_possesso, id_anagrafica) "
    										+ "VALUES (" + "'" + timestamp + "'" + "," + "'" + timestamp + "'" + "," + "'"
    										+ listaveicoloUuid.get(i) + "'" + "," + "'" + lista_classe_euro.get(i) + "'"
    										+ "," + "'" + listaCodiceClienteOriginario.get(i) + "'" + "," + "'"
    										+ listaContratto.get(i) + "'" + "," + "'"
    										+ lista_data_fine_validita.get(i).toString() + "'" + "," + "'"
    										+ lista_data_inizio_validita.get(i).toString() + "'" + "," + "'"
    										+ listadisponibilita.get(i) + "'" + "," + "'" + listaNazione.get(i) + "'" + ","
    										+ "'" + lista_targa.get(i) + "'" + "," + "'" + lista_tipo_di_possesso.get(i)
    										+ "'" + "," + "'" + listaAnagrafica.get(i) + "'" + ")" + ";\n");
    
    						fw.write(
    								"insert into veicolo (create_date,modified_date,uuid, classe_euro, codice_cliente_originario,contratto,data_fine_validita,data_inizio_validita, disponibilita,nazione,targa,tipo_di_possesso, id_anagrafica) "
    										+ "VALUES (" + "'" + timestamp + "'" + "," + "'" + timestamp + "'" + "," + "'"
    										+ listaveicoloUuid.get(i) + "'" + "," + "'" + lista_classe_euro.get(i) + "'"
    										+ "," + "'" + listaCodiceClienteOriginario.get(i) + "'" + "," + "'"
    										+ listaContratto.get(i) + "'" + "," + "'"
    										+ lista_data_fine_validita.get(i).toString() + "'" + "," + "'"
    										+ lista_data_inizio_validita.get(i).toString() + "'" + "," + "'"
    										+ listadisponibilita.get(i) + "'" + "," + "'" + listaNazione.get(i) + "'" + ","
    										+ "'" + lista_targa.get(i) + "'" + "," + "'" + lista_tipo_di_possesso.get(i)
    										+ "'" + "," + "'" + listaAnagrafica.get(i) + "'" + ")" + ";\n");
    
    					}
    
    				}
    		
    
    
Devi accedere o registrarti per scrivere nel forum
9 risposte