Pełna dokumentacja referencyjna dla formuł Arkuszy kalkulacyjnych Google?

21

Jako programista czuję się trochę sfrustrowany, gdy próbuję korzystać z Arkuszy kalkulacyjnych Google, ponieważ wydaje się, że nie ma definitywnego opisu składni, której można użyć do formuł. Na przykład przeczytałem, że mogę użyć F3:Fodniesienia do Fkolumny z wiersza 3 w dół, ale nie mogę znaleźć, gdzie to wspomina, w dokumentacji referencyjnej Google i nie zawsze wydaje się to działać. Prawdopodobnie robię to źle, ale o to właśnie chodzi w tym pytaniu.

Nie chcę przeszukiwać pięciu różnych samouczków, aby odgadnąć zasady! Czy jest gdzieś dostępny zwięzły opis gramatyki i semantyki? Jeśli nie, być może ktoś mógłby to tutaj streścić.

Rog
źródło
docs.google.com/support/bin/… Nie wiem, czy to w ogóle pomoże (i dlatego jest to komentarz :))
Matt
1
dzięki, to przydatna część obrazu, ale dlaczego nie mogą udokumentować całości ?!
rog
Nie ma problemu, nie mam pojęcia, dlaczego tak się nie dzieje, ale jest dość podobny do execla i jest tylko kilka zmian składni. Jeśli kiedykolwiek utknąłeś, zawsze możesz zapytać tutaj :)
Matt

Odpowiedzi:

11

To jest fragment tekstu stąd . Zamieściłem go tutaj jako słomianego człowieka. Jeśli ktoś, kto wie, czym to się różni od formuł w Arkuszach kalkulacyjnych Google, może skomentować, być może możemy uzyskać dobrą odpowiedź.

Formuły

Formuły umożliwiają wykonywanie obliczeń w komórkach tabeli. Każda formuła MUSI zaczynać się od prefiksu przestrzeni nazw określającej składnię i semantykę używaną w formule. Gdy nie ma przedrostka, używana jest domyślna składnia formuły i semantyka, jak opisano poniżej. Następnie następuje znak równości, a następnie sama formuła. Implementacje MOGĄ akceptować wiele składni formuł i MOGĄ akceptować różne rozszerzenia domyślnej składni formuł. Jednak wszystkie implementacje, które akceptują formuły MUSZĄ zaakceptować domyślną składnię formuły i semantykę, jak opisano tutaj. MOGĄ również zaakceptować rozszerzenia do niego.

Dokument implementujący ścisły schemat NIE MOŻE używać przedrostka przestrzeni nazw formuły (ponieważ nie ma gwarancji, że inne systemy odbierające będą w stanie go przetworzyć) i NIE MOŻE używać żadnych rozszerzeń semantyki i składni opisanych poniżej .: W formule domyślnej składnia, po początkowym znaku równości formuła musi być wyrażeniem. Wyrażenie może być liczbą, ciągiem ciągłym, nazwanym zakresem, parą wyrażeń połączonych operatorem binarnym, wyrażeniem poprzedzonym operatorem jednoargumentowym, operatorem logicznym, wywołaniem funkcji, adresem komórki lub wyrażeniem otoczonym przez zdanie wtrącone. Wywołanie funkcji i operator logiczny mogą mieć zero lub więcej parametrów oddzielonych średnikiem, a każdy parametr MUSI być wyrażeniem. Składnia każdego z nich jest następująca:

  • Liczby. Liczby są zapisywane i odczytywane w tym formacie przy użyciu ustawień regionalnych „C” (przy użyciu separatora dziesiętnego „.” I bez separatora tysięcy), przy użyciu setlocale (LC_NUMERIC, „C”) lub równoważnego. Liczby mogą kończyć się w%, który dzieli tę liczbę przez 100. „%” nie zmienia znaczenia innych operatorów, więc 2 + 10% to 2.1 (nie 2.2). Zauważ, że znaki wiodące - i + są dozwolone jako jednoargumentowe operatory, opisane poniżej. Pisarze MUSZĄ pisać liczby pasujące do wzorca (zwróć uwagę, że musi zaczynać się cyfrą): [0-9] + (. [0-9] +)? ([EE] [+ -]? [0-9] + )?%? Czytelnicy MUSZĄ być w stanie odczytać te liczby, a także zaakceptować liczby rozpoczynające się od wiodącego „.”, Dlatego muszą być w stanie odczytać liczby w postaci: ((. [0-9] +) | ([0- 9] + (. [0-9] +)? ([EE] [+ -]? [0-9] +)?))%? Stałe ciągi .. Stałe ciągi są otoczone podwójnymi cudzysłowami; wstawić podwójny cytat, znak podwójnego cudzysłowu jest używany dwukrotnie. Ciągi są przechowywane w formacie UTF-8. Zauważ, że ponieważ cała treść jest przechowywana jako XML, wszystkie cudzysłowy w formule są w rzeczywistości przechowywane jako „w XML. Ciągi ciągłe pasują do wzorca: \" ([^ "] | \" \ ") * \"

  • Nazwane zakresy / pola. Nazwane zakresy / pola odnoszą się do oddzielnej zdefiniowanej wartości lub zestawu wartości (w arkuszu kalkulacyjnym, zwykle odnoszącym się do adresu komórki lub zestawu adresów). W nazwach nie rozróżniana jest wielkość liter, więc „a” i „A” odnoszą się do tego samego zakresu. Implementacje muszą akceptować co najmniej nazwane zakresy pasujące do następującego wzorca: [A-Za-z] [A-Za-z0-9 _] *

  • Operatorzy Akceptowane są zwykłe operatory przedrostków i przedrostków. Mają one następujące skojarzenie i pierwszeństwo (od najniższego do najwyższego priorytetu):

