Sztuką jest, aby dopasować się do wyzwalacza zdarzeń onEdit i dodać trochę inteligencji
Na pierwszy rzut oka myślałem formatowanie warunkowe będzie działać, ale rząd minimalny-per-jest trochę zbyt skomplikowana dla standardowego formatowania warunkowego . To trochę trudne do wymyślenia, ale można to zrobić.
Oto pełne skrypt (przetestowane i działa):
function onEdit() {
var s = SpreadsheetApp.getActiveSheet();
var r = s.getActiveRange();
var row = r.getRow();
var cols = s.getDataRange().getNumColumns();
// crate a range for the row using getRange(row, column, numRows, numColumns)
var rowRange = s.getRange(row, 1, 1, cols);
var rowValues = rowRange.getValues();
// check all the values in the row
var val = 999;
for(var i = 0; i < cols; i++) {
if(val > rowValues[0][i] && rowValues[0][i] !== "") {
val = rowValues[0][i];
}
}
for(var j = 0; j < cols; j++) {
if(rowValues[0][j] === val) {
s.getRange(row,(j + 1)).setFontColor("blue");
} else {
s.getRange(row,(j + 1)).setFontColor("black");
}
}
}
Najpierw dopasować się do obsługi zdarzeń onEdit wywołać skrypt ze zmianami kalkulacyjnych.
function onEdit()
Poprzez nadanie funkcji na klawiaturze, będzie automatycznie wiedzieć, że chcesz zastąpić akcję onEdit.
Uwaga: Obsługa zdarzeń w Dokumentach jest jednak nieco skomplikowana. Ponieważ dokumenty mogą obsługiwać wiele jednoczesnych edycji przez wielu użytkowników, procedury obsługi zdarzeń są obsługiwane po stronie serwera. Głównym problemem związanym z tą strukturą jest to, że gdy skrypt wyzwalający zdarzenia się nie powiedzie, nie powiedzie się na serwerze. Jeśli chcesz zobaczyć informacje na temat debugowania, musisz skonfigurować jawny wyzwalacz w menu wyzwalaczy, który będzie wysyłać Ci e-mailem informacje o debugowaniu, gdy zdarzenie się nie powiedzie, inaczej nie powiedzie się po cichu.
Fetch numer wiersza:
var r = s.getActiveRange();
var row = r.getRow();
dość wymowne tutaj. Aktywny zakres to edytowana komórka.
Grab liczba kolumn:
var cols = s.getDataRange().getNumColumns();
Trzeba sprawdzić zakres danych dla całego arkusza kalkulacyjnego do tego.
Następnie trzeba skonstruować zakres danych zawierającą dane dla wiersza w pytaniu:
var rowRange = s.getRange(row, 1, 1, cols);
przeczytać komentarze w kodzie, aby zobaczyć, jakie wartości powinny być.
Potem buforować wyników dla testowania wartości:
var rowRange = s.getRange(row, 1, 1, cols);
Ze względu na charakter Dokumentów Google callbacków zdarzeń skrypty uruchamiane po stronie serwera tak, aby zapobiec nadużyciom, Google stawia limit czasowy na wykonanie skryptu. Przechowując wartości w pamięci podręcznej, serwer nie może wykonywać niepotrzebnych wycieczek w obie strony w celu pobrania wartości z arkusza kalkulacyjnego.
Następne dwie części to miejsce, w którym dzieje się cała magia.
Najpierw przechodzimy przez wszystkie komórki wiersza, aby znaleźć minimalną wartość.
var val = 999;
for(var i = 0; i < cols; i++) {
if(val > rowValues[0][i] && rowValues[0][i] !== "") {
val = rowValues[0][i];
}
}
Ustawiłem domyślny pułap 999 dla uproszczenia. This could be change to a more appropriate value. Sztuką jest przetestowanie wartości względem aktualnego niskiego poziomu. Jeśli jest niższy, oznacz nową niską wartość.
Możesz wyjść z łatwości, zaznaczając numer komórki z najniższą wartością i ustawiając go jawnie, ale chciałem pokryć przypadki, w których wiele komórek ma najniższą wartość.
Obróbka wiele komórek zawierających co najmniej wymaga drugiego przebiegu:
for(var j = 0; j < cols; j++) {
if(rowValues[0][j] === val) {
s.getRange(row,(j + 1)).setFontColor("blue");
} else {
s.getRange(row,(j + 1)).setFontColor("black");
}
}
Pętla przez wszystkie komórki w rzędzie pozostaje taka sama. Tym razem sprawdzamy tylko, czy wartości komórek odpowiadają wybranemu minimum. Jeśli pasuje, kolor czcionki zmienia się na niebieski. W przeciwnym razie kolor czcionki zostanie zmieniony na czarny.
To wszystko podsumowuje. Trudno jest przyzwyczaić się do sposobu, w jaki Skrypt Google Apps zajmuje się odwoływaniem się do arkuszy kalkulacyjnych i komórek danych, ale niewiele jest do zrobienia w Dokumentach.
Zrobiłem public link do arkusza kalkulacyjnego, którego użyłem do napisania/przetestowania tego kodu. Śmiało wypróbuj.
Niekoniecznie związane z programowaniem. – JasonV
Formatowanie warunkowe, nawet jeśli odbywa się za pośrednictwem interfejsu użytkownika, jest związane z programowaniem, ponieważ wymaga analizy problemu w celu zdefiniowania zestawu reguł w taki sposób, aby komputer mógł wykonać zadanie. Biorąc to pod uwagę, myślę, że to pytanie powinno zostać ponownie otwarte. –
Wybierz wszystkie komórki i zastosuj niestandardową formułę: '= i (nie (isblank (A1)), A1 = min (1: 1))' – pnuts