Dare un Numero ID identificativo delle righe di un foglio in Calc

Creare una macro - Scrivere uno script - Usare le API
Rispondi
nickGiard
Messaggi: 71
Iscritto il: lunedì 14 maggio 2012, 22:04

Dare un Numero ID identificativo delle righe di un foglio in Calc

Messaggio da nickGiard »

Buon giorno cari colleghi
vorrei porre come argomento di discussione e di stimolo una problematica che sembra banale: come assegnare via macro in una colonna di un foglio di lavoro una serie di numeri interi univoci che rappresentino le righe stesse con dati, ossia assegnare degli ID non modificabili dall'utente.
Bene, un semplice ciclo può inizialmente popolare tale colonna delle righe con dati.
E se l'Utente fa un copia incolla di alcune righe, copierebbe anche il relativo ID che non sarebbe più unico. Come correggerlo?
E se l'Utente eliminasse alcune righe, con che criterio assegno gli ID ad eventuali nuove righe utilizzate?
Ovviamente La macro partirà con un evento sulle righe interessate, tipo Doppio Click o equivalenti.

Grazie in anticipo per i suggerimenti.
Nicola
Nicola con LibreOffice 7.1 (x64) su Windows 11
patel
Volontario attivo
Volontario attivo
Messaggi: 4027
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Dare un Numero ID identificativo delle righe di un foglio in Calc

Messaggio da patel »

Ma a cosa può servire ? è solo un esercizio o può essere utile ?
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
nickGiard
Messaggi: 71
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: Dare un Numero ID identificativo delle righe di un foglio in Calc

Messaggio da nickGiard »

salve Patel. grazie intanto per l'intervento.
supponi di avere dei dati registrati in varie righe. Ad esempio delle Voci di Lavori complete di Articolo, Quantità Prezzo ed Importi (casualmente è il mio software di Computo Metrico).
Ora questa Voce necessita di essere elaborata in un secondo foglio accessorio, ad esempio per analizzare su più righe le componenti che determinano il Prezzo.
Una macro attivata da un doppio click copia incolla la Voce nel secondo foglio, con la quale faccio le mie analisi ed ottengo un risultato del Prezzo.
Ora con un doppio click tale prezzo deve tornare sulla Voce originaria per essere scritto.
Come individuare tale Voce Originaria ? La risposta più ovvia sarebbe cercare l'Articolo, ma se l'Articolo non è univoco ? Se la Voce originaria è stata nel frattempo duplicata? o e' stata rimossa ? Ecco l'idea dell' ID , ma questo avrebbe le stesse sorti dell'Articolo, a meno di soddisfare le condizioni indicate nel post.
Nicola
Nicola con LibreOffice 7.1 (x64) su Windows 11
Gaetanopr
Volontario
Volontario
Messaggi: 3304
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Dare un Numero ID identificativo delle righe di un foglio in Calc

Messaggio da Gaetanopr »

Ciao, risulta difficile la logica di quello che chiedi non avendo un esempio pratico a disposizione.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
nickGiard
Messaggi: 71
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: Dare un Numero ID identificativo delle righe di un foglio in Calc

Messaggio da nickGiard »