Komentarze operatora
left <, =,>, <=,> =, <> Mniej niż, równy, większy niż,
                                     mniejsza lub równa, większa lub równa,
                                     nie równy.
left +, -, & Add, odejmuj, konkatenacja ciągów. Zauważ, że
                                     unary (przedrostek) + i - ma inny priorytet.
left *, / Multiply, divide. Podział nie jest obcinany, więc
                                     1/2 równa się 0,5.
prawo ^ Moc (2 ^ 3 to 8). Czytelnicy POWINNI także zaakceptować „**”.
none +, - Prefiks jednoargumentowy, np. -5 lub - [. A1].
                                     Zauważ, że mają one pierwszeństwo przed różnicami
                                     dodawać i odejmować.

Pierwszeństwo można zastąpić nawiasami, więc „= 2 + 3 * 4” oblicza 14, a „= (2 + 3) * 4” oblicza 20. Zauważ, że +, -, *, /, ^ konwertuje dowolny ciąg lub wartości binarne używają liczb przed obliczeniem; zauważ, że & (konkatenacja łańcuchów) konwertuje dowolne wartości na łańcuchy przed ich konkatenacją. Operatory logiczne. Operatory logiczne mają tę samą składnię, co wywołania funkcji; ich nazwy nie rozróżniają wielkości liter, parametry są oddzielone średnikami, a po ich nazwie MUSZĄ następować nawiasy. Operatory logiczne to:


Operator Liczba parametrów Komentarz
TRUE () 0 Jest to stała boolowska, choć jej składnia sprawia, że ​​wygląda jak funkcja
FALSE () 0 Jest to stała logiczna
NOT (wyrażenie) 1 Jeśli wyrażenie ma wartość PRAWDA (), zwraca FAŁSZ (), w przeciwnym razie zwraca PRAWDA ()
ORAZ (e1; e2 [; e] *) 2 lub więcej Jeśli wszystkie wyrażenia są PRAWDA () zwraca PRAWDA (), w przeciwnym razie zwraca FAŁSZ ()
LUB (e1; e2 [; e] *) 2 lub więcej Jeśli wszystkie wyrażenia są FAŁSZ () zwraca FAŁSZ (), w przeciwnym razie zwraca PRAWDA ()
JEŻELI (warunek; true_exp; false_exp)
                   3 Ocenia stan. Jeśli to prawda, zwróć true_exp, w przeciwnym razie zwróć false_exp

