2013-06-08 19 views
6

Mam kilka zapytań na arkuszu, w którym wyodrębniam informacje do bazy danych.Odśwież komórkę zamiast naciskać ctrl-Shift-E ręcznie

Mam problem z tym, że zaimplementowany kod był w porządku, dopóki niektóre arkusze nie wyświetliły kwerendy pokazującej: "ostrzeżenie: jeden lub więcej z tych wyników" może nie być wyświetlanych. Wybierz Ctrl + Shift + E, aby pokazać im

próbowałem wyczyszczenie wartości i wklejając je bezskutecznie

co jeszcze mogę zrobić

+0

Z jakim problemem się martwisz? Czy należy wymuszać odświeżanie, aby można było zobaczyć wartości w przeglądarce? A może masz problemy ze skryptami czytającymi zakresy zawierające zapytania? – Mogsdad

+0

, aby wymusić odświeżenie! Scrip jest w porządku. Właśnie wtedy, gdy uruchamiam skrypt, aby przenieść dane da do mojej bazy danych, to nie jest, ponieważ zmusza mnie to ręcznie z kombinacją klawiszy – eddg

+0

Czy w skrypcie występują błędy na "brakujących danych"? Jeśli tak, jaki błąd lub odpowiedź widzisz? – Mogsdad

Odpowiedz

6

IMHO nie sądzę, że istnieje kanoniczny odpowiedź na to pytanie..? - od użytkowników wokół pewnych tematów zawsze dochodziły głośne okrzyki, które po prostu rozpraszają się w niesamowitej ciszy inżynierii Google Docs zespół (zagadnienie to wydaje się być spowite tą samą wieczną tajemnicą, co IMPORTRANGE często zawodzi lub SPLIT nie tworzy idealnej matrycy).

Zostałem ukąszony przez siebie kilka razy, więc mam trochę doświadczenia. Użyłem obejścia typu heath-robinson, który zadziałał dla mnie. Ale YMMV.

Pytanie OP omawia sytuację, w której istnieje formuła, która działała dobrze, ale po pewnym czasie działania zaczęła się pojawiać sytuacja Ctrl + Shift + E.

(Istnieją inne sytuacje, w których może wystąpić Ctrl + Shift + E z powodu wyników jednej formuły, która próbuje nadpisać komórki zapisane inną formułą.W tym scenariuszu, czasami dodawanie EXPAND na początku żądanej formuły powoduje sztuczkę Używanie funkcji filtrowania, zamiast porównywania "IF", powoduje wyodrębnianie poprzednich komórek = KONTYNUACJA (1,2,3) ... ale być może żadne z nich nie pomoże w kwestii OP).

Z mojego doświadczenia wynika, że ​​arkusz kalkulacyjny może rozwinąć takie "zdezorientowane" zachowanie w czasie, wymagając Ctrl + Shift + E, co oznacza okres czasu, w którym istnieje kilka zastosowań arkusza kalkulacyjnego powodującego zmiany w danych . Mogę dalej spekulować, że istnieje większe prawdopodobieństwo tego zdezorientowanego zachowania, gdy dane referencyjne są bardziej dynamiczne, np. dodano wiersze, usunięto wiersze LUB że istnieją inne formuły, które również obliczają z tego samego zestawu danych (nie mówiąc o tym, że te dwie formuły odnoszą się do siebie).

Myślę, że idiom "zdezorientowane zachowanie" jest odpowiednie, ponieważ faktyczna konstrukcja arkusza kalkulacyjnego jest otwartym polem tylko dla inżynierów Google; nie możemy zracjonalizować jego działania. Wydaje się więc tajemnicze i magiczne, jak w przypadku OP i mojego doświadczenia arkusz kalkulacyjny działał dobrze, ale potem zmieniono zachowanie tak, aby wymagał Ctrl + Shift + E bez jakiejkolwiek zmiany we wzorach, tylko w nagromadzonych zmianach danych arkuszy poprzez użycie.

Podam przykład mojego obejścia na przykładzie mojego przykładu. Zauważ, że w moim przypadku dane, a także problematyczne formuły, są w jednym arkuszu, który nazywam arkuszem produkcyjnym.

Obejście polega na użyciu skryptu do powielenia "arkusza szablonu", w tym samym arkuszu kalkulacyjnym, co produkcja arkusz. Arkusz szablonu jest strukturalnie identyczny z arkuszem produkcyjnym z tymi samymi nagłówkami kolumn, ale zawiera tylko kilka linii przykładowych danych. Ma takie same formuły jak arkusz produkcyjny, które odnoszą się do danych próbki w tym samym arkuszu szablonu (nie do arkusza produkcyjnego). Co ważne, arkusz szablonu nie pokazuje "zachwiania" - w komórkach formuły nie jest wymagany Ctrl + Shift + E w przypadku jakichkolwiek zmian w przykładowych danych szablonu. Zawiera także formułowanie arkusza produkcyjnego.

