Cookies op Tweakers

Tweakers is onderdeel van DPG Media en maakt gebruik van cookies, JavaScript en vergelijkbare technologie om je onder andere een optimale gebruikerservaring te bieden. Ook kan Tweakers hierdoor het gedrag van bezoekers vastleggen en analyseren. Door gebruik te maken van deze website, of door op 'Cookies accepteren' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt? Bekijk dan ons cookiebeleid.

Meer informatie
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: 17-06 22:06
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: 29-03 13:27

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 | Middelen tegen corona


Acties:
  • 0Henk 'm!

  • Marco_Dark
  • Registratie: januari 2019
  • Laatst online: 17-06 22:06
@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 | Middelen tegen corona


Acties:
  • 0Henk 'm!

  • Marco_Dark
  • Registratie: januari 2019
  • Laatst online: 17-06 22:06
@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


Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Microsoft Xbox Series X LG CX Google Pixel 5a 5G Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True