Implementacje AND (), OR () i IF () muszą powodować zwarcie, to znaczy muszą kolejno oceniać od lewej do prawej i tylko wyrażenia, które muszą oceniać, aby obliczyć wynik. Implementacja może zdecydować się ocenić więcej, ale tylko wtedy, gdy wyrażenia nie mają skutków ubocznych. Implementacje AND () i OR () MUSZĄ zaakceptować dowolną liczbę parametrów, ale MUSZĄ zaakceptować co najmniej 30 przy każdym użyciu. Operacje NOT (), AND () i OR (), a także warunek w IF (), są przeznaczone dla wartości boolowskich; jeśli używane są wyrażenia innych typów, implementacja NIE POWINNA uważać 0 za fałsz, a żadnej innej wartości liczbowej za true, i NIE POWINNA traktować ciągu o zerowej długości jako fałszu, a żadnej innej wartości ciągu jako true. Jeśli dla wyrażenia obliczana jest wartość błędu, ten pierwszy błąd jest wynikiem operacji logicznej.


Wywołania funkcji.Wywołanie funkcji ma nazwę funkcji pasującą do wzorca [A-za-z] [A-Za-z0-9 _] *, po której następuje nawias otwierający, zero lub więcej parametrów i nawias zamykający. Parametry są oddzielone średnikiem (nie przecinkiem), chociaż czytniki MOGĄ opcjonalnie akceptować wywołania funkcji, używając przecinków jako separatorów. Nazwy funkcji nie uwzględniają wielkości liter, więc „sum” i „SUM” są tą samą funkcją. Jeśli istnieją parametry, każdy musi być wyrażeniem i żaden nie może być pusty, więc X (;) nie jest wywołaniem funkcji prawnej, a RAND () jest całkowicie legalne. Jeśli parametr jest opcjonalny, MOŻE zostać pominięty, ale jeśli go pominięto, MUSI zostać pominięty (specyfikacje funkcji powinny określać, które parametry są opcjonalne i co oznacza ich pominięcie). Typowe implementacje będą miały wiele wbudowanych funkcji, a większość implementacji obsługuje również jeden lub więcej sposobów tworzenia funkcji zdefiniowanych przez użytkownika. Do typowych funkcji należą:

  • SUMA ( lista ) - sumuje wszystkie liczby w zakresie (zakresach) listy .
  • COUNT ( lista ) - zlicza liczbę liczb w zakresie (zakresach) listy
  • ŚREDNIA ( lista ) - Oblicza średnią równą SUMIE ( lista ) / COUNT ( lista )
  • MIN ( lista ) - minimalna wartość liczbowa listy
  • MAX ( lista ) - maksymalna wartość listy
  • ZAOKR ( n , liczyć ) - rundy n aby liczyć cyfr (jeśli liczba pominięty liczyć = 0)
  • INT ( n ) - zaokrąglij n w dół do najbliższej liczby całkowitej.
  • ISEVEN ( n ) - zwraca PRAWDA (), jeśli n jest parzyste, w przeciwnym razie zwraca FAŁSZ ().
  • Zastępca ( tekst ; searchtext ; newText ; wystąpienie ) - substytuty newText dla searchtext w tekście , występowania liczbę razy (jeśli wystąpienie pominięty, cały czas).

Adresy komórek zawierających liczby . Adresy mogą być względne lub bezwzględne. Adres względny składa się z litery kolumny i numeru wiersza. Prefiks litery wiersza lub numeru kolumny znakiem a $powoduje, że wiersz lub kolumna są bezwzględne.

Białe znaki (spacja, tabulator, znak nowej linii i znak powrotu karetki) są ignorowane w domyślnej składni formuł, z wyjątkiem zawartości stałych łańcuchowych i jako separatora wielu adresów zakresu komórek na liście adresów zakresu komórek.

