2016-05-09 9 views
2

Ich habe found a script on github, um Preise von der EVE-Central API zu ziehen, um in einer Google-Tabelle einzubeziehen. Ich habe dieses Skript in den Editor hochgeladen und gespeichert. Wenn ich versuche, es auszuführen, erhalte ich eine Fehlermeldung über eine fehlende Datei oder Funktion.Erklärung für "Notwendigkeit typeids" Fehler

brauchen typeids (Linie 38, Datei ‚Code‘)

Wenn ich versuche, die Funktion in der Tabelle zu verwenden, um es mir sagt, die Funktion nicht existiert. Nach langem Lesen habe ich herausgefunden, dass Google in ihren Skript-Editoren etwas geändert hat.

Hier ist das Skript, das ich verwende. Und ein Bild von dem Fehlercode, den ich bekommen habe.

/* 

Takes a bunch of typeids from a list (duplicates are fine. multidimensional is fine) and returns a bunch of rows 
with relevant price data. 

TypeID,Buy Volume,Buy average,Buy max,Buy min,Buy Std deviation,Buy median,Buy Percentile, 
Sell Volume,Sell Average,Sell Max,Sell Min,Sell std Deviation,Sell Median,sell Percentile 



I'd suggest loading price data into a new sheet, then using vlookup to get the bits you care about in your main sheet. 

loadRegionPrices defaults to the Forge 
loadSystemPrices defaults to Jita 


=loadRegionPrices(A1:A28) 
=loadRegionPrices(A1:A28,10000002) 
=loadRegionPrices(A1:A28,10000002,47) 

=loadSystemPrices(A1:A28) 






An example below: 

https://docs.google.com/spreadsheets/d/1f9-4cb4Tx64Do-xmHhELSwZGahZ2mTTkV7mKDBRPrrY/edit?usp=sharing 

*/ 
function loadRegionPrices(priceIDs,regionID,cachebuster){ 
    if (typeof regionID == 'undefined'){ 
    regionID=10000002; 
    } 
    if (typeof priceIDs == 'undefined'){ 
    throw 'need typeids'; 
    } 
    if (typeof cachebuster == 'undefined'){ 
    cachebuster=1; 
    } 
    var prices = new Array(); 
    var dirtyTypeIds = new Array(); 
    var cleanTypeIds = new Array(); 
    var url="http://api.eve-central.com/api/marketstat?cachebuster="+cachebuster+"&regionlimit="+regionID+"&typeid="; 
    priceIDs.forEach (function (row) { 
    row.forEach (function (cell) { 
     if (typeof(cell) === 'number') { 
     dirtyTypeIds.push(cell); 
     } 
    }); 
    }); 
    cleanTypeIds = dirtyTypeIds.filter(function(v,i,a) { 
    return a.indexOf(v)===i; 
    }); 
    var parameters = {method : "get", payload : ""}; 

    var o,j,temparray,chunk = 100; 
    for (o=0,j=cleanTypeIds.length; o < j; o+=chunk) { 
    temparray = cleanTypeIds.slice(o,o+chunk); 
    var xmlFeed = UrlFetchApp.fetch(url+temparray.join("&typeid="), parameters).getContentText(); 
    var xml = XmlService.parse(xmlFeed); 
    if(xml) { 
     var rows=xml.getRootElement().getChild("marketstat").getChildren("type"); 
     for(var i = 0; i < rows.length; i++) { 
     var price=[parseInt(rows[i].getAttribute("id").getValue()), 
        parseInt(rows[i].getChild("buy").getChild("volume").getValue()), 
        parseFloat(rows[i].getChild("buy").getChild("avg").getValue()), 
        parseFloat(rows[i].getChild("buy").getChild("max").getValue()), 
        parseFloat(rows[i].getChild("buy").getChild("min").getValue()), 
        parseFloat(rows[i].getChild("buy").getChild("stddev").getValue()), 
        parseFloat(rows[i].getChild("buy").getChild("median").getValue()), 
        parseFloat(rows[i].getChild("buy").getChild("percentile").getValue()), 
        parseInt(rows[i].getChild("sell").getChild("volume").getValue()), 
        parseFloat(rows[i].getChild("sell").getChild("avg").getValue()), 
        parseFloat(rows[i].getChild("sell").getChild("max").getValue()), 
        parseFloat(rows[i].getChild("sell").getChild("min").getValue()), 
        parseFloat(rows[i].getChild("sell").getChild("stddev").getValue()), 
        parseFloat(rows[i].getChild("sell").getChild("median").getValue()), 
        parseFloat(rows[i].getChild("sell").getChild("percentile").getValue())]; 
     prices.push(price); 
     } 
    } 
    } 
    return prices; 
} 

