Condividi:        

Aiuto per modifica script su Google Sheets

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Anthony47, Triumph Of Steel, archimede

Aiuto per modifica script su Google Sheets

Postdi valle1975 » 10/04/25 08:07

Buongiorno a tutti, da assiduo frequentatore del forum nella sua sezione Office , mi trovo ad avere a che fare con un programma preesistente su Google Sheets, che tramite collegamento con Applicazione Android "ScantoSheets" , scansiona delle letture di barcode e le scrive su questo foglio, nel Foglio1.
La necessità è di sistemare alcune "anomalie" delle funzioni in esso previste tramite tasti che eseguono questi script, che di seguito descrivo:

1) Funzione "aggiornabiro"
La funzione prende la situazione registrata dalle scansioni barcode Android dal "Foglio1" e le sposta nel foglio "StoricoMovimentazioni".
Il problema da risolvere è che come è fatto mi copia sempre tutte le situazioni attuali, andandomi a creare nello storicoMovimentazioni anche numerosi doppioni nel caso certi articoli NON SIANO stati movimentati.
LA mia necessità sarebbe correggere lo script in modo che copi la situazione attuale dell'articolo SOLO se la sua ubicazione è stata MODIFICATA, in modo da avere nello storico tutti gli spostamenti EFFETTIVI per articolo.
Questo è il codice attuale:
Codice: Seleziona tutto
function aggiornaBiro() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("Foglio1");
  const storicoSheet = ss.getSheetByName("StoricoMovimenti");

  if (!sheet || !storicoSheet) {
    SpreadsheetApp.getUi().alert("Assicurati che i fogli 'Foglio1' e 'StoricoMovimenti' esistano.");
    return;
  }

  const data = sheet.getRange(2, 1, sheet.getLastRow() - 1, 3).getValues();
  const biroMap = new Map();

  const cassettiDescrizione = {
    "C01": "Carminati",
    "C02": "Timbro",
    "C03": "DRO",
    "C04": "NT",
    "C05": "EVOL"
  };

  data.forEach((row, index) => {
    const codiceBiro = row[0];
    let codiceCassetto = row[1];

    if (codiceBiro && codiceCassetto) {
      if (cassettiDescrizione[codiceCassetto]) {
        codiceCassetto = cassettiDescrizione[codiceCassetto];
      }
      biroMap.set(codiceBiro, { index: index + 2, cassetto: codiceCassetto });
    }
  });

  sheet.getRange(2, 1, sheet.getLastRow() - 1, 3).clearContent();

  let riga = 2;
  biroMap.forEach((value, codiceBiro) => {
    const timestamp = new Date();
    sheet.getRange(riga, 1).setValue(codiceBiro);
    sheet.getRange(riga, 2).setValue(value.cassetto);
    sheet.getRange(riga, 3).setValue(timestamp);

    // Aggiunge il movimento allo storico
    storicoSheet.appendRow([timestamp, codiceBiro, value.cassetto]);

    riga++;
  });
}



2) Funzione "EvidenziaBiroInattive"
Questa funzione che agisce sul foglio "storicomovimentazioni" va ad evidenziare gli articoli che non sono stati movimentati negli ultimi XX giorni (il numero viene richiesto in fase di esecuzione dello script).
Il problema è che lo script funziona se pulisco i record nel foglio "Storicomovimentazioni" e aggiorno i dati per la prima volta, ma poi dai successivi aggiornamenti e relativi caricamenti nello storico, lo sript non funziona piu' (non evidenzia piu' le righe con date piu' vecchie).
Questo è il codice:
Codice: Seleziona tutto

function evidenziaBiroInattive() {
  const ui = SpreadsheetApp.getUi();
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const storicoSheet = ss.getSheetByName("StoricoMovimenti");

  if (!storicoSheet) {
    ui.alert("Il foglio 'StoricoMovimenti' non esiste.");
    return;
  }

  const risposta = ui.prompt("Inserisci il numero di giorni per cercare biro ferme (es. 30)");
  const sogliaGiorni = parseInt(risposta.getResponseText());

  if (isNaN(sogliaGiorni)) {
    ui.alert("Valore non valido.");
    return;
  }

  const data = storicoSheet.getRange(2, 1, storicoSheet.getLastRow() - 1, 3).getValues();
  const ultimaDataBiro = new Map();

  data.forEach(row => {
    const dataMovimento = new Date(row[0]);
    const codiceBiro = row[1];
    if (codiceBiro && (!ultimaDataBiro.has(codiceBiro) || dataMovimento > ultimaDataBiro.get(codiceBiro))) {
      ultimaDataBiro.set(codiceBiro, dataMovimento);
    }
  });

  storicoSheet.getRange(2, 1, storicoSheet.getLastRow() - 1, 3).setBackground(null);

  const oggi = new Date();

  data.forEach((row, index) => {
    const codiceBiro = row[1];
    const ultimaData = ultimaDataBiro.get(codiceBiro);
    const giorniInattivi = Math.floor((oggi - ultimaData) / (1000 * 60 * 60 * 24));
    if (giorniInattivi >= sogliaGiorni) {
      storicoSheet.getRange(index + 2, 1, 1, 3).setBackground("yellow");
    }
  });

  ui.alert("Biro inattive da più di " + sogliaGiorni + " giorni evidenziate.");
}



Grazie infinite a tutti.
Valerio
---------------------------------
Windows 10 Professional + MS Office 2016 STD Ita
valle1975
Utente Senior
 
Post: 219
Iscritto il: 27/09/10 16:33

Sponsor
 

Re: Aiuto per modifica script su Google Sheets

Postdi Dylan666 » 10/04/25 08:18

Premesso che magari la domanda nasce dalla mia inesperienza in materia, ma come fai a lanciare queste funzioni?
A mano o hai qualche "trigger" che le innesca, tipo onOpen?
https://developers.google.com/apps-scri ... gers?hl=it
Avatar utente
Dylan666
Moderatore
 
Post: 40192
Iscritto il: 18/11/03 16:46

Re: Aiuto per modifica script su Google Sheets

Postdi valle1975 » 10/04/25 10:38

Ciao e grazie prima di tutto.
Si attivano con gli appositi tasti, con comando onOpen, vedi qui sotto.

Codice: Seleziona tutto
function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu(" Gestione Biro")
    .addItem("Evidenzia biro inattive", "evidenziaBiroInattive")
    .addItem(" Rimuovi evidenziazione", "rimuoviEvidenziazioneBiro")
    .addItem(" Aggiorna dati", "aggiornaBiro")
    .addToUi();
}
Valerio
---------------------------------
Windows 10 Professional + MS Office 2016 STD Ita
valle1975
Utente Senior
 
Post: 219
Iscritto il: 27/09/10 16:33


Torna a Programmazione


Topic correlati a "Aiuto per modifica script su Google Sheets":


Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti