Pannello di Controllo Moderatore ]

Raccolta risultati di una verifica su più pagine

Discussioni sull'applicazione per i fogli di calcolo

Raccolta risultati di una verifica su più pagine

Messaggioda DanteS » sabato 8 settembre 2018, 13:00

Un saluto a tutti

So cercando di realizzare delle macro che mi consentano di raccogliere le valutazioni di una verifica a risposta chiusa su due pagine importate da scanner. I risultati per ciascuna pagina, restituiti su due file in formato csv, sono prodotti da un programma di lettura scansioni OMR (Optical Mark Recognition), http://www.formscanner.org basato su java. Il progetto, freeware, si trova al link che posto perché potrebbe interessare a colleghi (insegno alle Superiori) o quant'altri; io sto usando il programma ormai da due anni sfruttando una foglio excel incluso nel progetto (ProcessBubble) un .xls che gira bene su Calc, ottimo per la possibilità di tarare la valutazione dei singoli quesiti e per fare statistiche, ma un po' macchinoso nelle fasi di caricamento e assemblaggio dei dati. Sto quindi tentando di costruire una procedura con il generatore di macro. Ho provato a studiare OO basic da - quasi - assoluto principiante dopo una esperienza di programmazione basic (con il commodore 64!) e HTML.

Allego il foglio fin qui lavorato “risultati_RACCOLTA bozza.ods”
risultati_RACCOLTA bozza.ods
Foglio calc calcolo risultati
(29.48 KiB) Scaricato 5 volte


Allego anche i due .csv che riportano i risultati della scansione di due pagine (
risultati-1x.csv
risultati p1
(2.35 KiB) Scaricato 5 volte
risultati-2x.csv
risultati p2
(1.98 KiB) Scaricato 1 volta
); i valori A e B stanno rispettivamente per Vero – Falso, le altre lettere si riferiscono a quesiti del tipo “completa la frase” e ogni lettera corrisponde a un vocabolo di completamento; le ultime due colonne registrano il numero identificativo dell'allievo distribuito su due celle una per le decine, l’altra per le unità. In buona sostanza le righe corrispondono alle risposte per ciascun allievo e le colonne ai quesiti.

Si dovrebbe procedere popolando il file ods “risultati_RACCOLTA bozza.ods” composto dal solo Foglio1 e usando il comando "Inserisci - foglio da file", e caricare i due file csv su due fogli (escludo la prima riga e uso “;” come separatore). Si applicano poi le macro contenute nel file calc per ciascun foglio importato

La macro "concatena” (valida per ambedue due fogli importati) sposta le caselle numeriche dalle ultime due colonne alla seconda e terza e poi le concatena in una casella vuota appositamente creata ottenendo così il numero progressivo allievo. Ho fatto questo per avere le ultime colonne vuote perché mi sembrava comodo poter aver disponibili i comandi vai alla fine della colonna - riga o dell'area dati.

L'allievo "00" in prima riga (inizio dati E1) è il correttore, è cioè la verifica da 10, a questa riga faranno riferimento le righe con le risposte degli allievi tramite la formula "=SE(E1<>"";SE(E1=E$1;1;0))" copiata e incollata dopo aver richiamato lo shortcut (CT RL+F2), registrata in macro, assegnando quindi 1 per la corrispondenza esatta e 0 per quella mancata.
Le macro "confronta" e “confronta1” contengono tale formula che “dovrebbe” essere estesa a tutta l'area dati dei risultati.

Ho poi deciso di collocare le corrispondenze così ottenute 0,1 .... etc in un'area dati sottostante precisamente due righe sotto l'ultimo allievo estendendo (incollando) la formula su tutta la riga (SHIFT+Fine)