Interfejsy użytkownika wdrożeń MOGĄ decydować się na przyjmowanie i wyświetlanie formuł inaczej niż sposób ich wymiany w tym formacie danych. Na przykład MOGĄ akceptować i wyświetlać liczby przy użyciu formatu bieżących ustawień regionalnych, MOGĄ zawsze używać określonego ustawienia narodowego dla formatów numerycznych, MOGĄ używać przecinków zamiast średników dla separatorów parametrów oraz MOGĄ akceptować i wyświetlać adresy komórek bez wymagania stosowanie nawiasów kwadratowych. Ale interfejsy użytkownika implementacji MUSZĄ akceptować domyślny format jako dane wejściowe, tam gdzie to możliwe, np. Implementacje MUSZĄ akceptować liczby, które spełniają wymagania ustawień regionalnych „C” (jak również bieżące ustawienia regionalne), i POWINNY akceptować adresy komórek w nawiasach kwadratowych. Ponadto interfejsy użytkownika implementacji POWINNY poprawić ewentualne błędy, być może za pomocą dialogu. Na przykład,

Oto przykład prostej formuły:

=sum(A1:A5)

Ta formuła oblicza sumę wartości wszystkich komórek w zakresie „.A1: .A5”. Funkcja to „suma”. Parametry są oznaczone „(„ na początku i „)” na końcu. Jeśli funkcja zawiera więcej niż jeden parametr, parametry są oddzielone znakiem „;”. Poniżej przedstawiono odmianę powyższego wzoru:

=sum(A1;A2;A3;A4;A5)

Wynik tej formuły jest taki sam. Składniki używane w formule zależą od używanej aplikacji.

Rog
źródło
Świetna odpowiedź, @rog. Czy masz pojęcie, dlaczego dokumentacja funkcji Google używa przecinków zamiast średników do oddzielania parametrów? Nie działają w żadnym z moich testów.
Jpsy
@Jpsy: Separator parametrów zależy od ustawień arkusza kalkulacyjnego. Średnik jest używany, gdy przecinek jest separatorem dziesiętnym.
Rubén
„Implementacje AND (), OR () i IF () muszą powodować zwarcie” --- niestety nie dostaję tego w Arkuszach Google w momencie pisania tego tekstu. Próbowałem „ORAZ (FAŁSZ, wyrażenie z niedopasowaniem typu)” i zamiast zignorować drugą część, wynik jest błędem z drugiego operandu. Na szczęście istnieje obejście problemu z stackoverflow: stackoverflow.com/a/16926642/2184166
ob-ivan
6

Po przeszukaniu trochę więcej, znalazłem to

  1. Formuły arkuszy kalkulacyjnych Google implementują de facto standard zgodny z Microsoft Excel i innymi.
  2. Standard wydaje się nigdy nie został poprawnie zdefiniowany .

Najbardziej wyczerpującą definicję znalazłem w tym starym poście z listą mailową: http://lists.oasis-open.org/archives/office-comment/200411/msg00000.html , który zawiera gramatykę yacc, tokenizator lex, i krótki opis semantyki.

Nie jest jasne, jak ściśle odpowiada to implementacji Arkusza kalkulacyjnego Google - kilka przykładów nie działa w Arkuszach kalkulacyjnych Google.

To wygląda na przykro. Wszelkie postępy w zakresie tych informacji byłyby bardzo mile widziane.

Rog
źródło
Od powyższego postu nastąpił duży postęp. Odnośnie OpenDocument, zobacz ogłoszenia na oasis-open.org/committees/tc_home.php?wg_abbrev=office
Rubén
-2

https://repository.tudelft.nl/islandora/object/uuid:d9d802af-9ebf-4524-9dbc-e7657d67921e/datastream/OBJ/download

Praca magisterska Davida Hoepelmana „wspomaganie refaktoryzacji arkuszy kalkulacyjnych i formułowanie arkuszy kalkulacyjnych” (Delft University of Technology) jest zdecydowanie najlepszym opisem składni formuły arkusza kalkulacyjnego, jaką widziałem. BNF, walidacja empiryczna i wszystkie ozdoby. Jednak wystarczająco prosty, aby być dobrym przewodnikiem dla ręcznie kodowanych projektów. XLParser to towarzyszący projekt GitHub, o którym mowa w pracy.

Niestety, nie dotyczy to arkuszy Excela, ale w takim stopniu, w jakim formuły arkuszy są zgodne z programem Excel, jest to świetne miejsce na rozpoczęcie.

Humbertcopperfield
źródło