2013-01-15 12 views
5

Używam skryptu aplikacji Google do tworzenia niestandardowego arkusza kalkulacyjnego. Aby poprawić szybkość renderowania skryptu, najpierw buduję tablicę wartości wyjściowych, a następnie używam setValues() do budowania arkusza kalkulacyjnego na raz.Jak maskować wartości przy użyciu wartości setValues ​​w skryptach aplikacji Google?

Kiedy próbuję dodać formuły do ​​arkusza kalkulacyjnego przy pomocy setFormulas(), to on również zastępuje wszystkie moje wartości. Więc teraz mam przypadek, w którym setValues() nadpisuje moje formuły i setFormulas() nadpisuje moje wartości.

Czy istnieje sposób na określenie wartości maskowania dla określonych elementów w mojej macierzy wyników, aby te elementy nie zastępowały danych już zawartych w arkuszu kalkulacyjnym?

Idealnie zainicjowałbym każdy element tablicy wyjściowej do tej wartości maskowania, a następnie w arkuszu kalkulacyjnym pojawiłyby się wyłącznie elementy bez zamaskowania.

Odpowiedz

0

Niestety, nie ma możliwości maskowania w metodzie setValues() lub setFormulas(). Jeśli formuła jest podana do metody setValues(), powinna ona ustawić ją jednak poprawnie, więc możesz ustawić wartości i formuły w jednym wywołaniu na setValues().

range.setValues([['foo', '=LEN("bar")']]); 
+0

Nie działa to w nowych Arkuszach kalkulacyjnych Google. Czy jest jeszcze jakieś inne dzieło? Zapisywanie wszystkiego jako formuły nie jest zbyt użyteczne dla użytkowników końcowych. – fooby

3

Dla każdego, kto uważa, że ​​to za pośrednictwem Google, używając setValues ​​() dla formuł teraz wydaje się działać w nowych arkuszy.

Dokładniej, używam kodu tak, aby umieścić z powrotem w formuł po wykonaniu pracy na arkuszu:

function setValuesAndFormulas() { 
    var sheet = SpreadsheetApp.getActive().getActiveSheet(); 
    var range = sheet.getDataRange(); 
    var values = range.getValues(); 
    var formulas = range.getFormulas(); 

    for (var i = 0; i < values.length; i++) { 
    for (var j = 0; j < values[i].length; j++) { 
     if (formulas[i][j].charAt(0) == "=") { 
     values[i][j] = formulas[i][j]; 
     } 
    } 
    } 

    range.setValues(values); 
} 

nadzieję, że pomoże!

+1

Dzięki, to jest to, czego potrzebowałem! Jedna rzecz, nie sądzę, musimy sprawdzić 'if (formuły [i] [j] .charAt (0) ==" = ")', może po prostu sprawdzić 'if (formuły [i] [j])' , dobrze? –

+0

Nie jestem pewien, Minęło dużo czasu, odkąd muszę to zrobić. Jeśli to rozwiążesz, możesz edytować moją odpowiedź :) –