function loadSystemPrices(priceIDs,systemID,cachebuster){ 
    if (typeof systemID == 'undefined'){ 
    systemID=30000142; 
    } 
    if (typeof priceIDs == 'undefined'){ 
    throw 'need typeids'; 
    } 
    if (typeof cachebuster == 'undefined'){ 
    cachebuster=1; 
    } 
    var prices = new Array(); 
    var dirtyTypeIds = new Array(); 
    var cleanTypeIds = new Array(); 
    var url="http://api.eve-central.com/api/marketstat?cachebuster="+cachebuster+"&usesystem="+systemID+"&typeid="; 
    priceIDs.forEach (function (row) { 
    row.forEach (function (cell) { 
     if (typeof(cell) === 'number') { 
     dirtyTypeIds.push(cell); 
     } 
    }); 
    }); 
    cleanTypeIds = dirtyTypeIds.filter(function(v,i,a) { 
    return a.indexOf(v)===i; 
    }); 
    var parameters = {method : "get", payload : ""}; 

    var o,j,temparray,chunk = 100; 
    for (o=0,j=cleanTypeIds.length; o < j; o+=chunk) { 
    temparray = cleanTypeIds.slice(o,o+chunk); 
    var xmlFeed = UrlFetchApp.fetch(url+temparray.join("&typeid="), parameters).getContentText(); 
    var xml = XmlService.parse(xmlFeed); 
    if(xml) { 
     var rows=xml.getRootElement().getChild("marketstat").getChildren("type"); 
     for(var i = 0; i < rows.length; i++) { 
     var price=[parseInt(rows[i].getAttribute("id").getValue()), 
        parseInt(rows[i].getChild("buy").getChild("volume").getValue()), 
        parseFloat(rows[i].getChild("buy").getChild("avg").getValue()), 
        parseFloat(rows[i].getChild("buy").getChild("max").getValue()), 
        parseFloat(rows[i].getChild("buy").getChild("min").getValue()), 
        parseFloat(rows[i].getChild("buy").getChild("stddev").getValue()), 
        parseFloat(rows[i].getChild("buy").getChild("median").getValue()), 
        parseFloat(rows[i].getChild("buy").getChild("percentile").getValue()), 
        parseInt(rows[i].getChild("sell").getChild("volume").getValue()), 
        parseFloat(rows[i].getChild("sell").getChild("avg").getValue()), 
        parseFloat(rows[i].getChild("sell").getChild("max").getValue()), 
        parseFloat(rows[i].getChild("sell").getChild("min").getValue()), 
        parseFloat(rows[i].getChild("sell").getChild("stddev").getValue()), 
        parseFloat(rows[i].getChild("sell").getChild("median").getValue()), 
        parseFloat(rows[i].getChild("sell").getChild("percentile").getValue())]; 
     prices.push(price); 
     } 
    } 
    } 
    return prices; 
} 

Error Note

+1

Bitte erläutern Sie, was Sie mit "Nach einer Menge Lektüre habe ich herausgefunden, dass Google etwas in ihren Skript-Editoren geändert hat"? Wir können nicht erraten, was Sie gelesen haben oder welche Veränderung Sie beeinflusst hat. Welchen genauen Fehler siehst du? Wie haben Sie versucht, die benutzerdefinierte Funktion aus der Tabelle aufzurufen? – Mogsdad

Antwort

1

Die Fehlermeldung ist sehr explizit. Hier ist der relevante Code:

function loadSystemPrices(priceIDs,systemID,cachebuster){ 
    if (typeof systemID == 'undefined'){ 
    systemID=30000142; 
    } 
    if (typeof priceIDs == 'undefined'){ 
    throw 'need typeids';  //// <<<< Line 38 
    } 

Funktion loadSystemPrices() hat ohne Wert für die priceIDs Parameter aufgerufen. Diese Bedingung wird explizit vom Code überprüft und führt dazu, dass in Zeile 38 eine benutzerdefinierte Fehlernachricht ausgegeben wird.

Das passiert, weil Sie die Funktion vom Debugger ohne Parameter aufgerufen haben. Sie können dies umgehen, indem Sie eine Testfunktion schreiben, um Parameter zu übergeben, wie in Debugging a custom function in Google Apps Script beschrieben.

+1

op sollte sich den Kommentar am oberen Rand des kopierten Codes ansehen, wo Beispiele für die Verwendung der Funktionen aus einer Tabellenzellenformel angezeigt werden –

Verwandte Themen