So habe ich ein Skript das bekommt einige Daten von einem Server.
Ich möchte mein Skript die Daten auf einen Blattnamen "Marktartikel" veröffentlichen.
Ich habe das funktioniert, wenn ich das Skript direkt aus dem Blatt mit =getMarketItemsTrigger(1)
ausführen.
Es postet alle 11.669 Artikel zu meinem Blatt.Google Blatt Skript Einfügen von Daten in Blatt
Das Problem dabei ist, dass es jedes Mal aktualisiert wird, wenn das Blatt neu geladen wird; Ich brauche es nur einmal im Monat zu laufen.
Ich habe versucht, ein Skript zu erstellen, das keine Referenz in dem angegebenen Blatt benötigt, sondern direkt an ein vorbenanntes Blatt sendet, aber ich kann nicht herausfinden, wie ich die Daten in das Blatt
bekommen kann die Skriptdatei i
var version = '9a'
function getMarketItemsTrigger(refresh)
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Market Items");
Logger.log(sheet.getMaxColumns());
Logger.log(sheet.getMaxRows());
sheet.clear();
if(sheet.getMaxColumns()>2){
Logger.log('deleting colums');
sheet.deleteColumns(2, sheet.getMaxColumns()-2);
}
if(sheet.getMaxRows()>2){
Logger.log('deleting rows');
sheet.deleteRows(2,sheet.getMaxRows()-1);
}
var marketItemsEndpoint = 'https://crest-tq.eveonline.com/market/types/';
var marketItemsResponse = JSON.parse(fetchUrl(marketItemsEndpoint));
var totalPages = marketItemsResponse['pageCount'];
var itemList = [];
var headers = ['Item Name', 'ID'];
itemList.push(headers);
for (var currentPage = 1; currentPage <= totalPages; currentPage++)
{
Logger.log('Processing page ' + currentPage);
var marketItems = marketItemsResponse['items'];
for (var itemReference in marketItems)
{
var item = marketItems[itemReference];
itemList.push([item['type']['name'], item['id']]);
}
if (currentPage < totalPages)
{
var nextEndpoint = marketItemsResponse['next']['href'];
marketItemsResponse = JSON.parse(fetchUrl(nextEndpoint));
}
}
//sheet.insertRows(1,itemList.length+1);
// var range = sheet.getRange(1, 1,itemList.length+1,3);
// for(var i = 1;i<itemList.length;i++){
// range.getCell(i, 1).setValue([itemList]);
// range.getCell(1, i).setValue(itemList.);
// }
// Logger.log("don");
//sheet.getRange(1, 1, 1, itemList.length).setValues(itemList);
// sheet.getRange(itemList.length+1, 2).setValues(itemList);
// sheet.getDataRange().setValues([itemList]);
// sheet.appendRow(itemList);
// sheet.getRange(12+totalPages, 1, itemList.length, 1).setValues(itemList);
return itemList;
}
/**
* Private helper method that wraps the UrlFetchApp in a semaphore
* to prevent service overload.
*
* @param {url} url The URL to contact
* @param {options} options The fetch options to utilize in the request
*/
function fetchUrl(url)
{
if (gcsGetLock())
{
// Make the service call
headers = {"User-Agent": "Google Crest Script version " + version + " (/u/nuadi @Reddit.com)"}
params = {"headers": headers}
httpResponse = UrlFetchApp.fetch(url, params);
}
return httpResponse;
}
/**
* Custom implementation of a semaphore after LockService failed to support GCS properly.
* Hopefully this works a bit longer...
*
* This function searches through N semaphores, until it finds one that is not defined.
* Once it finds one, that n-th semaphore is set to TRUE and the function returns.
* If no semaphore is open, the function sleeps 0.1 seconds before trying again.
*/
function gcsGetLock()
{
var NLocks = 150;
var lock = false;
while (!lock)
{
for (var nLock = 0; nLock < NLocks; nLock++)
{
if (CacheService.getDocumentCache().get('GCSLock' + nLock) == null)
{
CacheService.getDocumentCache().put('GCSLock' + nLock, true, 1)
lock = true;
break;
}
}
}
return lock;
}
/**
* Private helper function that will check for a new version of GCS.
*/
function versionCheck()
{
var versionEndpoint = 'https://raw.githubusercontent.com/nuadi/googlecrestscript/master/version';
var newVersion = fetchUrl(versionEndpoint);
if (newVersion != null)
{
newVersion = newVersion.getContentText().trim();
Logger.log('Current version from Github: ' + newVersion);
var message = 'You are using the latest version of GCS. Fly safe. o7';
var title = 'No updates found';
if (newVersion > version)
{
message = 'A new version of GCS is available on GitHub.';
title = 'GCS version ' + newVersion + ' available!';
}
SpreadsheetApp.getActiveSpreadsheet().toast(message, title, 120);
}
}
der gesamte Code in der Funktion getMarketItemsTrigger
bin mit, das ist out kommentiert ist, was ich ohne Glück bereiften haben.
Die kurze Version dieser Frage ist, wie kann ich die Werte in itemList
zu Spalte a und b in Blatt Markt-Gegenständen
Hallo, ein Google-Skript muss keine benutzerdefinierte Funktion sein (um als Formel verwendet zu werden). Sie können das Array itemList auch direkt in das Blatt schreiben (aus dem Skript heraus. Diese Funktion kann dann mit einem Zeitbasis-Trigger (einmal im Monat) ausgelöst werden. – JPV
aber wie kann ich die itemList aus dem Skript in das Blatt schreiben? – simondid
ss.getSheetByName ('name_of_sheet_here'). getRange (1, 1, itemList.length, itemList [0] .length) .setValues (itemList) - >> Ändern Sie den Namen und den Bereich des Blattes entsprechend. – JPV