Qui mi sono bloccato perché non so come delimitare questa nuova area dati verso il basso, volendo incollare la formula sopra indicata su tante righe sottostanti quanti sono gli allievi. Pensavo di leggere il valore della riga dell'ultimo allievo nell'area dati sopra e sommarla al valore della nuova riga, ma non so come memorizzare la variabile - ottenuta con la macro “rifriga” (quest'ultima macro, che somma il numero ottenuto con rif.riga al valore della riga della cella, inoltre, ordina il numero progressivo dell'allievo). Non sono riuscito a usare la funzione “RangeAddress” e “GetActiveCell” per definire l’area dati da cui poi generare la somma dei risultati

Pensavo di usare comando SHIFT + CTRL + Fine per raggiungere l'ultima colonna (delimitare l'area e finalmente incollare su tutta l'area la formula sopra riportata con CTRL + V). Ho pure provato ad usare i comandi 'Dati-definisci area-seleziona intervallo' registrando le macro “definisci area 21” ”definisci area 2” rispettivamente per i primi due fogli, ma non sembra funzionare.

Il file calc allegato ha, nel foglio1_3, il risultato atteso generato in parte con le macro e in parte completato “a mano”. Il foglio1_2 è il risultato di dove si arriva lanciando la macro “definisciarea21” e poi “confrontap1”. Qui ho anche aggiunto alla riga 21 due celle per avere i valori di rif.riga e rif.colonna, che non riesco però a usare come variabili nelle funzioni di confronto dati. Sempre in questo foglio ho provato a usare la funzione, più snella, matr.somma.prodotto, https://forum.openoffice.org/it/forum/viewtopic.php?f=9&t=2997&p=14578&hilit=somma+risultati.+test#p14578 ma rimango ugualmente bloccato sul problema. In buona sostanza non riesco a dimensionare la matrice con area variabile (numero degli allievi per le righe e numero dei quesiti per le colonne) a seconda dei dati importati. Pensavo si potrebbe inserire una macro con finestra di dialogo iniziale con la quale chiedere il numero degli allievi e quello dei quesiti, ma tant’è, non saprei come inserire questi dati nelle funzioni di confronto e comunque credo si potrebbero acquisire più semplicemente i valori delle celle che "chiudono" le aree dati importate.

Il Foglio1, infine, è pensato per raccogliere, copiando dai due fogli con i dati il numero progressivo dell'allievo e il corrispondente risultato per ciascuna pagina. La colonna F somma i risultati delle due pagine e la colonna J riporta il valore delle risposte esatte in decimi (uso questo foglio da tempo per incollare i risultati ottenuti con il foglio ProcessBubble di cui ho detto all'inizio).

Ciliegina sulla torta, da ieri, se provo a editare con “Modifica” le macro create, calc va in crash (su windows, non su mac, e magari chi mi legge sarà più fortunato).

Mi rendo conto che il mio progetto, così come l'ho pensato, è lambiccato non poco e che ci siano procedimenti più snelli per andare in goal. Le macro contenute sono verosimilmente ridondanti e incomplete, ma se riesco a risolvere col vostro aiuto le registro di nuovo pulite (anche se un’idea a parte me lo sono fatta studiando le differenze tra i listati generati con il registratore macro e il codice scritto all’interno dell’IDE Basic, sicuramente più agile). Per cui ringrazio anticipatamente, confidando nella pazienza di chi mi legge
Ultima modifica di DanteS il giovedì 20 settembre 2018, 0:50, modificato 2 volte in totale.
OpenOffice 4.1.4 su Windows 10
DanteS
 
Messaggi: 14
Iscritto il: sabato 2 dicembre 2017, 18:57

Re: Raccolta risultati di una verifica su più pagine

Messaggioda patel » domenica 9 settembre 2018, 12:14

il registratore produce codice poco comprensibile e difficilmente modificabile, meglio studiare il basic di OO ci cui puoi trovare molti esempi qui http://www.pitonyak.org/oo.php
Per quanto riguarda la tua richiesta non sono riuscito a capire bene, troppe cose tutte insieme, dovresti esporre un problema alla volta di quelli che non sei riuscito a risolvere
-------------------
OpenOffice 4.1 e Libre Office 6 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 2892
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Raccolta risultati di una verifica su più pagine

Messaggioda DanteS » domenica 9 settembre 2018, 19:18