Ciao Gaetanopr, hai ragione a chiedere un esempio pratico, in effetti nel post parlavo di problematica piuttosto che di una specifica correzione di una macro. Provo pertanto a spiegarmi meglio.
Nei fogli elettronici quando voglio usare un dato presente in un altro foglio, nella barra della formula inizio con = e poi mi sposto nell'altro foglio selezionando la cella con il dato da riportare, così da creare il classico collegamento tra celle. Cambiando il valore nel secondo foglio, automaticamente me lo ritrovo nel primo, e forse per questo i fogli elettronici si chiamano anche spreadsheet. Questo meraviglioso meccanismo avviene istantaneamente e ovviamente a cascata per tutte le celle collegate, dando sensazione di dinamicità, ma creando una struttura instabile nel caso si immetta un dato errato, questo si trasmette a cascata su tutto l'ambiente, per cui devo evitare questa tecnica e ricorrere ad in copia incolla da macro.
Pochè io tratto di contabilità di cantieri edili, questa si basa su Voci di lavorazioni presenti in un primo foglio che rappresenta il contratto, e su più fogli successivi che rappresentano le quantità eseguite delle varie Voci alla scadenza di determinati periodi.
Ad esempio per una previsione di Voce di Scavo di 1.000 mc al prezzo unitario di 8 € e quindi per Importo previsto di 8.000€ scritta in una riga, contabilizzo su più righe in un secondo foglio 400 mc per il primo avanzamento, ed in un terzo foglio altri 500 mc per il secondo avanzamento. Per tenere traccia sintetica di questi parziali, li devo RIPORTARE in linea della prima Voce di previsione, così' da vedere in celle a seguire i vari mc 1.000, 400 e 500 per sapere le disponibilità residue.
Quindi per me il nocciolo della questione è trovare un meccanismo logico (di cui poi sviluppo la macro) che consenta partendo dalla Voce nel secondo o terzo foglio di individuare la Voce corrispondente nel primo foglio e quindi poter scrivere le quantità calcolate.
Spero di non essere stato troppo prolisso.
Grazie.
P.S. Questa problematica viene affrontata dai vari prodotti commerciali di computo metrico in ambiente Data Base, dove la Voce è un record dotata automaticamente di ID, ma io mi sono intestardito a volerla affrontare su foglio elettronico.
Nicola con LibreOffice 7.1 (x64) su Windows 11
patel
Volontario attivo
Volontario attivo
Messaggi: 4027
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Dare un Numero ID identificativo delle righe di un foglio in Calc

Messaggio da patel »

Pe gente non del mestiere è difficile comprendere bene quanto hai esposto, un file di esempio commentato forse aiuterebbe.
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
Messaggi: 4027
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Dare un Numero ID identificativo delle righe di un foglio in Calc

Messaggio da patel »

La Voce di Scavo di 1.000 mc avrà un numero di commessa/ordine, non basta che le voci negli altri vfogli abbiano lo stesso numero di commessa/ordine?
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
nickGiard
Messaggi: 71
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: Dare un Numero ID identificativo delle righe di un foglio in Calc

Messaggio da nickGiard »

Grazie patel, la gestione di un preventivo di lavori e della conseguente contabilità di cantiere è alquanto articolata.
In termini astratti in ambiente Data Base, una Voce di preventivo è assimilabile ad una Tabella GENERALE con ogni record con un suo ID identificativo fisso, alla quale si relazionano all'occorrenza altre tabelle accessorie con ulteriori dati e che contengono un campo ID identico al primo e che consente di individuare a quale Voce/Record originaria assegnare i nuovi dati a completamento della stessa.
Si tratta ora di individuare una logica analoga trasferita ai fogli elettronici, gestita ovviamente da macro, nella quale la problematica principale è la salvaguardia da modifiche o manomissioni del numero ID delle righe del foglio PRINCIPALE e al quale i record dei fogli accessori possono riferirsi.
Allego un file di esempio con due Fogli, uno PRINCIPALE che contiene le Voci con alcuni dati quali QUANTITA DI PREVENTIVO ed ID, e il foglio accessorio ESEGUITE con le Voci effettivamente eseguite nel cantiere con il relativo ID e con le relative computazioni, che poi vengono riportate a fianco delle Voci Principali nella colonna QUANTITA ESEGUITE.
Via macro riesco a copiare i valori calcolati dal secondo foglio al primo individuando i corrispondenti ID, ma se l'utente nel PRINCIPALE mi cancella l'ID , o lo duplica copiando le Voci, il meccanismo non funziona più. Quindi si ritorna sempre allo stesso problema, come assegnare e rendere l'ID nel foglio PRINCIPALE FISSO ED UNIVOCO, gestito eventualmente da macro.
Qualche idea ?
Nick
Allegati
ESEMPIO_TABELLE_RELAZIONATE.ods
Voci in due Tabelle che devono relazionarsi.
(13.2 KiB) Scaricato 4 volte
Nicola con LibreOffice 7.1 (x64) su Windows 11
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8856
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Dare un Numero ID identificativo delle righe di un foglio in Calc

Messaggio da charlie »

Capisco il motivo di una ricerca multipla quando non si ottengono risposte soddisfacenti, ma il crosspopsting andrebbe comunque segnalato https://forum.openoffice.org/en/forum/v ... p?t=111611
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
nickGiard
Messaggi: 71
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: Dare un Numero ID identificativo delle righe di un foglio in Calc