Po uruchomieniu skryptu tworzy on duplikat arkusza szablonu; następnie kopiuje dane arkusza produkcyjnego do tego szablonu i ponownie nakłada formaty. Ten duplikat staje się nowym arkuszem produkcyjnym. Stary arkusz produkcji jest ukryty (w moim przypadku, ale można go usunąć).

Mam ten system operacyjny na arkuszu kalkulacyjnym Lista zadań używanym przez 12 osób dziennie, gdzie Zadania przychodzą przez formularz Google w ciągu dnia (i same są kopiowane do arkusza produkcyjnego przez inny skrypt, nie pokazane jako nieistotne do tego OP). Po zakończeniu zadania wiersz zadania zostaje usunięty z arkusza produkcyjnego. Tak więc dane stale rosną i kurczą się przez cały dzień. Duplikat tworzony jest każdej nocy, według czasu wyzwalacza przy funkcji insertSheet(). Oto skrypt używam:

function insertSheet(){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet =ss.getSheets()[0]; //first sheet is the production sheet 
    var sheetRange = sheet.getRange('A3:P'); 
    var sheetValues= sheetRange.getValues(); 
    var d = Utilities.formatDate(new Date(), Session.getTimeZone(), 'ddMMMyyyy-hh:mm:ss'); 
    var ex = sheet.setName('CCEs' + d); 
    var templateSheet = ss.getSheetByName('templateSheet'); 
    var s2 = ss.insertSheet(0,{template: templateSheet}); 
    var height = sheetRange.getHeight(); 
    s2.insertRowsAfter(2, height) 
    s2.setName('CCEs'); 
    templateSheet.hideSheet(); 
    ex.hideSheet(); 
    s2.getRange('A3:P' + (sheetValues.length+2)).setValues(sheetValues); 
    format(); // 
    templateSheet.hideSheet(); 
    ex.hideSheet(); 
} 

function format(){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var formatRange = ss.getSheetByName('templateSheet').getRange('B2:N2').copyTo(ss.getSheetByName('CCEs').getRange(2,2, ss.getSheetByName('CCEs').getMaxRows() -1,14), {formatOnly:true}); 
} 

Przed wdrożeniem tej strategii, arkusz doświadczy „mylić-zachowanie” po kilku dniach albo tak.

Arkusz zawierał trzy formuły, które mogłyby zostać pomylone. Nie są one ważne dla PO, ale powielać tu tylko dać czytelnikowi poczucie sukcesu tej strategii:

=arrayformula(IFERROR(FILTER(if(row(O:O) =1,"Auto Time Stamp ",iferror(1/0)) &O:O&if(row(O:O) =1,"copy",),len(A:A)),"Error")) 

=Arrayformula(iferror(if(filter(L:L, len(A:A)) - filter(A:A, len(A:A))>0, if(int(filter(L:L, len(A:A)) - filter(A:A, len(A:A))) = 0 , text(text(filter(L:L, len(A:A)), "HH:mm") -text(filter(A:A, len(A:A)), "HH:mm") , "H:mm") , int(filter(L:L, len(A:A)) - filter(A:A, len(A:A))) & "Day(s), " & text(text(filter(L:L, len(A:A)), "HH:mm") -text(filter(A:A, len(A:A)), "HH:mm") , "H:mm")) ,iferror(1/0)),"Time Taken")) 

=arrayformula(IFERROR(if((ISBLANK(FILTER(J1:J,LEN(A1:A))) * (FILTER(G1:G,LEN(A1:A)) = "Normal")* (now()-FILTER(A1:A,LEN(A1:A))> OverdueTimings!A1)),"OVERDUE Normal", if((ISBLANK(FILTER(J1:J,LEN(A1:A))) * (FILTER(G1:G,LEN(A1:A)) = "Urgent")* (now()-FILTER(A1:A,LEN(A1:A))> OverdueTimings!A2)),"OVERDUE Urgent", if((ISBLANK(FILTER(J1:J,LEN(A1:A))) * (FILTER(G1:G,LEN(A1:A)) = "Very Urgent")* (now()-FILTER(A1:A,LEN(A1:A))> OverdueTimings!A3)),"OVERDUE V. Urgent", IFERROR(1/0)))),countif(if((ISBLANK(FILTER(J1:J,LEN(A1:A))) * (FILTER(G1:G,LEN(A1:A)) = "Normal")* (now()-FILTER(A1:A,LEN(A1:A))> OverdueTimings!A1)),"OVERDUE Normal", if((ISBLANK(FILTER(J1:J,LEN(A1:A))) * (FILTER(G1:G,LEN(A1:A)) = "Urgent")* (now()-FILTER(A1:A,LEN(A1:A))> OverdueTimings!A2)),"OVERDUE Urgent", if((ISBLANK(FILTER(J1:J,LEN(A1:A))) * (FILTER(G1:G,LEN(A1:A)) = "Very Urgent")* (now()-FILTER(A1:A,LEN(A1:A))> OverdueTimings!A3)),"OVERDUE V. Urgent", iferror(1/0)))),"OVERDUE *")& " OVERDUE")) 

Po kilku dniach, usunąć wszystkie nagromadzone starych arkuszy produkcyjnych.