Allego un nuovo file calc senza macro con i dati elaborati che vorrei avere organizzati automaticamente tramite macro. Il risultato qui è ottenuto eseguendo i comandi con mouse e tastiera.
Il foglio1_2 contiene i dati importati della verifica. La riga 1 contiene le risposte esatte con le quali le altre righe (ogni riga sottostante contiene le risposte dei singoli allievi) devono confrontarsi. Nella cella E23 ho immesso la funzione "=SE(E1<>"";SE(E1=E$1;1;0))" che poi ho esteso, trascinando, fino alla colonna AJ e poi trascinando fino alla riga 43 (è numero degli allievi aggiunto alla riga 23 dove inizia l'area dati per il confronto delle risposte) 1 e 0 riportano le risposte esatte o errate. Nella colonna AK partendo dalla riga 23 la funzione SOMMA calcola il totale delle risposte esatte.
Per verificare l'uso di un'altra funzione, precisamente "=MATR.SOMMA.PRODOTTO(($E$1:$AJ$1)=(E1:AJ1))" che restituisce medesima somma senza usare un'area dati di "appoggio", ho copiato uesta funzione trascinandola dalla cella AK1 a AK21 (sono in buona sostanza due vie per ottenere la somma dei risultati ottenuti dagli allievi).
Quello che vorrei è automatizzare questi passaggi atteso che ovviamente ogni verifica deve prevedere diversi allievi per classe e differente numero di quesiti (righe e colonne), quindi un'area dati "variabile". E' evidente che le funzioni sopra usate si riferiscono a un'area dati fissa. In buona sostanza vorrei una macro che leggesse la fine dell'area dati importata (in questo caso "AJ21") e inserisse la variabile nelle formule ("SE" oppure "MATRICE.SOMMA-PRODOTTO".
Nel Foglio1, infatti, importo un'area con una riga in più e una colonna in più, sulla quale le macro da me tentate in modalità registrazione (inserite nel file del mio post precedente) non funzionano (ho usato i comandi COPIA CELLA, INCOLLA e VAI A FINE RIGA). Grazie
Allegati
confronta risultati verifica.ods
Prospetto per individuazione Area Dati
(19.87 KiB) Scaricato 7 volte
OpenOffice 4.1.4 su Windows 10
DanteS
 
Messaggi: 14
Iscritto il: sabato 2 dicembre 2017, 18:57

Re: Raccolta risultati di una verifica su più pagine

Messaggioda patel » lunedì 10 settembre 2018, 11:54

DanteS ha scritto:..... In buona sostanza vorrei una macro che leggesse la fine dell'area dati importata (in questo caso "AJ21") e inserisse la variabile nelle formule ("SE" oppure "MATRICE.SOMMA-PRODOTTO".
tramite macro è possibile leggeree l'ultima riga dell'area dati importata, ma non lo è inserire il dato nelle formule, occorre fare tutto tramite macro. Avevo chiesto un problema alla volta ma non mi sembra che tu lo abbia recepito.
-------------------
OpenOffice 4.1 e Libre Office 6 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 2892
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Raccolta risultati di una verifica su più pagine

Messaggioda DanteS » lunedì 10 settembre 2018, 15:06

Provo a riformulare in maniera - spero - semplificata come segue:

Data un'area dati E1:"XN" dove "XN" rappresenta le coordinate della cella finale di un'area dati variabile, con quali istruzioni OObasic posso
1) leggere il valore di "XN"
2) memorizzare tale valore
3) inserirlo nella funzione =MATR.SOMMA.PRODOTTO(($E$1:$"X"$"N")=(E1:"XN"))

Grazie
OpenOffice 4.1.4 su Windows 10
DanteS
 
Messaggi: 14
Iscritto il: sabato 2 dicembre 2017, 18:57

Re: Raccolta risultati di una verifica su più pagine

Messaggioda patel » lunedì 10 settembre 2018, 18:37