Messaggio da nickGiard »

grazie charlie per il tuo intervento, anche se non conosco il significato della parola crosspopsting.
Il mio intento in questo caso non è ottenere o validare linee di codice non funzionanti, ma stimolare una discussione con la fantasia e le proprie abilità degli utenti esperti per cimentarsi ad una soluzione teorica ma fattibile di una problematica che ritengo non banale.
Se argomenti di questo tipo non sono previsti in questo forum, che tra l'altro nel passato mi è stato molto prezioso nello sviluppo delle mie app, ne prendo atto e sospendo ulteriori interventi.
Nick
Nicola con LibreOffice 7.1 (x64) su Windows 11
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8856
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Dare un Numero ID identificativo delle righe di un foglio in Calc

Messaggio da charlie »

Ciao, nessun problema per gli argomenti, spero tu possa trovare interlucotori validi.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Gaetanopr
Volontario
Volontario
Messaggi: 3304
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Dare un Numero ID identificativo delle righe di un foglio in Calc

Messaggio da Gaetanopr »

Ciao, la migliore soluzione è quella da te proposta, cioè l'uso di un database, se proprio vuoi utilizzare un foglio di calcolo, puoi sfruttare il sistema degli id da te descritto, ti allego il file con una macro che incrementa l'id nella colonna C e un contatore in A1 questo serve ad avere una chiave incrementale a prescindere da quanto indicato nella C(Vedi possibili eliminazioni) se ad esempio inserisci un articolo con id 5 e poi lo cancelli il prossimo id sarebbe nuovamente 5 invece come nei database grazie al contatore sarà 6.
Basta inserire un CODE nella colonna B che la macro si aziona e compila l'id.
Naturalmente la colonna C deve essere protetta in modo da non manomettere i dati e in modo da evitare i copia incolla duplicando l'id.
Nell'esempio ho protetto solo alcune righe della colonna C e la cella A1.
Allegati
ESEMPIO_TABELLE_RELAZIONATE.ods
(16.85 KiB) Scaricato 5 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
nickGiard
Messaggi: 71
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: Dare un Numero ID identificativo delle righe di un foglio in Calc

Messaggio da nickGiard »

Grazie Gaetanopr per la tua soluzione che mi sembra anche di buona didattica, la cui macro ID viene attivata dall'evento 'Contenuto modificato' del foglio PRINCIPALE, allo scrivere qualcosa in qualunque cella che poi viene controllato dalla macro e passato solo se riguarda la col. B (e non oltrepassare la riga successiva all'ultima, non essenziale).
L'idea di un contatore 'protetto' e di una colonna ID 'protetta' (potrebbe essere nascosta) e disponibile alla scrittura una sola volta solo a valore iniziale vuoto, impedisce la manomissione diretta di questi valori una volta determinati. Il foglio ha inoltre il blocco di inserire e rimuovere righe sempre a salvaguardia dell'univocità e persistenza dell'ID.
Questa soluzione appare idonea e leggera nell'ipotesi di inserimento dati piuttosto ordinato, e supera il problema dell'eliminazione di righe.
Nella mia app avevo implementato qualcosa di simile, la gestione dell'ID era affidata all'evento Doppio Click che l'Utente deve comunque attivare sulla singola Voce per fare varie elaborazioni, ad es. calcolare il prodotto via macro della Quantità per il Prezzo ed ottenere l'Importo, ed in quella fase veniva determinato e scritto l'ID.
Il problema è nato che il mio Utente nel fare un Preventivo deve essere libero di duplicare una Voce in più punti, può fare il copia incolla di una o più righe Voci, e quindi a questo punto ricopia anche il benedetto ID !!! . E' pur vero che c'e' la mia raccomandazione di non ricopiare righe ma solo la parte della Voce escludendo l' ID (tra l'altro nascosto e fuori zona ma comunque in riga), ma prima o poi viene ricopiata anche la riga intera, per cui occorre intervenire manualmente a sistemare :( :( .
Ne consegue che suppongo l' ID sebbene scritto nella sua colonna, debba essere determinato in un altro ambiente non accessibile all'Utente ... :idea: :idea:
Nick
Nicola con LibreOffice 7.1 (x64) su Windows 11
Rispondi