NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Nefarit
Člen
Avatar
Nefarit:5.5.2015 22:54

Zdravím,
shodou okolností potřebuju v googlesheets udělat několik funkcí, podobně jako v excelu s využitím visual basicu. Tam bych problém neměl, tam veškeré základy umím. Nicméně v tomto naprosto plavu. Udělal jsem si několik tutoriálů, ale prostě to co potřebuju v nich nebylo. Pro člověka, který to používá a umí to budou naprosté základy. Jedná se o jednoduché funkce. Byl bych strašně rád, kdyby mi někdo poradil

Načtení hodnoty z buňky do proměné:
- toto se mi nějak povedlo, nicméně přesně nechápu určité prvky v kódu, byl bych vděčen, kdbyby mi to někdo vysvětlil...
- KOD:
function READ() {
var ss = SpreadsheetAp­p.openById("1IL­LXqFRQIpJy8FPgEB4VBq­F7a4ykAjE8KBvPKk_8uw­s"); // tohle chápu tak, že do proměné "ss" mi načte soubor s tabulkou

var name = ss.getName("Ski­lls"); // tuhle část nechápu vůbec :) Snad nějaké pojmenování, abych nepoužíval ten dlouhý název odkazu?

var sheet = ss.getSheetBy­Name('list 3'); // vytvoří proměnou "sheet" ktrou hledá v jednotlivých listech dokumentu?
var range = sheet.getRange(1,2); // vytvoří proměnou "range" která udává přesnou buňku?
var data = range.getValue(); // načte do proměnné "data" hodnotu buňky z "range"

--- Tohle mi nějak funguje, i dkyž mi to přijde příliš složité (minimálně v porovnání s visual basicem v excelu, tam se to sfouklou jednou řádkou.

Zapsání hodnoty do buňky z načtené proměnné:
tady jsem se marně pokoušel na něco přijít. Povedlo se mi pouze přidávat řádek s danou hodnotou, pomocí:
sheet.appendRow([da­ta]);
ale nikoli zapsání do buňky, kterou bych si vybral...

předem všem moc děkuji za pomoc

s pozdravem
Nefarit

 
Odpovědět
5.5.2015 22:54
Avatar
Filip Pýrek
Tvůrce
Avatar
Odpovídá na Nefarit
Filip Pýrek:6.5.2015 7:59

Ohledně toho var name, nikde jsem si nevšiml že by jsi ho použil. Takže to bude s největší pravděpodobností zbytečné...

Toto jde taky "sfouknout" do jednoho řádku

var data = ss.getSheetByName('list 3').getRange(1,2).getValue();

Jak nastavit hodnotu (http://stackoverflow.com/…t-cell-value)

ss.getSheetByName('list 3').getRange(1,2).setValue("NĚJAKA HODNOTA");

S googlesheets jsem nikdy moc nedělal, takže nevím jistě jestli to bude fungovat, ale podle Googlu, by asi mělo.

Nahoru Odpovědět
6.5.2015 7:59
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Nefarit
Člen
Avatar
Odpovídá na Filip Pýrek
Nefarit:6.5.2015 13:03

Díky moc, akorát jsem tam stále musel zanechat ten řádek:
var ss = SpreadsheetAp­p.openById("1IL­LXqFRQIpJy8FPgEB4VBq­F7a4ykAjE8KBvPKk_8uw­s");
jinak to funguje.
Asi časem budu mít několik dalších otázek, každopádně zatím moc děkuji ;)

Nef

 
Nahoru Odpovědět
6.5.2015 13:03
Avatar
Nefarit
Člen
Avatar
Odpovídá na Nefarit
Nefarit:6.5.2015 13:22

Tak netrvalo to dlouho a mám tady další problém. Chtěl bych, aby mi funkce zvýšila hodnotu o nějakou hodnotu v aktivní buňce (ta která je zrovna nakliknutá), např. "1", ale bohužel tohle mi nefunguje...


function SET_skill_valu­e_up() {
var ss = SpreadsheetAp­p.openById("1IL­LXqFRQIpJy8FPgEB4VBq­F7a4ykAjE8KBvPKk_8uw­s");
var active_cell = ss.getSheetBy­Name('Skills_va­lue').getActi­veRange().get­Value();
active_cell === (active_cell + 1);
ss.getSheetBy­Name('Skills_va­lue').getActi­veRange().set­Value(active_ce­ll);
}


díkes ;)

Editováno 6.5.2015 13:23
 
Nahoru Odpovědět
6.5.2015 13:22
Avatar
Filip Pýrek
Tvůrce
Avatar
Odpovídá na Nefarit
Filip Pýrek:6.5.2015 13:42

Mno, bral jsem to jako zřejmé...

Nahoru Odpovědět
6.5.2015 13:42
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Filip Pýrek
Tvůrce
Avatar
Odpovídá na Nefarit
Filip Pýrek:6.5.2015 13:47

Kde jsi přišel na toto?

active_cell === (active_cell + 1);
:D :D
function SET_skill_value_up() {
var ss = SpreadsheetApp.openById("1ILLXqFRQIpJy8FPgEB4VBqF7a4ykAjE8KBvPKk_8uws");
var range = ss.getSheetByName('Skills_value').getActiveRange();
range.setValue(range.getValue()+1);
}

Zkus toto.

Nahoru Odpovědět
6.5.2015 13:47
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Nefarit
Člen
Avatar
Odpovídá na Filip Pýrek
Nefarit:6.5.2015 15:52

active_cell === (active_cell + 1); nevím, mě to tak napadlo...

function SET_skill_valu­e_up() {
var ss = SpreadsheetAp­p.openById("1IL­LXqFRQIpJy8FPgEB4VBq­F7a4ykAjE8KBvPKk_8uw­s");
var range = ss.getSheetBy­Name('Skills_va­lue').getActi­veRange();
range.setValu­e(range.getVa­lue()+1);
}

nicméně tenhle skript mi nefachá. Hodnotu buňky nezvýší :/

Editováno 6.5.2015 15:53
 
Nahoru Odpovědět
6.5.2015 15:52
Avatar
Filip Pýrek
Tvůrce
Avatar
Odpovídá na Nefarit
Filip Pýrek:6.5.2015 16:55

Zkus se mrknout sem, popř. pogooglit..
http://stackoverflow.com/…le-appscript

Nahoru Odpovědět
6.5.2015 16:55
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Nefarit
Člen
Avatar
Odpovídá na Filip Pýrek
Nefarit:6.5.2015 17:23

Ok, kouknu na to dík. Snad to nějak vykoumu. Mezitím jsem narazil na další o něco složitější problém. Potřebuju, aby mi sečetl několik buňek dohromady, přičemž pokud bude číslo větší než 5, tak vynásobil 2x a pokud více jak 10, tak vynásobil 3x. A udělal sumu.
Tady jsem něco začal, ale úplně jsem se do toho zamotal:

function SUM_spent_points()
{
  var ss = SpreadsheetApp.openById("1ILLXqFRQIpJy8FPgEB4VBqF7a4ykAjE8KBvPKk_8uws");
  var value = 0;
  var vznesene_zbrane_value = ss.getSheetByName('Skills_value').getRange(2,2).getValue(value);
  value_type(value);
  value = vznesene_zbrane_value;
  var secne_zbrane_value = ss.getSheetByName('Skills_value').getRange(3,2).getValue();
  ss.getSheetByName('Skills_value').getRange(14,2).setValue(vznesene_zbrane_value + secne_zbrane_value);
}
var value = 0;
function value_type(value)
{
  if (value > 5)
  {
    value = 2 * value;
  }
  if (value > 10)
  {
    value = 3 * value;
  }
  else
  {
    value = value;
  }
}

Chtěl jsem to tak, aby načetl jednotlivé buňky do různých proměných a každou projel tou funkcí value_type a vrátil z5 hodnotu dle toho kritéria, poté to sečetl do jedné buňky...
Jestli už tě obtěžuju, tak mě klidně pošli někam ;)