Se ho capito bene nel Foglio1_2 tu importi il file csv che può avere un numero di righe variabile e tu vuoi conoscere l'ultima riga.
Domanda per Dante: la tabella sottostante con le formule ce la metti dopo aver fatto l'importazione ? io per trovare l'ultima riga piena devo avere il foglio vuoto o almmeno alcune righe vuote sotto la tabella importata.

Domanda per Dante e Gioh66: se tramite macro scrivo nella cella AM1 l'indirizzo dell'ultima cella della tabella importata, tu riesci ad utilizzarlo nelle formule ?
-------------------
OpenOffice 4.1 e Libre Office 6 su Windows 10
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
 
Messaggi: 2892
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Raccolta risultati di una verifica su più pagine

Messaggioda gioh66 » lunedì 10 settembre 2018, 21:36

Buonasera, forse si potrebbe fare una formula che tramite INDIRETTO e CONTA.VALORI sulla colonna A, vada ad indicare un matrice variabile...
Una cosa tipo INDIRETTO("F1:AK"&conta.valori(A1:A1000))
ma non mi viene in mente nessuna formula che ti dia il risultato voluto da una simile matrice.
L'unica cosa che mi viene in mente è di modificare la tua formula così
Codice: Seleziona tutto   Espandi visualeStringi visuale
=SE($A1="";"";MATR.SOMMA.PRODOTTO($F$1:$AK$1=$F1:$AK1))

e applicarla al range AL1:AL200 (o più).
In pratica nella casella del nome delle celle scrivi AL1:AL200 e dai invio. Poi in AL1 metti la formula e la confermi con ALT+INVIO e viene applicata al range indicato, lasciando in bianco le celle corrispondenti della colonna A che sono vuote. Non è proprio un automatismo ma velocizza un po' il lavoro.
Libreoffice 6 / Ubuntu 18.04 - PcLinuxOS
Libreoffice 5.1 / Ubuntu 16.04 - LinuxMint 18
Avatar utente
gioh66
Volontario
Volontario
 
Messaggi: 463
Iscritto il: lunedì 31 luglio 2017, 14:57

Re: Raccolta risultati di una verifica su più pagine

Messaggioda lucky63 » martedì 11 settembre 2018, 22:05

Allego esempio con file contenente due fogli di lavoro e una macro che quando avviata :
- carica il file csv1 nel Foglio1;
- carica il file csv2 nel Foglio2;
- in entrambi i fogli inserisce dopo la colonna A due colonne (B e C) che vengono popolate rispettivamente con il NR.Studente e il rispettivo PUNTEGGIO;
- per ultimo cancella i dati superflui delle ultime due colonne di ciascun foglio (DecinaNrStudente e UnitàNrStudente)
La macro deve essere però prima adeguata per quanto riguarda /Percorso/NomeFile modificandolo nelle due seguenti righe:
Codice: Seleziona tutto   Espandi visualeStringi visuale
FileDaAprire = ConvertToURL("file:///home/NOMEUTENTE/Scaricati/risultati-1x.csv") '-Esempio Percorso "LINUX"
FileDaAprire = ConvertToURL("file:///home/NOMEUTENTE/Scaricati/risultati-2x.csv") '-Esempio Percorso "LINUX"

La macro è ben commentata al suo interno per facilitare l'utente.
Risulta inoltre di rapidissima esecuzione anche su computer datati.
In entrambi i fogli è stata inoltre fissata la prima riga per facilitare i primi controlli visivi di verifica scorrendo verticale le tabelle riga per riga.

Dati importati nel Foglio1
Foglio1.png

Dati importati nel Foglio2
Foglio2.png
Allegati
Test - MacroCaricaFile_csv1_NelFoglio1_e_csv2_NelFoglio2_PopolandoColonnaB_ConNrStudente_e_ColonnaC_ConPunteggioStudente.ods
(26.13 KiB) Scaricato 4 volte
Allegando al quesito un file di esempio si semplifica il lavoro di chi risponde.
Avatar utente
lucky63
Volontario
Volontario
 
