Toon posts:

Google sheets - script uitbreiden van 1 variabele naar 3

Pagina: 1
Acties:

Vraag


Acties:
  • 0Henk 'm!

  • Marco_Dark
  • Registratie: Januari 2019
  • Laatst online: 28-03 17:32
Mijn vraag
Ik will van 1 variabele naar 3 variabele gaan.in het volgende script.
Alleen de laatste geeft de volledige waarde van alle waarde in mijn kolom maar de andere krijgen alleen de eerste waarde gevonden in die kolom.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function onOpen() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var performanceSheet = spreadsheet.getSheetByName('Performance');
  var rngRET = performanceSheet.getRange(3,15,performanceSheet.getLastRow());
  var rngRETDIV = performanceSheet.getRange(3,13,performanceSheet.getLastRow());
  var rngDIV = performanceSheet.getRange(3,4,performanceSheet.getLastRow());
  var valuesRET = rngRET.getValues()
  var valuesRETDIV = rngRETDIV.getValues()
  var valuesDIV = rngDIV.getValues()
  var totalRET = 0
  var totalRETDIV = 0
  var totalDIV = 0
  for (var i = 0; i < valuesRET.length; i++) {
    if (parseFloat(valuesRET[i]) > -1000000) {
      totalRET = totalRET + parseFloat(valuesRET[i]);
    }
  for (var i = 0; i < valuesRETDIV.length; i++) {
    if (parseFloat(valuesRETDIV[i]) > -1000000) {
      totalRETDIV = totalRETDIV + parseFloat(valuesRETDIV[i]);
    }
  for (var i = 0; i < valuesDIV.length; i++) {
    if (parseFloat(valuesDIV[i]) > -1000000) {
      totalDIV = totalDIV + parseFloat(valuesDIV[i]);
    }

  }
  
  var localDateTime = new Date()
  var portfolioSheet = spreadsheet.getSheetByName('PortfolioTrend');
  portfolioSheet.appendRow([localDateTime, totalRET, totalDIV, totalRETDIV]);



Relevante software en hardware die ik gebruik
google sheets

Wat ik al gevonden of geprobeerd heb
Ik heb geprobeerd de i in indere var te veranderen naar i j en k maar dan gaat het script in een loop met allemaal vage waarde.

Ik ben hier niet goed in dus ik hoop dat het iets makkelijks is waar iemand zo een antwoord op kan geven.

Alle reacties


Acties:
  • 0Henk 'm!

  • webfreakz.nl
  • Registratie: November 2003
  • Laatst online: 28-08-2022

webfreakz.nl

el-nul-zet-é-er

Ik snap geen kaas van je verhaal en van je script ook niet, maar het lijkt erop dat we niet genoeg open en sluit brackets { en } hebben? De sluit-bracket van regel 1 komt die na regel 31? En waar sluiten regels 13, 17, 21?

"You smell that, son? What sir? Napalm, I love the smell of napalm in the mornin!" || Children of Bodom fan!


Acties:
  • +1Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Marco_Dark schreef op zondag 7 juni 2020 @ 16:56:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function onOpen() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var performanceSheet = spreadsheet.getSheetByName('Performance');
  var rngRET = performanceSheet.getRange(3,15,performanceSheet.getLastRow());
  var valuesRET = rngRET.getValues()
  var totalRET = 0
  for (var i = 0; i < valuesRET.length; i++) {
    if (parseFloat(valuesRET[i]) > -1000000) {
      totalRET = totalRET + parseFloat(valuesRET[i]);
    }
  }
  
  var localDateTime = new Date()
  var portfolioSheet = spreadsheet.getSheetByName('PortfolioTrend');
  portfolioSheet.appendRow([localDateTime, totalRET]);
}
Ik heb nogal wat gedelete en ik denk dat dit de originele code was. Hoe voeg je dan wat extra kolommen toe en doe je dezelfde handeling opnieuw? Je zou dat kunnen doen zoals je bezig was, maar dan met betere { en }, maar je zou ook een functie kunnen introduceren die dit voor je doet. Over het algemeen wil je bij programmeren niet zomaar regels kopiëren, maar wil je daar functies (of andere dingen) voor gebruiken.

Hoe ziet die code eruit met een functie? Nou bijvoorbeeld zoiets:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function onOpen() {
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var performanceSheet = spreadsheet.getSheetByName('Performance');

    function calculateTotal(a, b) {
        var rng = performanceSheet.getRange(a, b, performanceSheet.getLastRow());
        var values = rng.getValues();
        var total = 0;
        for (var i = 0; i < values.length; i++) {
            if (parseFloat(values[i]) > -1000000) {
                total = total + parseFloat(values[i]);
            }
        }
        return total;
    }

    var totalRET = calculateTotal(3, 15);

    var localDateTime = new Date();
    var portfolioSheet = spreadsheet.getSheetByName('PortfolioTrend');
    portfolioSheet.appendRow([localDateTime, totalRET]);
}

Ik heb daarvoor een javascript-editor gebruikt die de formatting regelt, errors er uit haalt, en refactoring kan doen om het wat makkelijker te maken. En hoe je dan 2 extra variabelen erbij krijgt laat ik aan jou over..

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0Henk 'm!

  • Marco_Dark
  • Registratie: Januari 2019
  • Laatst online: 28-03 17:32
@pedorus @webfreakz.nl

Bedankt voor jullie reacties.
Even ter uitleg
Beneden was het orginele script wat de waarde optelde in kolom waar er waardes waren.
Ik heb alleen de -100000 aangepast omdat dat eerst 0 was en toen werden negatieve waardes niet meegenomen. De regels is nodig omdat er ook lege regels zijn,
Ik heb gebrobeerd nietgelijk er van te maken maar dat werkte niet.

Ik ben dus van onderstaande script gegaan naar 3 opgetelde waardes die ik belangrijk vindt om die vast te legen.

Ik kreeg dus wel alle waarde maar van de 1e 2 variabelen alleen maar de waarde in rij 3 van de betreffende kolom.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*

EVENT FUNCTION

Each time the spreadsheet is opened or refreshed
appends a new entry
on the PortfolioTrend sheet
for the sum of the OverallReturn column
from the Performance sheet.

*/

function onOpen() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var performanceSheet = spreadsheet.getSheetByName('Performance');
var rng = performanceSheet.getRange(3,15,performanceSheet.getLastRow());
var values = rng.getValues()
var total = 0
for (var i = 0; i < values.length; i++) {
if (parseFloat(valuesRET[i]) > -1000000) {
total = total + parseFloat(values[i]);

}

var localDateTime = new Date()
var portfolioSheet = spreadsheet.getSheetByName('PortfolioTrend');
portfolioSheet.appendRow([localDateTime, total]);



}}

Acties:
  • +1Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Marco_Dark schreef op zondag 7 juni 2020 @ 23:06:
Ik heb gebrobeerd nietgelijk er van te maken maar dat werkte niet.
Dat komt waarschijnlijk omdat vergelijkingen met NaN altijd onwaar opleveren. Om daar op te checken kun je de isNaN functie gebruiken.

Voor de rest is het typisch dat getValues waarschijnlijk een 2-dimensionale array terug geeft. Vervolgens gaat het toevallig weer goed omdat parseFloat dat 'oplost' door het eerste element van een array te nemen.

Geen idee of je het nu hebt weten op te lossen door bijvoorbeeld mijn antwoord wat aan te passen, ik hoop het wel.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0Henk 'm!

  • Marco_Dark
  • Registratie: Januari 2019
  • Laatst online: 28-03 17:32
@pedorus Wederom bedankt voor het antwoorden.
Ik ben nog lang niet goed genoeg voor de aanpassingen die nodig zijn.
Ik zal het op een andere manier moeten oplossen
maar mijn dank
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee