2012-05-08 14 views
14

Mam jeden główny arkusz kalkulacyjny i liczbę kopii. Ten główny arkusz kalkulacyjny wykorzystuje niektóre skrypty.Czy można mieć jeden skrypt dla wielu arkuszy kalkulacyjnych?

Czy można powiązać wszystkie kopie tego głównego arkusza kalkulacyjnego z tym samym skryptem, co w głównym arkuszu kalkulacyjnym?

Cel:

  • zmiany w skryptach w arkuszu głównym są automatycznie wykorzystywane przez kopii
  • aka: niskie koszty utrzymania
+0

allthough nie powinni zrobić taki komentarz: wybitnie dobre pytanie! – haemse

Odpowiedz

17

amleczko ma rację: należy użyć nowej funkcji biblioteki w skrypcie Google Apps.

Jednak od dzisiaj nie można zrobić dokładnie tego, czego oczekujesz (używając tego samego skryptu dla kilku arkuszy kalkulacyjnych). Zamiast tego można zapisać wersję skryptu (Pliki> Zarządzaj wersjami ...), aby utworzyć bibliotekę. Następnie zaimportuj tę bibliotekę do innych arkuszy kalkulacyjnych (Zasoby> Zarządzaj bibliotekami ...). Włącz "tryb programowania", aby każda wprowadzona zmiana od razu wpłynęła na działanie arkuszy kalkulacyjnych przy użyciu tej biblioteki. W przeciwnym razie będziesz musiał zapisać nową wersję biblioteki dla każdej zmiany i ręcznie zaktualizować numer wersji biblioteki we wszystkich arkuszach kalkulacyjnych, które z niej korzystają.

Problem polega na tym, trzeba napisać skrypt w każdych arkuszy kalkulacyjnych przy użyciu biblioteki z funkcjami szkielet tak:

function doSomething(){ 
    myLibrary.doSomething(); 
} 
+0

Wygląda na to, że łatwiej jest po prostu skopiować i wkleić skrypt do nowego arkusza kalkulacyjnego ... –

+2

Tak, kod wklejania kopii wydaje się łatwiejszy niż tworzenie funkcji we współużytkowanej bibliotece ... dopóki nie będziesz musiał zmienić czegoś w swoim kodzie:) – antoine

+0

Właściwie właśnie odwróciłem, jak robię różne rzeczy. Mam teraz plik szkieletu ze skryptem i właśnie wklejam arkusze do pliku szkieletu. Skrypt robi swoją rzecz i usuwa arkusz. Więc teraz, jeśli muszę zmodyfikować kod, wszystko jest w tym samym miejscu. Na szczęście w moim przypadku nie muszę się martwić setkami przeszłych plików, na których już uruchomiłem skrypt. –

1

Nie można w ten sposób, że myślisz . Przynajmniej jeszcze nie (patrz issue 40).

Ale, w zależności od użycia skryptu, możesz połączyć je "na swój sposób" lub nawet lepiej, użyj tylko jednego skryptu. Skrypt w głównym arkuszu kalkulacyjnym może otworzyć inne pliki arkusza kalkulacyjnego i wykonać jego zadanie "zdalnie". Nie jest wymagane, aby skrypt był hostowany w arkuszu kalkulacyjnym, aby z nim współdziałać (odczyt/zapis na nim). Potrzebujesz tylko skryptu hostowanego w arkuszu kalkulacyjnym, jeśli zamierzasz używać wyzwalaczy zdarzeń arkusza kalkulacyjnego, np. Otwierania, edycji i przesyłania formularzy.

Być może możesz stworzyć ładny interfejs dla skryptu na arkuszu wzorcowym i opublikować go jako usługę. Wystarczy mieć link na kopiach, aby uzyskać dostęp do tego samego interfejsu użytkownika na innej karcie przeglądarki. Dodając parametry do linku, interfejs skryptu może nawet dostosować się do konkretnego arkusza kalkulacyjnego, który "uruchamia" go.

Cóż, to wszystko, co mogę sobie teraz wyobrazić. Ale, niestety, jest kilka przypadków użycia, które po prostu nie pasują do tego miłego "obejścia". Dla tych, można tylko gwiazdę issue 40 (do rodzaju głosowania i śledzić aktualizacje) i mam nadzieję, że wkrótce się rozwinie.

+0

Thanx, może muszę wyjaśnić ustawienie. Każda kopia ma zdarzenie onEdit i kilka przycisków, które wykonują coś (głównie zakresy kopiowania) dla danego arkusza kalkulacyjnego. Zauważyłem, że muszę zaktualizować część skryptu, jak to zrobić z jednego miejsca do wielu kopii (mam listę wszystkich kluczy w danym arkuszu kalkulacyjnym). –

+0

Nie można tego zrobić automatycznie teraz. Musisz ręcznie otworzyć każdy skrypt, wkleić nowy kod i zapisać. Jest kilka obejść za pomocą UrlFetch, aby zdalnie pobrać kod i 'eval', które mogą Ci odpowiadać, są opisane w komentarzu 40 problemu. –

+0

Problem 40 jest stały i zamknięty. –

0

Rozwiązanie umieścić w miejscu w tym kontekście było mieć witrynę Google, gdzie Script Mistrz jest osadzony, a gdzie kalkulacyjny jest osadzony zbyt

Następnie skrypt, odnosząc się do specjalnego arkusza kalkulacyjnego, wygląd dla nazwy strony internetowej Google wyszukuje w arkuszu kalkulacyjnym Master i pobiera identyfikator arkusza kalkulacyjnego, który jest osadzony na stronie.

0

Rozwiązałem ten problem, używając skryptu, który automatycznie generuje arkusze kalkulacyjne.

Zazwyczaj dodam arkusz do dowolnego arkusza kalkulacyjnego ze skryptem o nazwie "Informacje". Użyję tego do przechowywania informacji, które są ważne dla skryptu. W moim skrypcie, który automatycznie generuje więcej arkuszy kalkulacyjnych, śledzę identyfikator utworzonego arkusza. W ten sposób mogę szybko wywołać wszystkie "połączone" arkusze i wchodzić z nimi w interakcje przy użyciu tego samego skryptu. Może nawet warto napisać scenariusz w jednym arkuszu i zachować go całkowicie oddzielony od arkusza głównego lub jego dzieci.

Spójrz na tę funkcję, może dać ci kilka pomysłów.

SpreadsheetApp.openById(id)

Powiązane problemy