Messaggi: 1728
Iscritto il: martedì 18 maggio 2010, 17:01

Re: Raccolta risultati di una verifica su più pagine

Messaggioda lucky63 » martedì 11 settembre 2018, 22:54

Allego altra versione che evidenzia con sfondo giallino le celle con risposta errata per facilitarne un immediato riscontro visivo.
La macro deve essere però prima adeguata per quanto riguarda /Percorso/NomeFile modificandolo come detto nel post precedente.
La macro è un po' più lenta nell'esecuzione ma credo che questa modifica possa essere molto utile.


Foglio1
Foglio1.png

Foglio2
Foglio2.png
Allegati
Test - MacroCaricaFile_csv1_NelFoglio1_e_csv2_NelFoglio2_PopolandoColonnaB_ConNrStudente_e_ColonnaC_ConPunteggioStudente - 02.ods
(28.89 KiB) Scaricato 2 volte
Allegando al quesito un file di esempio si semplifica il lavoro di chi risponde.
Avatar utente
lucky63
Volontario
Volontario
 
Messaggi: 1728
Iscritto il: martedì 18 maggio 2010, 17:01

Re: Raccolta risultati di una verifica su più pagine

Messaggioda DanteS » domenica 16 settembre 2018, 18:16

La macro scritta da lucky63 è perfetta, fa esattamente quello che chiedevo, e i commenti sono un ottimo invito a (provare) a capire il basic.
Ho completato aggiungendo un foglio di raccolta dei risultati con una macro ("somma2fogli") che per prima cosa ordina i dati secondo il numero degli allievi, poi copia le colonne B e C e le incolla nel Foglio 3 (colonne A e B per il foglio 1 e colonne D e E per il foglio 2) sommando le risposte giuste per allievo dei due fogli e riportando la somma in valori decimali. Questa macro è ottenuta tramite il registratore, quindi molto più verbosa e verosimilmente meno "economica" come codice.
risultatifinali.jpg
risultato finale

