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”
Allego anche i due .csv che riportano i risultati della scansione di due pagine (
); 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