díkes

 
Nahoru Odpovědět
6.5.2015 17:23
Avatar
Nefarit
Člen
Avatar
Odpovídá na Filip Pýrek
Nefarit:6.5.2015 17:35

I podle toho cos poslal, by tohle prostě mělo fungovat:

function SET_skill_value_up() {
var ss = SpreadsheetApp.openById("1ILLXqFRQIpJy8FPgEB4VBqF7a4ykAjE8KBvPKk_8uws");
var range = ss.getSheetByName('Skills_value').getActiveRange();
var value = range.getValue();
range.setValue(value + 1);
}

Jedinej rozdíl je v tom, že já pracuju s tou aktivní buňkou, takže chyba musí být někd v tom :(

 
Nahoru Odpovědět
6.5.2015 17:35
Avatar
Nefarit
Člen
Avatar
Nefarit:18.5.2015 16:05

Tak už jsem na to přišel, prostě to nefunguje v kombinaci s načtením

var ss = SpreadsheetApp.openById("1ILLXqFRQIpJy8FPgEB4VBqF7a4ykAjE8KBvPKk_8uws");

musí se to jet přez active takhle:

var ss = SpreadsheetApp.getActiveSpreadsheet();

pak až to dělá co má :D

 
Nahoru Odpovědět
18.5.2015 16:05
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.