Approfitto ancora del vostro aiuto perché vorrei poter far accettare più di una risposta ad alcuni quesiti , una specie di tolleranza nel correttore. Il programma form scanner prevede nel suo editor tale eventualità e le lettere inserite dal correttore sono generate separate dal carattere "pipe" ("|"). Dovrebbero esistere delle funzioni che controllano la presenza di almeno una valore in una cella (ad esempio qui https://forum.openoffice.org/it/forum/v ... f=9&t=7728) ma non saprei comunque come modificare la macro. Allego il foglio aggiornato con la mia macro "Test _ carica files csv1_2 e finaleok.ods" con i fogli 1 e 2 popolati con due versioni identiche dei risultati, ma nel foglio 2 con le risposte multiple accettate dal correttore (vedi colonne J e W, in riga 1 separate dal "pipe").
multiplierrore.jpg
errori tolleranza multiple

Rispondo, scusandomi per il ritardo, infine, a Patel: sì, la tabella sottostante la metto dopo aver fatto l'importazione, e non saprei come inserire l'indirizzo dell'ultima cella nella formula
Allegati
Test _ carica files csv1_2 e finaleok.ods
test risultato finale
(19.17 KiB) Scaricato 2 volte
Ultima modifica di DanteS il lunedì 17 settembre 2018, 8:55, modificato 3 volte in totale.
OpenOffice 4.1.4 su Windows 10
DanteS
 
Messaggi: 14
Iscritto il: sabato 2 dicembre 2017, 18:57

Re: Raccolta risultati di una verifica su più pagine

Messaggioda DanteS » domenica 16 settembre 2018, 18:17

Allego anche i due file .csv ai quali la macro punta nella directory C:\arte che ho scelto per mia comodità.
Allegati
risultati_2.csv
risultati 2
(2 KiB) Scaricato 1 volta
risultati_1.csv
risultati 1
(2 KiB) Scaricato 1 volta
OpenOffice 4.1.4 su Windows 10
DanteS
 
Messaggi: 14
Iscritto il: sabato 2 dicembre 2017, 18:57

Re: Raccolta risultati di una verifica su più pagine

Messaggioda lucky63 » mercoledì 19 settembre 2018, 1:25

Nei Fogli 1 e 2 i dati vengono così importati ed elaborati:
Test - Carica files csv1_2 e finaleok - 01 - 01.png

- Colonna B Nr Studente
- Colonna C Risposte esatte (Riscontro esatte Lettera singola e Lettera Sinistra di quelle ove prevista la tolleranza "LetteraPipeLettera")
- Colonna D Riscontri Tolleranza alla sola lettera di destra ove prevista la tolleranza "LetteraPipeLettera"
- Punteggio Tolleranze e relativi riscontri evidenziati sfondo verde
- Risposte sbagliate evidenziate sfondo giallo
- La tabella dati viene riordinata per numero crescente di studente

RIEPILOGO così strutturato:
Test - Carica files csv1_2 e finaleok - 01 - 02.png

Come da riga in intestazione:
- Colonna A Numero studente
- Colonna B Esatte Foglio1
- Colonna C Tollerate Foglio1
- Colonna D Esatte Foglio2
- Colonna E Tollerate Foglio 2
- Colonna F = TOTALE come Somma di Esatte e Tollerate di entrambi i fogli
- Colonna G = Dati colonna F espressi in DECIMI
Cliccando sul pulsante rosso "START" si avvia la macro.
Ricordarsi di adeguare la macro nelle due righe di "Percorso" già indicate nella risposta iniziale .
Allegati
Test - Carica files csv1_2 e finaleok - 01.ods
(33.61 KiB) Scaricato 2 volte
Allegando al quesito un file di esempio si semplifica il lavoro di chi risponde.
Avatar utente
lucky63
Volontario
Volontario
 
Messaggi: 1728
Iscritto il: martedì 18 maggio 2010, 17:01

Re: [Risolto] Raccolta risultati di una verifica su più pagi

Messaggioda DanteS » giovedì 20 settembre 2018, 0:48

Ho messo la spunta [Risolto] troppo presto :knock: . Sollecitando la macro ho rilevato errori. Da provare questi due fogli di verifica, che allego, previsti senza tolleranze. Alcuni risultati superano il 10, il correttore, che comunque riporta il 10, presenta delle celle colorate che segnano errore. Due assenti (n.2 e 10), ma è da prevedere, ovviamente. Infine, siccome non tutti gli allievi riportano correttamente il loro numero progressivo, sarebbe bene avere le colonne con gli ordinali degli allievi non riunite ma separate per gli opportuni controlli, (qualcosa di simile a quanto ho proposto nell'impostazione del mio foglio 3 popolato con macro registrata - vedi allegato al mio precedente messaggio). Succede infatti che qualcuno (ma possono anche essere sbavature di scansione) riporti un numero sul fronte e un altro sul retro .

Ho fatto girare i due nuovi csv di test sulla macro precedente (quella che non prevedeva tolleranze) e il risultato non è ugualmente quello atteso. Credo che prima di tutto sia necessario ordinare il numero progressivo, e mettere la matrice di controllo (progressivo 00) in riga 1, poi passare alle funzioni di controllo (di fatto i primi due csv che ho passato erano già ordinati)

Colpa mia: non avrei dovuto Inviare due file csv già ordinati. In effetti la sequenza procedurale: scansione, conversione da PDF a file immagini e lettura delle immagini da parte del software, non genera file CSV nativi ordinati. Il record 00 viene regolarmente associato al correttore, ma non viene generato in testa agli altri, anche se il foglio corrispondente è passato per primo allo scanner.

clip grafico correttoreok.jpg
clip grafico pagina correttore
Allegati
risultati_2.csv
foglio 2
(2.7 KiB) Mai scaricato
risultati_1.csv
foglio 1
(3.18 KiB) Mai scaricato
OpenOffice 4.1.4 su Windows 10
DanteS
 
Messaggi: 14
Iscritto il: sabato 2 dicembre 2017, 18:57


Torna a Calc

Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti