Προς το περιεχόμενο

βοήθεια δημιουργία script στο google sheets


nikos_greece
Μετάβαση στην απάντηση Απαντήθηκε από Billator,

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

καλησπερα σας , εχω φτιαξει ενα πινακα για αποθήκη σε καταστημα με το barcode ( στήλη Α)  , το ονομα του προιοντος( στήλη Β ) ποσα πουλαει ( στήλη D)και ποσα αγοραζει ( στήλη E) και καθε φορα που σκαναρει ενα προιον αφαιρείτε απο την στειλει D και οταν αγοραζει  και προσθετονται στην στήλη Ε.. αυτο που θελω να κάνω ειναι καθε φορα που γινεται μια αλλαγη στο νουμερο των πουλημένων (( στήλη D) να μου γραφει την ημερομινία στην ιδια σειρα  στην στήλη Μ ..και καθε φορα που αλλαζει ο αριθμος σε ενα προιον οταν γινεται αγορα στην στήλη Ε να μου γραφει την ημερομινια στην ιδια σειρα στην στηλη L . απλα επειδή το google sheet εχει πολλες καρτέλες να ισχύει μονο για την καρτελα με το ονομα apothiki 
Δεν εχω ιδεα απο κωδικα και πως να το κανω και θα εκτιμούσα αν μπορουσε καποιος να με βοηθήσει .. αν χρειαζονται και αλλες πληροφορίες για αριθμο κελιών μου λετε να σας πω 
ευχαριστω παρα πολυ προκαταβολικά

Επεξ/σία από nikos_greece
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Καλησπέρα,

Για να πάρεις μία ιδέα μπορείς να ψάξεις "Timestamp on Google sheet using Google script"

Υπάρχουν πολλά workarounds που μπορείς να χρησιμοποιήσεις.

Για παράδειγμα,
onEdit ή OnChange trigger, μπορεί ανάλογα το structure του κώδικα να δουλέψεις και με τα 2. Στην ουσία θα γίνεται Locate το cell στο οποίο αλλάζουν τα δεδομένα, και σε εκείνη την σειρά στην στήλη που θες θα θέσεις το timestamp πχ:

var timeVar = new Date();

Το οποίο μετά μπορείς να φορμοποιήσεις όπως θες πχ:

timestamp = Utilities.formatDate(timeVar, 'GMT', 'dd-MM-yyyy || HH:mm:ss');


Ένα sample code είναι αυτό:
 

function onEdit(e) {
  
  var sheet = e.source.getActiveSheet();
  // Αν η ενέργεια δεν γίνει στο sheet tab που θέλουμε τερματίζουμε το script
  if (sheet.getName() !== 'apothiki') return;

  var range = e.range;
  var row = range.getRow();
  var col = range.getColumn();

  // Παίρνουμε την τρέχουσα ημερομηνία
  var date = new Date();
  
  // Προχωράμε σε μορφοποίηση της ημερομηνίας και ώρας σε Ελληνική μορφή
  var formattedDate = Utilities.formatDate(date, Session.getScriptTimeZone(), "dd/MM/yyyy HH:mm:ss");

  // Ελέγχουμε αν η edited στήλη είναι η D (4) ή η E (5)
  if (col === 4) {
    // Αν η στήλη D (πωλήσεις) επεξεργαστεί, ενημερώνουμε τη στήλη M (13)
    sheet.getRange(row, 12).setValue(formattedDate);
  } else if (col === 5) {
    // Αν η στήλη E (αγορές) επεξεργαστεί, ενημερώνουμε τη στήλη L (12)
    sheet.getRange(row, 13).setValue(formattedDate);
  }
}

Για να σου λειτουργήσει πρέπει πρώτα να δημιουργήσεις ένα trigger όπου διαλέγεις:

  • Choose which function to run --> onEdit
  • Select event source --> From spreadsheet
  • Select event type--> On edit

Το παραπάνω δουλεύει ακριβώς όπως το χρειάζεσαι αλλά μπορείς να το προσαρμώσεις περαιτέρω. 

Αν έχεις κάποια απορία μπορείς να γράψεις εδώ, θα μπορέσω να το δω το απόγευμα αύριο λογικά εκτός και αν σου απαντήσει κάποιος άλλος πρώτα. 

Επεξ/σία από Billator
  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

καλησπερα φιλε, τα εκανα οπως τα λες ακριβως σου βαζω και φωτο να τσεκαρεις..απλα αν εχω κανει σωστα το  κωδικα δε ξερω ή μαλλον δε κανω κατι καλά για να το προσαρμόσω στο sheet που θελω γιατι ενω αλλαζω τα νουμερα η ημερομινια δε εμφανιζετε 

 

 

Στιγμιότυπο 2024-05-15, 1.03.49 μμ.png

Στιγμιότυπο 2024-05-15, 1.04.45 μμ.png

Επεξ/σία από nikos_greece
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

@nikos_greece Όταν κάνεις save το trigger, πρέπει να "πετάξει" ένα pop out window όπου από εκεί πρέπει να δώσεις permissions αλλιώς δεν λειτουργεί. (όπως και κανένα Google script αν δεν δώσουμε permissions).

Αν δες σου βγάζει το παράθυρο αυτό το κάνει block ο browser, είτε από αριστερά είτε από δεξιά του URL στον browser θα δεις την επιλογή για να το ανοίξεις. Επίσης το "apothiki" πρέπει να το αλλάξεις με βάση το πως έχεις ονομάσει εσύ το tab το οποίο έχεις τις τιμές αυτές, αλλιώς πάλι δεν θα λειτουργεί. 

Επεξ/σία από Billator
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

 

1 ώρα πριν, Billator είπε

@nikos_greece Όταν κάνεις save το trigger, πρέπει να "πετάξει" ένα pop out window όπου από εκεί πρέπει να δώσεις permissions αλλιώς δεν λειτουργεί. (όπως και κανένα Google script αν δεν δώσουμε permissions).

Αν δες σου βγάζει το παράθυρο αυτό το κάνει block ο browser, είτε από αριστερά είτε από δεξιά του URL στον browser θα δεις την επιλογή για να το ανοίξεις. Επίσης το "apothiki" πρέπει να το αλλάξεις με βάση το πως έχεις ονομάσει εσύ το tab το οποίο έχεις τις τιμές αυτές, αλλιώς πάλι δεν θα λειτουργεί. 

εχω δωσει κανονικά αδεια για το trigger εχει αποθηκευτεί κανονικά ..οταν παω να κανω εκτελεση της εντολής απο το μενου πανω που σου εχω και στη φωτο βγαινει αυτο το μηνυμα...τι θελει να πει ο ποιητης ??:P

2024-05-153_52_11.png.d0759746daaff3e106be19468d1d5e05.png

 

 

Στιγμιότυπο 2024-05-15, 3.46.38 μμ.png

Επεξ/σία από nikos_greece
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
12 λεπτά πριν, nikos_greece είπε

 

εχω δωσει κανονικά αδεια για το trigger εχει αποθηκευτεί κανονικά ..οταν παω να κανω εκτελεση της εντολής απο το μενου πανω που σου εχω και στη φωτο βγαινει αυτο το μηνυμα...τι θελει να πει ο ποιητης ??:P

2024-05-153_52_11.png.d0759746daaff3e106be19468d1d5e05.png

 

 

Στιγμιότυπο 2024-05-15, 3.46.38 μμ.png

Δεν είναι macro, δουλεύει onEdit. Δεν μπορείς να το κάνεις triggered manual το function αυτό. 

Με το που αλλάξεις κάτι στις σωστές στηλες στο σωστό tab αυτόματα θα μπει η ημερομηνία στην αντίστοιχη γραμμή. Δουλεύει live / αυτόματα κάθε φορά που αλλάζουν οι τιμές. 

Αφορά όμως user change τιμές το παραπάνω script. Αν η αλλαγές του στοκ γίνονται από script από 3η εφαρμογή δεν μπορεί να τις πιάσει. Εκεί θες άλλο workaround. 

Επεξ/σία από Billator
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

τα προιοντα σκανάρονται σε άλλο αρχείο google sheet σε μια καρτέλα , σε μια άλλη καρτέλα  στο ίδιο αρχείο βλέπει πόσες φορές εχει περαστεί  ο κάθε κωδικός (π.χ κωδικός 1234 φορές 5 ) και από εκεί με VLookUp το 5 βγαίνει  στο τελικό πινακα σε άλλο αρχείο  google sheet παλι στην στήλη των πωλήσεων ή αγορών ανάλογα
αν δεν έχει θέμα για αυτό το λόγο και έχουμε βάλει σωστά τους αριθμούς για τις στείλες και τα κουτια τότε δε ξέρω τι μπορεί να είναι .. το κωδικα τον έχω γράψει κανονικά στο screept της google και είναι όπως στο έχω στη φωτό παραπάνω 

παρακατω στις φωτό σου έχω για να δεις ακριβώς τα νούμερα από στείλες και κουτιά μήπως είναι αυτά λάθος
τα κουτιά που θέλουμε να κοιτάει αν αλλάζουν είναι τα παραλαβές και πουλίθηκαν τα πορτοκαλι στην κάτω εικόνα..
τα πάνω είναι απλό σερτσ στο πινακα για ευκολία
και οι ημερομινιες να βγαίνουν ένα κουτί κάτω από εκεί που λέει ημερομινια τελευταίας  πώλησης και αγορασ στην πρωτη εικόνα 
 

Στιγμιότυπο 2024-05-15, 4.36.06 μμ.png

Στιγμιότυπο 2024-05-15, 4.36.28 μμ.png

Επεξ/σία από nikos_greece
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@Billator από όσο το ψάχνω από εχθές μάλλον είναι αυτό που λες...επειδή μεσολαβεί VlookUp για την αλλαγη του αριθμού θέλει άλλο script ...έχεις ιδέα μήπως πωσ γράφετε και πως θα το κάνω ??

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Λύση

@nikos_greece H Vlookup δεν είναι edit action οπότε και δεν γίνεται tracked από την onEdit.
1. Παρακολουθείς με το script την καρτέλα στην οποία σκανάρονται (αυτή είχε νόημα να παρακολουθείς εξ αρχής με την onEdit συνάρτηση) και τσιμπάς από το αντίστοιχο column το barcode.
2. Έχοντας το barcode από το row που προστέθηκε, κάνεις search το barcode στο sheet που θες να προσθέσεις τα timestamp για να βρεις το σωστό row και να προσθέσεις το timestamp.

Άλλη λύση είναι να κρατάς ένα tempDatabase στο οποίο θα αποθηκεύσεις την προηγούμενη κατάσταση του στοκ, και όταν υπάρχει διαφορά stock μόνο τότε να βάζει timestamp στα αντίστοιχα rows. Μπορείς να το κάνεις trigger με onEdit για να γίνεται αυτόματα με το που σκανάρεται μία τιμή, ή το συγκεκριμένο μπορεί να γίνεται call και από εσένα manual ή με κάποιο time trigger. Δεν θα πρέπει να ξεχάσεις ότι ΑΝ θα έχεις διαφορά στο στοκ, μετά την ολοκλήρωση των timestamps πρέπει να μπαίνει ένα νέο copy από την νέα κατάσταση στο tempDatabase. 

Δυστυχώς δεν έχω το χρόνο να το φτιάξω και να το δοκιμάσω λόγω δουλειάς. Υπάρχουν πολλά workflow που μπορεί να είναι καλύτερα από αυτό που σου γράφω, απλά σου λέω τι θα έκανα για εμένα ή για κάποιο πελάτη μου μιας και ο καθένας σκέφτεται με διαφορετικό τρόπο. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

2 ώρες πριν, Billator είπε

@nikos_greece H Vlookup δεν είναι edit action οπότε και δεν γίνεται tracked από την onEdit.
1. Παρακολουθείς με το script την καρτέλα στην οποία σκανάρονται (αυτή είχε νόημα να παρακολουθείς εξ αρχής με την onEdit συνάρτηση) και τσιμπάς από το αντίστοιχο column το barcode.
2. Έχοντας το barcode από το row που προστέθηκε, κάνεις search το barcode στο sheet που θες να προσθέσεις τα timestamp για να βρεις το σωστό row και να προσθέσεις το timestamp.

Άλλη λύση είναι να κρατάς ένα tempDatabase στο οποίο θα αποθηκεύσεις την προηγούμενη κατάσταση του στοκ, και όταν υπάρχει διαφορά stock μόνο τότε να βάζει timestamp στα αντίστοιχα rows. Μπορείς να το κάνεις trigger με onEdit για να γίνεται αυτόματα με το που σκανάρεται μία τιμή, ή το συγκεκριμένο μπορεί να γίνεται call και από εσένα manual ή με κάποιο time trigger. Δεν θα πρέπει να ξεχάσεις ότι ΑΝ θα έχεις διαφορά στο στοκ, μετά την ολοκλήρωση των timestamps πρέπει να μπαίνει ένα νέο copy από την νέα κατάσταση στο tempDatabase. 

Δυστυχώς δεν έχω το χρόνο να το φτιάξω και να το δοκιμάσω λόγω δουλειάς. Υπάρχουν πολλά workflow που μπορεί να είναι καλύτερα από αυτό που σου γράφω, απλά σου λέω τι θα έκανα για εμένα ή για κάποιο πελάτη μου μιας και ο καθένας σκέφτεται με διαφορετικό τρόπο. 

ok θα το δω..μηπως βρω κάποιο έτοιμο παράδειγμα γιατί δεν έχω ιδέα να γραφω κωδικα και να τα κάνω όλα αυτά που λες ή να δοκιμάσω να βάλω αυτό το script πριν to Vlookup που να λειτουργει
ευχαριστώ πολύ πάντως για τη βοήθεια  

27 λεπτά πριν, nikos_greece είπε

ok θα το δω..μηπως βρω κάποιο έτοιμο παράδειγμα γιατί δεν έχω ιδέα να γραφω κωδικα και να τα κάνω όλα αυτά που λες ή να δοκιμάσω να βάλω αυτό το script πριν to Vlookup που να λειτουργει
ευχαριστώ πολύ πάντως για τη βοήθεια  

function onEdit(e) {
    if (sheet.getName() !== 'eisagogi') return;
 
     var range = e.range;
  var row = range.getRow();
  var col = range.getColumn();
 
    var date = new Date();
  var formattedDate = Utilities.formatDate(date, Session.getScriptTimeZone(), "dd/MM/yyyy HH:mm:ss");
if (col === 2) {
    sheet.getRange(row, 3).setValue(formattedDate);
  }
  }

αν θελω αν αλλαξει το κουτι στη στήλη 2 να γραψει την ημερομινια στη στηλη 3 ειναι σωστο αυτο ? χωρις να μεσολαβει καποιο κωδικας η οτιδίπωτε εγω θα το αλλαξω 
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...