JP2023533122A - ユーザ向けのスプレッドシートプログラミング言語 - Google Patents
ユーザ向けのスプレッドシートプログラミング言語 Download PDFInfo
- Publication number
- JP2023533122A JP2023533122A JP2022569176A JP2022569176A JP2023533122A JP 2023533122 A JP2023533122 A JP 2023533122A JP 2022569176 A JP2022569176 A JP 2022569176A JP 2022569176 A JP2022569176 A JP 2022569176A JP 2023533122 A JP2023533122 A JP 2023533122A
- Authority
- JP
- Japan
- Prior art keywords
- spreadsheet
- cells
- twit
- cell
- user
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 45
- 230000004044 response Effects 0.000 claims abstract description 30
- 230000009471 action Effects 0.000 claims description 23
- 230000004888 barrier function Effects 0.000 claims description 21
- 230000014509 gene expression Effects 0.000 claims description 18
- 230000000977 initiatory effect Effects 0.000 claims 3
- 230000002452 interceptive effect Effects 0.000 claims 2
- 238000009877 rendering Methods 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 37
- 230000006870 function Effects 0.000 description 20
- 238000006467 substitution reaction Methods 0.000 description 12
- 238000005516 engineering process Methods 0.000 description 7
- 230000000007 visual effect Effects 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 6
- 230000006399 behavior Effects 0.000 description 4
- 238000001514 detection method Methods 0.000 description 4
- 101100108191 Vibrio parahaemolyticus serotype O3:K6 (strain RIMD 2210633) add gene Proteins 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 3
- 230000008676 import Effects 0.000 description 3
- 241000251730 Chondrichthyes Species 0.000 description 2
- 230000007812 deficiency Effects 0.000 description 2
- 235000020021 gose Nutrition 0.000 description 2
- 230000029305 taxis Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000033001 locomotion Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000011867 re-evaluation Methods 0.000 description 1
- 235000011888 snacks Nutrition 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
- G06F40/177—Editing, e.g. inserting or deleting of tables; using ruled lines
- G06F40/18—Editing, e.g. inserting or deleting of tables; using ruled lines of spreadsheets
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Artificial Intelligence (AREA)
- Computing Systems (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Stored Programmes (AREA)
- Document Processing Apparatus (AREA)
Abstract
スプレッドシート及びスプレッドシートをプログラミングするための方法が提供される。一態様によれば、スプレッドシートは、二次元アレイに配置された複数のセルを含む。複数のセルのうちの1つ以上は、変数の複数の値に対応するデータのための複数の隣接する変数値セルを含む。複数の隣接する変数値セルは、複数の隣接する変数値セルのセル範囲の開始と終了を示すセル値のペアによってユーザ定義される。また、複数のセルは、変数の複数の値によって定義される変数範囲を含む式に応答して、その中に定義された式を有するセルからデータが流入することができるスピルエリアを含む。スピルエリアは、変数の複数の値に対応する複数の表現ソリューションに自動的にサイズ調整される。【選択図】図1
Description
(優先権の主張)
本出願は、2020年5月29日に出願されたシンガポール特許出願第一0202005091R号からの優先権を主張する。
本出願は、2020年5月29日に出願されたシンガポール特許出願第一0202005091R号からの優先権を主張する。
本発明は、一般に、コンピュータのスプレッドシートシステムに関し、より具体的には、ユーザ向けのスプレッドシートプログラミング言語のための方法及びシステムに関する。
C、C++、Java(登録商標)、Python(登録商標)等、プロのプログラマによって使用される現在の主流言語の多くは、プレーンテキストの線形フローに基づいている。これらの言語の中心的な目標は、機能性がゼロから構築されるのではなく、むしろ既存のライブラリ(通常は関数とクラス(class)の形で)から組み立てられるレゴ(登録商標)のような方法でアプリケーション構築を可能にすることである。異なるライブラリを共存して、連携させることができ、プログラマの主な仕事は、これらのロジックブロックをカスタマイズし、オーケストレーションするだけである。今日の言語は、非常に用途が広いことが判明しており、この目標をほぼ達成している。しかしながら、残念なことに、大多数の非プログラマにとっては抽象的すぎることが判明し、プログラマと非プログラマの間に大きな乖離が生じ、非プログラマが単なる技術の受動的消費者に成り下がっている。
キャズム(chasm)の反対側にはスプレッドシートがあり、これはプレーンテキストではなく、二次元(2D)グリッド構造に基づいている。Microsoft Excel(登録商標)やGoogle(登録商標)Sheetのようなスプレッドシートシステムは、実用的にアクセス可能な唯一のシステムの一部であり、そこで、非プログラマのユーザがコンピュータによる実行のために自明ではないロジックを表現できる。しかしながら、開発環境として見た場合、関数とクラスの形でコードを再利用する機能、ユニットテスト機能、第三者スプレッドシートのインポート機能等、主流のプログラミング言語で必須と見なされる基本的な機能がスプレッドシートには備わっていない。そのため、実際のスプレッドシートは、大量の重複コード及びバグが見つかることが多く、要件が複雑になると、すぐにスプレッドシートが管理できなくなる環境に陥ってしまう。さらに、スプレッドシートからより技術的に健全なソリューションへのアップグレードパスがない。ユーザは、より複雑な機能を構築するためにVBA(Visual Basics for Applications)プログラマに頼る(ここでは、VBAが従来のプレーンテキストベースの言語である)か、非常に頻繁に、単にスプレッドシートを捨て、主流な言語でロジックを完全に再実装している。
したがって、従来のスプレッドシート対応プログラミングの欠点を克服し、簡単で融通の利く多用途で下位互換性のあるスプレッドシートに適したソリューションを提供する、堅牢なユーザ向けスプレッドシートプログラミング言語が必要とされている。さらに、他の望ましい特徴及び特性は、添付の図面及び本開示の背景と合わせて考慮される、以下の詳細な説明及び添付の特許請求の範囲から明らかになるであろう。
本実施形態の少なくとも1つの態様によれば、スプレッドシートプログラミングするための方法が提供される。本方法は、スプレッドシートのセルにラベルを割り当てるステップを含み、前記ラベルのそれぞれは、変数の複数の値に対応するデータのための複数の隣接する変数値セルのうちの1つに割り当てられる。前記複数の隣接する変数値セルは、複数の隣接する変数値セルのセル範囲の開始及び終了を示すラベルのペアによってユーザ定義される。本方法は、定義された式を有するセルから、変数の複数の値によって定義される変数範囲を含む式に応答して、データが流れ込むことができるスピルエリアを定義するステップさらに含む。前記スピルエリアは、前記変数の複数の値に対応する複数の式解に自動的にサイズ調整される。
本実施形態の別の態様によれば、スプレッドシートプログラミングのための追加の方法が提供される。本方法は、関数呼び出し及び/又はリモートコールバックを含むスプレッドシート内のセルのセル値に応答して、別のアイテムをスプレッドシートに置換するステップを含む。
本実施形態のさらなる態様によれば、スプレッドシートが提供される。スプレッドシートは、二次元アレイに配置された複数のセルを含む。複数のセルのうちの1つ以上は、スプレッドシート内の別のアイテムを置換するためのセル値を含み、セル値は関数呼び出し及び/又はリモートコールバックを含む。
本実施形態の追加の態様によれば、スプレッドシートが提供される。スプレッドシートは、二次元アレイに配置された複数のセルを含む。複数のセルのうちの1つ以上は、変数の複数の値に対応するデータのための複数の隣接する変数値セルを含む。複数の隣接する変数値セルは、複数の隣接する変数値セルのセル範囲の開始及び終了を示すセル値のペアによってユーザ定義される。複数のセルは、また、変数の複数の値によって定義される変数範囲を含む式に応答して、定義された式を有するセルからデータが流入できるスピルエリアを含む。スピルエリアは、変数の複数の値に対応する複数の式解に自動的にサイズ調整される。
本実施形態のさらに別の態様によれば、動的ウェブサイトのプレゼンテーションのための方法が提供される。本方法は、単一のスプレッドシート文書に応答して動的ウェブサイトのプレゼンテーションを生成するステップを含み、単一のスプレッドシート文書は、データ及びビジネスロジックを含み、動的ウェブサイトのプレゼンテーションのための方法は、単一のスプレッドシート文書のデータ及びビジネスロジックに応答して生成される。
本実施形態のさらに追加の態様によれば、スプレッドシートが提供される。スプレッドシートは、二次元アレイに配置された複数のセルを含む。複数のセルのうちの1つ以上は、非エラー値及び非偽値に評価するように設計されたユーザ指定制約を含む。
本実施形態のさらに別の態様によれば、スプレッドシートプログラミングの方法が提供される。本方法は、非エラー値及び非偽値を評価するように設計された制約を含むように、スプレッドシートの1つ以上のセルをユーザ指定するステップを含む。本方法は、スプレッドシートの1つ以上のセルの少なくとも1つに対してアクションを実行するステップと、制約の少なくとも1つが失敗する原因となったアクションに応答して、アクションを拒否するステップと、制約の少なくとも1つが失敗する原因となったアクションに応答して、スプレッドシートをアクションが実行される前の状態に復元するステップと、を含む。
本実施形態のさらなる態様によれば、スプレッドシートのセルの任意のブロック内の値の検索を加速する方法が提供される。本方法は、空間インデックスを利用するステップと、可能なセル値の全順序を定義するステップと、を含む。
本実施形態の最後の態様によれば、スプレッドシートが提供される。スプレッドシートは、複数の行と複数の列によって定義される二次元アレイに配置された複数のセルを含む。複数の行のそれぞれは、ビグナム(bignum)行番号によって識別され、複数の列のそれぞれは、ビグナム列番号によって識別される。各ビグナム行番号及び各ビグナム列番号は、その二進表現において任意の高い有限精度が可能な数を含む。
同様の参照数字が別々の図を通して同一又は機能的に類似の要素を示し、以下の詳細な説明と共に本明細書に組み込まれ、その一部を構成する添付の図は、様々な実施形態を例示し、これらの実施形態に従って様々な原理及び利点を説明するのに役立つ。
当業者なら、図中の要素が単純化して、明確化するために図示されており、必ずしも縮尺通りに描かれていないことを理解するであろう。
以下の詳細な説明は、本質的に単なる例示であり、本発明又は本発明の適用及び用途を限定することを意図していない。さらに、本発明に先行する背景技術、又は以下の詳細な説明で提示されるいかなる理論にも拘束されることを意図していない。本実施形態の意図は、ユーザ向けのスプレッドシートベースのプログラミング言語を提示することであり、そのことによって、ユーザが、二次元(2D)スプレッドシートの制約の中に完全に留まりながら、ロジックブロックを構築、テスト、再利用し、動的ウェブサイトを構築し、大規模な共有スプレッドシートを構築することが可能になる。さらに、その意図は、2Dスプレッドシートを今日の汎用プログラミング言語と対等の立場に置くことである。
多くのビジュアル言語が、汎用プログラミングを大衆にもたらすことを追求して発明されたが、画面上で小さな図形をドラッグすることは、表現力が非常に限られており、あまりにも面倒であることが判明してきた。いくつかのビジュアル言語は、信号処理用のMATLAB(登録商標) Simulink、及びゲームプレイ要素をスクリプト化するUnrealゲームエンジンのBlueprints等、グラフィック表現にうまく対応するニッチな分野で生き残っているが、そのいずれも、汎用のプログラミング環境として実行可能だと考えられていない。
セルの二次元配列を有する2Dスプレッドシートの視覚環境に戻って参照すると、今日の従来のスプレッドシートでは、1つのセルに対する式を定義することは、かなり簡単である。セルは、その座標によって、例えば、A1等によって、又はラベルを割り当てることによって、参照することができる。この実施形態によれば、ラベルを割り当てる方法は、専らセルの参照に利用される。
従来のスプレッドシートでは、エリアを埋めることは、基本的に式のコピーとペーストに依存している。行が途中に挿入されたとき、又は式の1つがユーザによって変更されたときに、セルがどのように動作すべきかは、決定が困難である。新しい行3665aは、現在のパターンで自動的に埋められるべきか。同じ式の変更が、そこからペーストされたセルに適用されるべきか?この曖昧さはそれ自体危険であるが、より重要なことは、この曖昧さが、スプレッドシートのロジックを確実に再利用しようとする努力を妨害することである。
現在のスプレッドシートシステムの中には、この問題を軽減するために配列式を有するものがある。しかしながら、ユーザは、式を適用するためにセルの範囲を明示的に指定しなければならず、入力範囲のサイズが変わったときに何が起こるかは、まだ明確ではない。このコピーされたロジックの脆弱性及び他の従来のスプレッドシートの問題を認識して、現在ある従来のスプレッドシートプログラムの欠点を克服するために、本実施形態による複数のスプレッドシートプログラミングルールを定義する。
本実施形態の第一の態様によれば、スプレッドシートにおけるセルの範囲の堅牢で有利な自動充填のために、セルスピルエリアが定義される。図1を参照すると、図解100は、本実施形態による例示的なスプレッドシート105におけるスプレッドシートスピルを示す。ユーザは、サイズを指定することなく、エリア130の左上のセル120に、単一の式110を定義するだけである。ヘッド120は、式110を必ずしも単一の値に評価するわけではないが、本実施形態によれば、式110を値の矩形表に評価することができる。そして、値は、必要に応じて、式を有するセルの右側及び下側のセルにスピルする。スピルエリア内のいずれかのセルが既に設定された値を有するか、又は別のセルからもスピルされる場合、スピル競合が本明細書で論じるように報告される。
式110において、#billing_rateは、billing_rate:Zbilling_rateの省略形変数であり、ラベルbilling_rateのセルからラベルZbilling_rateのセルまでの隣接する変数値セルの矩形エリアを示すユーザ定義のラベルのペアであり、変数#billing_rateの複数の値に対応するデータ100\\150\\60を含んでいる。同様に、#hoursは、hoursからZhoursまでの隣接する変数値セルの矩形エリアを示す。例示的なスプレッドシート105では、セル120の式110 #billing_rate*#hoursは、2つの表、エリア132に対する100\\150\\60とエリア134に対する10\\2\\10を掛け合わせて、3行1列の表1000\\300\\600を生成する。この表はセル120自体に収まらないので、下の2つのセルにスピルし、セル120のスピルエリア130を生成する。続いて、式150において、シート105で定義された明示的なラベルZamountを用いずに、#amountは、セル120amountのこのスピルエリア130を示し、これは、セルamountそのものも含む。このようにして、セル140の式Sum(#amount)150全体は、セル120amountのスピルエリア130の総和を計算し、1000+300+600=1900となる。
特に注目すべきは、スピルエリアが振動する問題である。次に図2A、図2B、図2C、及び図2Dを参照すると、図解200、220、240、260は、本実施形態に従った問題を例示するスプレッドシートを示している。図解200において、関数Zeros(a,a)205は、「2」に等しく設定されたセル215a内のaに応答して、ゼロで満たされたサイズa×aの表210を生成する。
ユーザが、スプレッドシート220のセル215bに示されるように、値aを「3」に変更すると、スプレッドシートは次に2つの状態の間で振動することになる。図解220(図2B)に示す状態1であって、左上のセル225aのスピルエリアを3x3に拡大し、セル215bにスピル競合を報告させ、それによって、セル225aの再評価を保留させた状態と、図解240(図2C)に示す状態2であって、左上のセル225bがエラー値を有し、したがって、自身を超えるスピルエリアを有さず、セル215cがスピル競合のない「3」という値を有する状態である。
振動するスピルエリアの問題に対処するために、また本実施形態の一態様によれば、スピルエリアルールは、スピルエリアが非縮小であること、すなわち、スピルエリアを後続のユーザ入力の前にのみ拡大することができると定義される。このスピルエリアルールに従って、左上セルのスピルエリアは、状態2においても3×3のスピルエリア265のままに留まり、その結果、図解260(図2D)に示す安定した最終状態となる。
本実施形態によれば、このスピルエリアルールは、有利には、新しいユーザ入力がない場合、常に定常的な最終状態をもたらすことになる。直感的には、互いに競合するスピルエリアのペアの数は、定義された式のペアによって上限が設定される。スピルエリアが縮小できない場合、そのような関係の数は、定常値に収束しなければならない。スピルエリア競合関係が安定すると、セル値は曖昧さなく計算されるか、さもなければ、セル値は依存ループの一部であり、容易に検出されてそのように報告され得る。
従来のスプレッドシートの別の問題は、別のスプレッドシートで定義されたロジックを再利用することが困難なことである。図3Aを参照すると、図解300は、個人のための仮想的な税額を計算するように定義されているシート310を示す。ロジックが明確に書き出されているにもかかわらず、従来のスプレッドシートは、シート310に定義されたロジックを別の個人の税金に適用する適切な方法を提供しない。収入(income)、子供の数(すなわち、nb_children)等の入力値が再定義され、したがって、現在計算された値が破壊されるか、又は、コードの複製は、プログラミングで通常強く推奨されないにもかかわらず、ロジックは別のシートに複製され、そこで適所で修正されなければならない。
従来のスプレッドシートにおけるこの欠陥を克服するために、置換ルールが本実施形態によって定義され、置換によるロジックの再利用をサポートする。図3Bを参照すると、図解330は、置換可能なセル342、344、346、348(Xで始まるそれらのラベル)が定義されたシート335を示している。シート335では、セル340は、税金を計算するためのロジックである税(Tax)の戻り(Return)値となるように定義することができる。例えば、コードは、tax(income=106000, nb_children=2, donations=1000\\2000\\3000)と記述することができ、別の仮想の人に対する税金を計算することができる。このコードは、図3Cに示すように、少し修正した税(tax)の置換シートを表しており、置換シートの#Returnの値を値としている。シート335の位置入力は、X0、X1のようなラベルが定義されていればサポートされる。
図3Cを参照すると、図解360は、コードtax(income=106000,nb_children=2,donations=1000\\2000\\3000)で表されるシート365を示す。シート365は、シート335のtaxからコピーされ、セルXincome 370がコード106000 372に、セルXnb_children 374がコード2 376に、セルXdonations 378がコード1000\\20000\\3000 380に、それぞれ置換されている。Xdonations:ZXdonationsの範囲にある他のセルのコードセットも削除され、すなわち、シート335のZXdonations=200が削除される。ラベルZXdonationsを削除することにより、有利には、コード1000\\20000\\3000 380で定義されるXdonationsの値は、その下のセルにうまくスピルすることができ、一方、#Xdonationsの意味は、十分に定義されたまま、ユーザの期待に適合する。
位置入力は、X0、X1のパターンのラベルを使用してサポートされる。例えば、コードtax(106000, 2, donations=1000\\2000)は、コード106000でX0、コード2でX1を置換し、名前付き入力Xdonationsを前述のように置換することになる。
上記で定義された置換の問題点は、入れ子置換である。図4A及び図4Bを参照すると図解400、430は、シート410 add、及び440 square_addを示す。square_add(20)を評価したい場合、曖昧さが生じる。square_add.X0に置換する必要があることには曖昧さがなく、これにより、square_add.Returnはadd(400)を要求する。さらに、シート410のaddでは、X0に400を置換すべきであることに曖昧さはないが、add.Returnでは、square_add.X0が何であるべきかは明確ではない。解釈は2つ考えられる。第一の解釈は,置換add(400)では、square_add.X0は置換されないので、square_add.X0は10であるべきであるというものである。この第一の解釈は単純置換と呼ばれ、置換回数が少ないので、パフォーマンスが高いが、多少驚くかもしれない。第二の解釈は、add(400)が置換square_add(20)の中で入れ子になっており、square_add.X0が20として置換されているので、square_add.X0は20であるべきであるというものである。この第二の解釈は、入れ子置換と呼ばれ、計算コストが高くなる。
両方の解釈にはその用途があるので、第二の解釈は、第一の解釈と異なるように区別して指定するために、二重括弧を使用して表記される。そこで、図4Cの図解460のシート470を参照すると、第二の解釈が望まれる場合、シートsquare_addのReturnセル475は二重括弧を使用して書かれる。
上記で定義された置換に関する別の問題は、通常、多くのセルが表で置換されることを意図していないことである。例えば、タックスシートは、置換nb_children=1\\3を念頭に置いて設計されておらず、好ましくは、エラーを発生させるべきである。したがって、本実施の形態によれば、置換値の形状は元の形状と一致する必要がある。xしたがって、本実施の形態によれば、置換値の形状は元の形状と一致する必要がある。すなわち、元のタックスシートの#Xnb_childrenは単一セルであるので、その置換値も単一セルでなければならない。同様に、#Xdonationsは元々列であるから、その置換も列でなければならない。単一セルは列の特殊なケースと考えられるので、ここでの置換も許容される。4つの形状、すなわち、単一セル、行(単一セルも可)、列(単一セルも可)、及び完全な表(前の3つの形状全てが可)は、区別される。この特徴では、tax(nb_children=1\\3)は、「Shape mismatch」というエラーが発生する。
本実施形態によるスプレッドシートが、従来のプログラミング言語における関数と類似の働きをすることが示された。同様に、スプレッドシートは、従来の関数のように、パラメータで部分的に拘束されることができる。シート名は、ラベルの値への置換の可能な空のセットと共に、本実施形態に従って、サンク(thunk)と呼ばれる。セルは、その値としてサンクを割り当てることができる。本実施形態のさらなる態様によれば、サンクは、関数の引数として渡すことができ、コールバック及び/又は高次関数を使用することができる。図5A及び図5Bを参照すると、図解500、520は、add1という名前のシート505、及び本実施形態に従ったコールバックのルールを例示するシート525を示す。シート525は、コールバックadd1を、組み込み関数であるマップ(Map)への呼び出しに渡す。
さらに、上記の例に加え、全てのNについてaddNを定義しなければならないのは非現実的であることに留意されたい。図5C及び図5Dを参照すると、図解540、560は、本実施形態による部分的に拘束されたサンクコールバックのためのルールを例示するシート545、565を示す。シート545がaddという名前の場合、式add{1}570は、シート545addの部分結合を表し、add1 505と機能的に等価なサンクを生成する。サンクは、さらに置換を取り、さらなるサンクを作ることもできる。一例として、以下:(a)add(1,2)、(b)#add{1,2}.Return、(c)add{1,2}()、(d)add{1}(2)、(e)add{1}{2}()は全て等価である。
本明細書で論じた単純置換対入れ子置換の区別()及び(())と同様に、サンク置換は、それぞれ{}及び{{}}で示されるように、単純か入れ子のいずれかにすることができる。
範囲置換が許可されているので、セルのブロックがどれほど離れて配置されても、全ての考えられるスピル競合を回避することはできない。スプレッドシート360(図3C)を参照すると、誰かが4つを超える寄付(donation)をした場合、Returnセルがスピル競合することになる。したがって、本実施形態に従って、スピルバリアのためのルールが定義される。図6A及び図6Bを参照すると、図解600、650は、本実施形態によるスピルバリアルールの操作を示す。図解600は、本実施形態に従って、スピルエリアに対する弾性限界を確立するために定義されたスピルバリア620を有するタックスシート640を示す。スピルはバリアを越えることができず、代わりに、バリアは、スピル値を含むために、必要に応じて弾性スピルエリアを作成する。弾性スピルエリア内のセルは、ユーザ定義のラベル又は式を有することができない。図解650の代替タックスシート660において、スピルバリア620は、さもなければ、スピル競合を引き起こすであろう追加の寄付値を収容するために、弾性スピルエリア内の行670のセルを自動的に作成することを可能にする。
図7を参照すると、図解700は、スプレッドシート710を示す。ユーザが、シートの全てのコンテンツを示す範囲を表現したいと仮定する。Xbilling_rateとXhoursはどちらも置換可能であり、それゆえ、任意の高さを有することができることに注目し、ユーザはラベル位置式を使用して、必要なロジックを正確に記述することができる。ラベル位置式とは、ラベルが参照する値ではなく、ラベルの座標を操作する式である。例としては、(a) Xbilling_rate^^1は、ラベルXbilling_rateの1行上のセルの座標を意味し、(b) Z(Xbilling_rate)は、セルXbilling_rateのスピルエリアの右下隅、すなわち、値60のセルを意味し、(c) BottomRight(Z(Xbilling_rate), last_remark)は、Z(Xbilling_rate)とlast_remarkの両方の下、又は右、又は右下にある最も左上のセル、すなわち、last_remarkの下の空のセルを意味する。これらの定義により、ユーザは、Xbilling_rateとXhoursをどのような値と置換しても、「シート上の全てのコンテンツ」という概念を、式Xbilling_rate^^1 : BottomRight(Z(Xbilling_rate), last_remark)でエレガントに表現できる。
スプレッドシートにスタイルを設定する通常の方法は、手動でエリアを選択し、次に適用するスタイルを選択することである。これは、スピル及び置換に直面すると破綻する。したがって、本実施形態に従って、ユーザは各シートに対して複数のスタイル領域を定義することができ、優先順位をランク付けできる。スピルエリアとは異なり、スタイル領域は重なり合うことができる。重なり合う領域のセルは、全てのカバー領域からスタイル指定子を蓄積する。指定されたスタイルが競合する場合は、より高い優先順位を有するものが有効になる。各スタイル指定子は、それ自体が2D表に評価される通常の式であり、領域全体を埋めるためにタイル化される。例えば、図8Bのシート835に対して、優先度の高いものから低いものへとランク付けされた、以下のスタイル領域を指定する。それは、(a) billing_rate^^1からamount^^1まで、スタイル“font-weight”&“bold”、(b) amountからZ(amount)まで、スタイル“font-size”&Where(#amount>500,“large”,“normal”)、及び (c) billing_rate^^1からZ(amount)まで、スタイル “background-color”&(“lightgray”\\“white”)\\“font-size”&“small”の順である。このスタイル定義は、図8Aの表800に評価され、第一の行805と第二の行810で背景色(background-color)をライトグレー(lightgray)と白(white)との間で交互に定義し、第三の行815でフォントサイズを小(small)と定義している。
図8Bを参照すると、図解830は、先に定義したスタイル定義(a)~(c)を組み込んだシート835を描いている。第二のルール(b)のフォントサイズ指定子は、表800の第三の行815のフォント色指定子より優先されることに留意されたい。
あるいは、ユーザは、toラベルを空のままにして、fromラベルから始まる3行2列の領域にスタイルを適用するために、スタイルに“span”&3&2を指定することも可能である。領域のスタイルは、一旦定義されると、プログラムによってアクセス可能である。例えば、Style(a,b)は、セルaからbまでの範囲のスタイルを取得する。図8Cを参照すると、表860は、Style(hours, Z(amount))がシート835に対してどのように評価されるかを示している。表860において、Style()コールは、行865“span”&3&2を自動的に生成することに留意されたい。これにより、Style(#source)を宛先セルに割り当てることによって、ある領域のスタイルを他の領域に容易にコピーすることができる。
セルが非常に広くなると、その下の意味的に無関係なセルが不快に広くなることを強いられる。図9Aを参照すると、図解900は、タイトル(title)セルの下に不快に広いセルを有する表905を示す。従来のスプレッドシートは、この問題を軽減するために、セルをマージすることを可能にしている。しかしながら、セルのマージは、厳密な2Dグリッドに違反し、スピル及びスタイル領域等の他の機能と調和させることが困難である。したがって、表内表(TWIT)のルールは、本実施形態に従って定義され、幅広い行と高い列とを分離する。
ユーザはTWITを指定することができ、そこでは領域がより大きな表(通常はシート全体の表)の内部のミニ表としてレンダリングされる。行の数、列の数、及び占有される総面積は保存されるが、個々の行の高さ及び列の幅は、それ以外に、セルのコンテンツに自由に適合させることができる。本実施形態によれば、シート905において、タイトルからタイトルまでのTWIT>>2を定義することができる。図9Bの図解910は、上記定義されたTWITを組み込んだシート915を示し、これによって、有利には、より良い視覚的外観が提供される。
TWITは入れ子にすることはできるが、交差することはできない。すなわち、2つのTWITは、完全に不連続であるか、一方が他方に完全に含まれているが、2つのTWITの境界は交差することができない。交差TWITは、交差する境界を有するTWITとして定義され、無視される。
シートの列は、整理しにくい。その理由は、従来のスプレッドシートは、全てのシートが一列に並んでいるため、階層がないからである。従来のスプレッドシートプログラムのこの欠陥を克服するために、本実施形態の別の態様に従って、スプレッドシートは階層化される。各シートは、シートがフォルダとファイルの両方として機能することを除いて、フォルダがファイルを含み、またさらにフォルダを含むことができるのと同様に、子シートを有することができる。本実施形態に従ってシートを階層化することには、階層がより論理的である以外に、いくつかの利点がある。例えば、スプレッドシート文書をウェブサイトとしてエクスポートする際に、階層をURLと容易にマッピングできる。さらに、シートに1つずつメタデータを割り当てるよりも、シートのグループにリード/ライトの許可等のメタデータを割り当てる方が容易である。また、階層は、本明細書で後述するように、クラスを定義するための基礎を形成する。
従来の主流のプログラミング言語のほとんどは、何らかの形でクラスをサポートしている。これは、第一近似では、データと関連する関数の束である。例えば、コールa.area()は、値aがどのクラスに属するかに応じて、異なるコードを実行する。本実施形態のさらなる態様によれば、スプレッドシート内のセルの値に応答して、動的に指定されたスプレッドシート参照をスプレッドシートに置換することができ、動的に指定されたスプレッドシート参照は、動的に指定されたディレクトリ参照と別のスプレッドシートのスプレッドシート名とが含まれる。したがって、クラスの挙動は、スプレッドシートのコンテキストで理解可能な動的ディレクトリ参照によってエミュレートされる。
表の第一の行が「Classs」&「reference-to-directory」であれば、その表は、前記ディレクトリのクラス(class)であると見なされる。キーワードクラスス(Classs)は、ランダムな表が正しいキーワードを持つ可能性を最小限にするために、意図的にスペルミスされているが、実際のキーワードの選択はこの発明の文脈では本質的でない。特殊な構文a->area()は、次に、コールdirectory.area(a)に変換される。式directory.areaは、動的ディレクトリ参照とシート名を含む動的シート参照である。一例として、図10A及び図10Bは、rectangle(矩形)クラスがどのように機能するかの図解1000,1050を示す。図解1000のcreate(作成)シート1010は、幅と高さを与えられたrectangleクラスの新しい表を作成する関数として機能し、図解1050の面積シート1060は、矩形の面積を計算する。これらの定義により、以下のようなコード:rectangle.create(width=3, height=3)->area()を適切に定義することができる。代わりに、circle.create(radius=3)->area()が代わりにcircle.areaというシートを呼び出す方法に留意されたい。構文#X0[“width”]は、与えられた表#X0の第一の列で文字列“width”を検索し、その右側の値を式の値として取ることを意味する。
第三者スプレッドシートをインポートすれば、他のユーザと関数及びクラスを共有することが可能になる。したがって、本発明によって、スプレッドシート文書をシートツリーのノードとしてインポートすることが可能になる。図11を参照すると、図解1100は、あるノードでシート1010,1060によって記述された文書をインポートするスプレッドシートを示す。インポートされた文書のディレクトリ構造は保持される。
上述したように、第三者スプレッドシート文書の完全なソースコードがインポートされ、その後、文書の残りの部分と同じコンピュータで実行される。その代わりに、ときどき、インポートされたスプレッドシートが第三者のコンピュータ上に残り、そのコンピュータ上で実行され、ユーザにはその結果のみが通知されることが望まれる場合がある。これには、いくつかの理由が考えられる。例えば、第三者のシートは所有権があり、その作者はソースコードを配布したくない。あるいは、実行がリソース集約的であるか、特殊なハードウェアを必要とし、第三者によって実行されるのが最善である。
本実施形態によれば、異なるコンピュータに存在する複数のシートが1つの論理的な分散文書を形成することを可能にする。この種のシステムにおける主要な課題は、サイクル検出であり、そこでは、コンピュータAに存在するあるセルaがコンピュータBに存在するあるセルbに依存し、そのセルbがコンピュータCに存在するあるセルcに依存し、さらにそのセルcがセルaに依存している。本例のように任意のセルが任意の可能な遠隔セルを参照できる完全一般システムにおいて、依存性検出は困難な問題である。そこで、本発明は、有用性を保ちつつ作業しやすい限定的な星型形態を提案する。
1つのコンピュータのみが文書のハブとみなされ、任意のリモートシートを好きなように参照することができる。ライブラリと呼ばれる他のコンピュータは、ハブからパラメータとして渡されたリモートサンクを経由する以外、ハブ又は任意の他のコンピュータを参照し返すことはできない。例えば、ある人がチケット管理システムをシートの集合体として開発したが、そのシートはソースコードを公開したくないので、チケット管理システムは開発者のコンピュータでライブラリとして動作する。そして、ユーザはこのライブラリをリモートシートとして取り込むことができる。しかしながら、どのユーザがログインできるのか、どのチケットにアクセスできるのか、ライブラリはそれ自体では分からないので、これは、本来、ユーザが設定すべきポリシーである。そこで、設定として、ユーザは、authenticatedサンクとauthorizedサンクを渡し、それぞれパスワード認証とアクセス制御のルールを定義する。これらのサンクはユーザのコンピュータに残り、サンクIDのみがライブラリを実行しているコンピュータに渡される。ライブラリがサンクを実行する必要があり、サンクIDがローカルで利用できないことが分かると、第三者システムは、ユーザのコンピュータ(通称ハブ)にサブスクライブ要求を送り返すことになる。
本実施形態による依存関係ループ検出は、星形の依存関係が維持されることによって、より単純化される。ハブによって参照される2つのライブラリは、互いに直接話すことができず、文書のハブとだけ話すことができる。ライブラリがセル値の更新をハブに公開すると、この値を計算するために使用されたハブ上の全ての値もリストアップされる。このようにして、依存ループがあるときはいつでも、ハブはそれを簡単に検出し、関連するセルに依存ループエラーを設定することができる。ライブラリは、更なるライブラリがハブから見えない限り、更なるライブラリのハブとして自由に動作することもできることに留意されたい。つまり、チケット管理ライブラリは、それ自身が他のライブラリをインポートすることができるが、ユーザにはまだ単一のモノリスとして表示される本実施形態に従うループ検出アルゴリズムは、チケット管理ライブラリの内部実装に依存しない。
本実施形態に従って、コラボレーティブシートが提供される。最も単純な場合、コラボレーティブシートは、同じバックエンドに接続された複数のUIに過ぎず、そのそれぞれがセルのコードの設定及び水平バリアの設定といったコマンドを送信し、バックエンドからセルの更新を受信する。
アクセス制御が可能になると、事態はさらに興味深いものになる。従来のコラボレティブスプレッドシートシステムは、アクセス制御が非常に粗い。例えば、Googl(登録商標) シートは、ユーザが文書を編集できるかどうか、ユーザが文書を読めるかどうか、ユーザが文書にコメントできるかどうか等、文書全体に対して、ユーザごとにいくつかの許可ビットを有する。しかしながら、このような単純化されたモデルは、しばしば適切ではない。
例えば、企業は、全ての管理及び運用データを1つの巨大な文書に収めたいと考えることがある。人事データは1つのサブツリーに格納され、人事部員だけが見ることのできる全員の給与等の機密情報も含まれている。顧客サポートのデータは、別のサブツリーに格納されている。このサブツリーでは、顧客サポートチームがチケット管理システムの構築を計画している。同チームは、チケット管理システムで役割を割り当てるために、機密情報ではない、誰がどの部署にいるかという人事部の記録を使いたいと考えている。同チームは人事データに直接アクセスすることはできないので、人事部の誰かが部門情報を抽出し、顧客サポートチームがそのデータを読むことができるように特別な許可を与える必要がある。
明らかに、このようなシナリオでは、従来のシステムの粗いアクセス制御では不十分である。しかしながら、各シートに対して誰が読み取りと書き込みができるかを単純に定義する素朴なアプローチは、簡単に回避できる。例えば、シートsecretが人事部にのみアクセス可能であり、シートpublicが誰でも読み書き可能であるとする。どのユーザも、シートpublicのセルXにコードsecret.everyones_salaryを設定し、シートpublicのセルXを読み取ることが容易にできる。
本実施の形態による操作は、シートごとの所有者と読者を定義する。シート単位の所有者と読者は、実際のユーザである具体的なユーザと、あるユーザ集合の共通項である抽象的なユーザを含む。具体的なユーザと抽象的なユーザを合わせて、ユーザとする。各ユーザは、他のユーザの集合体として行動することができる。例えば、ある仮想的な企業には、次のようなユーザがいる:(a)全人員:システム内のあらゆるユーザ(これは常に存在し、誰もが人員として行動(act-as)できる)、(b)人事部人員(例えば、人事に従事する人で人員として行動できる)、(c)顧客サポート人員(例えば、顧客サポートに従事する人)、(d)マネージャー(例えば、あらゆるマネージャー)、(e)人事部マネージャー(例えば、人事部でマネージャーとして行動できる)、(f)チェスクラブ人員、(g)Tyrion(例えば、人事部マネージャーとチェスクラブ人員として行動できる)、(h)Samwell(顧客サポート担当者とチェスクラブ人員として行動できる)がいる。
としての行動(act-as)関係は推移的であるので、例えば、Tyrionは、人事部人員として行動(act-as)することも可能である。
本実施形態によれば、全てのシートはその所有者として1人のユーザがあり、これは静的に割り当てられなければならない、すなわち、計算されない。シート内の全ての式は、誰がシートを見ているかに関係なく、常に所有者の許可を得て実行される。このようにして、許可拒否エラーも含めて、誰もが同じ値を得ることができる。
本実施形態によれば、全てのシートは、その読者としてゼロ又はそれ以上のユーザを有することができる。このリストは、計算されることができ、例えば、個人情報を示すシートが、誰の情報が示されているかに依存する読者リストを有するように、置換可能なセル値に依存することができる。これは、自分の情報は読ませるが、他の人の情報は読ませないという場合に有効である。ユーザは、自分が所有者、又は読者の少なくとも1人として行動できる場合、シートを読むことができる。
本実施の形態によれば、ユーザは、(自分が)所有者として行動できる場合、読者のリストを含むシートを編集することができる。シートの所有者を変更するためには、ログインしたユーザは、古い所有者と新しい所有者の両方をして行動できなければならない。ある人がシートを編集できるのは、その人が所有者として行動できる場合のみであり、シートは所有者の許可を得て評価されるので、セルに式を書いても権限昇格はできない。
きめ細かな許可が必要でない場合は、全てのシートの所有者は人員に設定される。これもデフォルトである。
本実施の形態によれば、各シートに対して複数の所有者を許容することができる。次いで、シート内のコンテンツは、全ての所有者の共通項で実行される。すなわち、他のシートからセルを読み取ることができるためには、全ての所有者ができる必要がある。その後、ユーザは、いずれかの所有者として行動できれば、新しい所有者を追加することを含め、シートを編集することができる。本質的に、全ての所有者の共通項である無名の単一所有者が存在する。
スプレッドシートの概念は、平均的なコンピュータユーザがアクセスできる唯一のプログラミング環境であることが長い間証明されているが、スプレッドシートの概念を中心とした単純な動的ウェブサイトでさえ、複数層を構築することは、実現されていない。本実施形態によれば、単一の首尾一貫したスプレッドシート文書が、CRUDウェブサイト全体を提供することができる。単純なCRUD(作成/読出/更新/削除)ウェブアプリケーションにおいてさえ、開発者は、いくつかの層で異なる技術を必要とする。例えば、HTML、Javascript(登録商標)、又はCascading Style Sheets(CSS)のようなフロントエンド技術は、エンドユーザにユーザインターフェースを提示するために用いられ、PHP(オープンソース汎用スクリプト言語であるHypertext Preprocessor)、Java(登録商標)又は他の多くの選択肢のいずれかのようなビジネス論理層プログラミング言語は、エンドユーザのクエリ及びアクションをデータベースのクエリ及びアクション(典型的には構造化クエリ言語(SQL)に翻訳)に変換するために用いられ、データベースクエリ言語(典型的には同じくSQLで)は、実際にデータをホストするデータベースを制御するために使用されている。
各層で利用可能なプログラミング言語、フレームワーク、パラダイム、及び製品の多くの選択肢を考えると、実務家は、しばしば、機能する製品を構築するために選択された技術を「技術スタック」と呼ぶことがある。例えば、MEAN技術スタックは、データベース層でMongoDBを使用し、ビジネスロジック層でExpress.js(Javascript(登録商標)のNode.jsの上に構築)を使用し、ユーザインターフェース層でAngularJS javascript(登録商標)フレームワークを使用し、それゆえ、頭文字でMEANと呼ばれる。
技術スタックには、高い参入バリア(すなわち、急な学習曲線)がある。その理由は、単純な技術スタックの基本を学ぶことさえ、プログラミング経験のない人にとって、あるいは関連技術に精通していないプログラマにとっても、数ヶ月の激しい努力を必要し得るからである。プロのウェブ開発者にとって、異なる技術スタックに切り替えることは、依然として困難な作業である。
この基本的な構造とそれに伴う参入バリアは、次のフェイスブックを作るか、単純なウェブアンケートを作るかに関係なく存在する。前者の場合は複雑さが正当化されるのに対し、後者の場合は過度に複雑になり、一見単純に見えることが、専門家以外には完全に不可能になってしまうのである。
現在、静的なウェブサイトとして表示するために、スプレッドシートをHTMLページとして保存することはできる。しかし、ロジックとレイアウトがスプレッドシートで定義されているにもかかわらず、データソースをクエリし、計算を行うことによって、コンテンツがその場で生成される動的ウェブサイトについては、同じことを言うことはできない。現状では、このようなウェブサイトは、スプレッドシートを参照しながら、再びゼロから実装し直さなければならないが、実際のコードの再利用は不可能である。
図12Aを参照すると、ダイアグラム1200は、動的ウェブサイトを定義するのに役立つ文書アンケートのシート1205を示しており、本実施形態に従って、文書は、全てのデータ、ビジネスロジック、及びプレゼンテーションコーディングを含んでいる。ダイアグラム1200によって表される例は、アンケートウェブサイトを示し、そこでは、教師が、クラスの4人の生徒から3つのフィードバックの質問に対する答えを収集することを望んでいる。データベースを作成して管理する代わりに、教師は、関連するデータを保持するために、スプレッドシート文書アンケートでシートデータ1205を作成する。これは、先に説明したデータベース層と類似している。角括弧内のテキストは、セルに割り当てられたラベルを示す。
次に、教師は、提出があった場合に、アンケート結果を記録するビジネスロジックを構築する。具体的には、教師は、以下のコンテンツからなるon_student_submitというマクロを作成する。
PasteCell!(Locate(Xstudent, student_id:last_student)-|answer) >>
Xqid,Xanswer;index!; (1)
PasteCell!(Locate(Xstudent, student_id:last_student)-|answer) >>
Xqid,Xanswer;index!; (1)
マクロは、従来のスプレッドシートのように、ユーザのアクションをシミュレートする。提出物が以下であると仮定する。
student = joe@sch.edu
qid=1
answer=9 (2)
ここで、Xstudentは、提出時の学生(student)フィールド、すなわち、領域1210で検索されるjoe@sch.eduを指す。
student = joe@sch.edu
qid=1
answer=9 (2)
ここで、Xstudentは、提出時の学生(student)フィールド、すなわち、領域1210で検索されるjoe@sch.eduを指す。
マクロ(2)において、「Locate(Xstudent, student_id:last_student)」は、コンテンツjoe@sch.edu、領域1210内のstudent_idからlast_studentまでのセル範囲内で、セル1215の位置を特定する。この例では、それは、joe_idというラベルを有するセル1215である。
マクロ(2)において、「Locate(Xstudent, student_id:last_student) -| answers」は、行「Locate(Xstudent, student_id:last_student)」(すなわち、セル1215を含む行1225)と列「answer」(すなわち、列1230)の交点におけるセル1220であって、ダイアグラム1200におけるラベル[a]を含むセル1220となるであろうことを意味している。
マクロ(2)において、「>> Xqid」は、Xqidセルだけ右へ移動することを意味する。なお、質問IDは0ベースで、質問ID0は「どの程度赤ん坊サメを気に入りましたか」という質問1240を指し、質問ID1は「どの程度お母さんサメを気に入りましたか」という質問1245を指している。「(Locate(Xstudent, student_id:last_student) -| answer) >> Xqid」という式全体は、ラベル[b]を含むセル1250を参照する。
「PasteCell!b,Xanswer;」は、あたかもユーザがセル1250に当該コンテンツを貼り付けたように、ラベル[b]を含むセル1250に提出物の回答フィールドのコンテンツを貼り付ける。そして、「index!;」は、以下に説明するように、「index」という名前のマクロを呼び出す。
このように、図12Bを参照すると、マクロ実行後、ダイアグラム1200からのシートデータ1205は、ダイアグラム1260のシートデータ1265のように見え、セル1250に新しい答え「9」が記録されている。次いで、マクロ「index」が呼び出される。
ユーザインターフェース層のエントリポイントは、「index」という名前のマクロ(4)であり、これがデフォルトハンドラとなるように名付けらている。
if (NoBlank(Locate(Xstudent, student_id:last_student) -| (answer:last_answer))) {
Render! show_completed_answers;
}
else {
Render! show_answer_form;
} (3)
if (NoBlank(Locate(Xstudent, student_id:last_student) -| (answer:last_answer))) {
Render! show_completed_answers;
}
else {
Render! show_answer_form;
} (3)
前と同様に、式「Locate(Xstudent, student_id:last_student):」は、関連するstudent_idを含むセル、この場合はセルjoe_idを特定する。式「joe_id -| (answer:last_answer):」は、joe_idと同じ行、及び領域「answer:last_answer」と同じ列をカバーする矩形領域を示す。本実施例では、この式は、Joeの回答を含むセルに対して評価される。
図13A及び図13Bを参照すると、ダイアグラム1300及び1350は、「index」マクロの実行後に、レンダリングされたスプレッドシートの2つのオプションを示す。式「joe_id -| (answer:last_answer):」で示される矩形領域が空白を含まない場合、スプレッドシート「show_completed_answers」がレンダリングされる。スプレッドシート「show_completed_answers」は、ダイアグラム1300に示されており、等幅テキストは、セルに入力された数式である。数式がセルの領域に対して評価される場合、本明細書で説明したように、その結果は、右側と下側の隣接するセルにスピルすることに留意されたい。
そうではなく、式「joe_id -| (answer:last_answer):」で示される矩形領域が空白を含む場合、スプレッドシート「show_answer_form」がレンダリングされる。スプレッドシート「show_answer_form」は、ダイアグラム1350に示されている。スプレッドシート「show_answer_form」のコンテンツは、学生に「次の質問に答えてください」と提示することにより、学生に与えられた最初の未回答の質問に対する答えをお願いする。
選択肢のスタイルは、“input”&“select”\\“options”&T(Range(1,10))として定義され、以下の表1に示すように評価される。
これは、HTMLレンダラーにセルをHTML選択ボックスとして、所与の選択肢でレンダリングするように指示する。提出(submit)のスタイルは、以下のように定義される。
“input”&“submit”\\“target”&on_student_submt”\\“data”&
(“qid”&qid\\“answer”&choice) (4)
ユーザが8を選択したとすると、スタイルは、表2に示すように評価される。
“input”&“submit”\\“target”&on_student_submt”\\“data”&
(“qid”&qid\\“answer”&choice) (4)
ユーザが8を選択したとすると、スタイルは、表2に示すように評価される。
したがって、提出ボタンがクリックされると、「on_student_submit」マクロは、上記に示す提出(5)に従って、提出された値で埋められたフィールドXqid及びXanswerを用いて、スプレッドシートエンジンによって実行される。
本実施形態によるスプレッドシートによってレンダリングされるアンケートウェブサイトの存続期間は、以下のようになる。まず、生徒が未回答の質問を有するとき、「show_answer_form」シートをレンダリングして、回答を募る。次に、回答が提出されると、「on_student_submit」マクロが呼び出されて、データシートが更新される。そして、生徒が全ての質問に回答すると、「show_completed_answers」スプレッドシートがレンダリングされ、全ての生徒の回答が表示される。その後、教師は、データシートに収集されたデータに対して、通常のスプレッドシートの書式を使用して、提出された回答に対して任意の分析を実行することができる。
[一般に、動的なウェブページは、ユーザが送信したクエリパラメータによって指定された置換後に、スプレッドシートからレンダリングできる。URLが要求されると、サーバは、要求URLに続くスプレッドシート文書内のルーツ(Root)シートからのパスを、進むことができる。例えば、リクエスト:
http://doc.abc.com/demo/ticket_manager/ticket?id=123 (5)
に応答して、サーバは、文書ルートを探し、スプレッドシートファイルdemo/ticket_managerを見つけることがある。そのファイルを開き、本実施形態によるRoot.ticketにあるシートを見つける。Xidを123に置換し、シートRoot.ticketをHTMLにレンダリングする。置換プロセスは、置換されたシート全体が結果としてレンダリングされることを除いて、Xプレフィックスを含む関数呼び出しにおけるシート置換と基本的に同じである。
http://doc.abc.com/demo/ticket_manager/ticket?id=123 (5)
に応答して、サーバは、文書ルートを探し、スプレッドシートファイルdemo/ticket_managerを見つけることがある。そのファイルを開き、本実施形態によるRoot.ticketにあるシートを見つける。Xidを123に置換し、シートRoot.ticketをHTMLにレンダリングする。置換プロセスは、置換されたシート全体が結果としてレンダリングされることを除いて、Xプレフィックスを含む関数呼び出しにおけるシート置換と基本的に同じである。
制約は、SQLデータベースにおける中心的な概念である。これは、データの一貫性を強制するための鍵である。経験豊富なデータベース管理者は、制約がなければ、最終的に悪いデータが忍び込むことを知っている。本実施形態に従って、ユーザは、特定のセル及び/又は数式を「制約」として指定することができ、スプレッドシートに制約をもたらすことができる。そのようなセル及び書式は、常にエラーでも、偽値でもないように評価されなければならない。アクション(一部のセルのコンテンツの変更等)によって1つ以上の制約が失敗すると、アクションは拒否され、スプレッドシート文書は、アクションが試みられる前の状態に復元される。特に、セル又は書式を制約として指定するアクションは、それ自体がこのアクションチェックの対象となることに留意されたい。したがって、セルが現在エラー状態である場合、それを制約として指定することは失敗する。
制約が定義されると、データ所有者は、これらの重要な不変量が支持されるという保証を得る。一例は、制約「AllUnique(#id)」のように、ID列が一意な値を保持していることをチェックすることがでる。ここで、「#id」はid列を指し、「AllUnique()」はそのパラメータ(例えばid列)が重複を含まない場合にのみ、真と評価される。
他の例は、skuセルが実際に存在するSKU(Stock Keeping Unit)製品コードを参照しており、以下の式(6)のような「不明」でないことをチェックすることである。
Locate(sku, #all_skus)) && sku !=“unknown” (6)
ここで、「#all_skus」は、全てのSKU製品コードを保持する領域を指し、「Locate()」は、その第二のパラメータで指定された領域内の第一のパラメータの位置を検索する。ルックアップに失敗した場合は、エラーが返される。
Locate(sku, #all_skus)) && sku !=“unknown” (6)
ここで、「#all_skus」は、全てのSKU製品コードを保持する領域を指し、「Locate()」は、その第二のパラメータで指定された領域内の第一のパラメータの位置を検索する。ルックアップに失敗した場合は、エラーが返される。
式(6)のような不変量に違反すると、ビジネスデータが使用不能になることがある。制約の定義によって提供される保証は、スプレッドシートユーザの主な使用例であるビジネスアプリケーションにとって特に重要である。
状況によっては、まず制約を一時的に解除し、複数のユーザアクションの後にのみ復元する必要がある。例えば、前の例でskuセルのスペルを修正するために、「#all_skus」と「sku」の関連スペルを両方修正しなければならず、制約に違反するのは、一方だけが修正されたときである。したがって、ユーザは、一時的に制約を無効にすることができる。無効にされた制約は、単に非制約であり、ある時点で復活させるべきであるという視覚的なリマインダがある。
ある列のIDをルックアップするための一般的な式を考える。本明細書で上述した図12A及び図12Bの例で言えば、一般的な式は、以下の式(7)である。
Locate(Xstudent, student_id:last_student) (7)
素朴な実装では、表「student_id:last_student」を順次スキャンして、「Xstudent」の値を探す。これは、データベースの文献では一般的に線形スキャンと呼ばれ、リソースを大量に消費する操作となる。このリソースを大量消費する操作を避けるために、データベースはインデックスを構築し、高速なルックアップを可能にする。しかし、データベースのインデックスは、ユーザが定義済みのデータスキーマを提供し、そのスキーマの上にどのようなインデックスを構築するかを提供することに依存している。これは、明らかにスプレッドシートでは実現不可能なことである。例えば、ユーザは、効率的に任意の領域の任意の値を「Locate()」することができるはずである。したがって、本実施形態に従って、スプレッドシート内のセルの任意のブロックにおける値の検索を加速するために、空間インデックスを使用してスプレッドシート内のセル値にインデックスを付ける新規な方法を提案する。
Locate(Xstudent, student_id:last_student) (7)
素朴な実装では、表「student_id:last_student」を順次スキャンして、「Xstudent」の値を探す。これは、データベースの文献では一般的に線形スキャンと呼ばれ、リソースを大量に消費する操作となる。このリソースを大量消費する操作を避けるために、データベースはインデックスを構築し、高速なルックアップを可能にする。しかし、データベースのインデックスは、ユーザが定義済みのデータスキーマを提供し、そのスキーマの上にどのようなインデックスを構築するかを提供することに依存している。これは、明らかにスプレッドシートでは実現不可能なことである。例えば、ユーザは、効率的に任意の領域の任意の値を「Locate()」することができるはずである。したがって、本実施形態に従って、スプレッドシート内のセルの任意のブロックにおける値の検索を加速するために、空間インデックスを使用してスプレッドシート内のセル値にインデックスを付ける新規な方法を提案する。
あるまず、可能なセル値の総順序を定義する。例えば、整数は浮動小数点より小さく、浮動小数点は順に文字列より小さく、文字列は順に空白値より小さくなることを任意に定義する。それぞれのデータタイプ内では、通常の順序が適用される。その後、スプレッドシートの状態は、セル行y列xにおけるzの値が(x,y,z)の点によって表される三次元点群として符号化することができる。
あるしたがって、クエリ「Locate(value, start:end)」は、スプレッドシートの点群と、以下の式に囲まれた立方体の交点を見つけるための三次元空間の検索である。
Column(start) <= x <= Column(end), Row(start) <= y <= Row(end)、及び
value <= z <= value (8)
このような検索は、空間インデックスによって高速化することができ、その中で最もよく知られているのは、R-treeインデックスである。以下の議論では、R-treeインデックスを使用するが、他のほとんどの空間インデックスも少しの修正で本実施形態に従って使用できることが理解される。
Column(start) <= x <= Column(end), Row(start) <= y <= Row(end)、及び
value <= z <= value (8)
このような検索は、空間インデックスによって高速化することができ、その中で最もよく知られているのは、R-treeインデックスである。以下の議論では、R-treeインデックスを使用するが、他のほとんどの空間インデックスも少しの修正で本実施形態に従って使用できることが理解される。
R-treeは、点群Cを2つの集合(C1及びC2)に再帰的に分割し、各集合のバウンディングボックスを記録する。集合は、可能な限り、バランスよく、コンパクトで、かつ、不連続であるように選択される。R-treeの検索は自明な再帰関数であり、R-tree内の点の追加、削除、移動は当業者にはよく知られていることである。
空間インデックスによって高速化できる他のいくつかの表現は、以下の通りである。
MinString(start:end) and friends (9)
AllSame(start:end)は、単に
Min(start:end)==Max(start:end) (10)
として、加速できる。
start:end < 5 (11)
MinString(start:end) and friends (9)
AllSame(start:end)は、単に
Min(start:end)==Max(start:end) (10)
として、加速できる。
start:end < 5 (11)
特別な考慮事項は、&&クエリに適用可能である。図14を参照すると、スプレッドシート1400は、子供1420が購入したスナック1410と、購入した日1430との長い記録シナリオを示している。スプレッドシート上のクエリは、本明細書で上述したように、本実施形態に従った空間インデックスによって加速することができる。以下のクエリ(12)は、1人の子供による短い範囲内の日付を有する記録のインデックスを返す。
Between(date:Zdate, ‘2020-01-20’,‘2020-01-21’) && person:Zperson==“luke” (12)
Between(date:Zdate, ‘2020-01-20’,‘2020-01-21’) && person:Zperson==“luke” (12)
第一の部分式は、疎で、数少ない記録にしかマッチしない。しかしながら、第二の部分式は、密である。両方の部分式を評価し、その和を見つけるという素朴な戦略では、ブール型ベクトル「person:Zperson==“luke”」を評価するのに多くの時間が費やされ、そのほとんどが無駄になる。
これを改善するために、クエリが分割・征服されるときに、両方の制約が同時に考慮される。各ステップで、残りの検索エリアは、第一の部分式又は第二の部分式のいずれかに従って分割され、より高い情報量を有する部分式が選択される。日付の方がより識別力が高いので、日付に従って探索エリアを分割することが選択されやすく、その結果、シートの点群を迅速にプルーニングすることができる。
汎用R-treeインデックスのような空間インデックスは、多くのタイプのクエリを高速化するために使用することができるが、他のものも依然として特殊なデータ構造から利益を得ることができる。一般的に制約として使用されるセル「ColSorted(a:b)」を考えてみよう。この制約は、指定された範囲の全ての列がソートされている場合、つまり、各セルが下のセルより大きくない場合にのみ、真と評価される。
ときどき、スプレッドシートで階層的な領域を定義したいことがある。その例として、TWIT(table-within-table)があり、スプレッドシート内の領域で、その行の高さと列の幅は、本明細書で上述したように、より大きなスプレッドシートの行の高さと列の幅とは独立して決定される。図15A、図15B及び図15Cを参照すると、スプレッドシート1500、1530、1570は、本実施形態に従ったTWITSの使用を示している。
スプレッドシート1500における表1505の提示は、いくつかの方法で改善することができる。まず、ID列1510は、表の外側のシートの部分によって引き伸ばされているため、広すぎる。さらに、譲受人(assignee)の名前1515は、よりコンパクトに表示することができる。表示を改善するために、表1505全体を大きなTWIT1535として、各行の名と姓のセルをスプレッドシート1530に示すように、小さなTWIT1540、1545、1550としてレンダリングすることが可能である。
TWITを定義する簡単な方法は、開始/終了セルの各ペアに一意のTWIT IDを与えて、TWIT領域が明示的に識別されるようにすることである。しかしながら、これは、名前TWITのように、(おそらく未知の)数のTWITを大量に生成する必要がある場合には、面倒なことになりかねない。
その代わりに、本実施形態に従って、ユーザは、どのセルが開始セルであり終了セルであるかを定義することを可能にし、システムは、非交差領域を形成するために開始セルと終了セルを自動的にマッチングさせることができる。スプレッドシート1530に示される例では、ユーザは以下の定義を入力することができる。
`ID:TwitBegin (13)
GoSE(`ID):TwitEnd (14)
GrowS(`Assignee vv 1):TwitBegin (15)
GrowS(`Assignee _| 1):TwitEnd (16)
`ID:TwitBegin (13)
GoSE(`ID):TwitEnd (14)
GrowS(`Assignee vv 1):TwitBegin (15)
GrowS(`Assignee _| 1):TwitEnd (16)
式`IDは、文字列「ID」を含むセルの位置を特定する。「GrowS(a)」は、セルaだけを含む領域から始まり、そのすぐ下のセルが全て空白になるまで、下へと拡張し続ける。したがって、「GrowS(`Assignee vv 1)」は、文字列「Assignee」を含むセルの直下から始まり、最初の空白セルに出会うまで下に拡張する。同様に、「GrowSE(a)」は、セルaを含む領域から始まり、右と下に領域を拡張し続け、すぐ右、すぐ下、すぐ右下に空白で完全に縁取られた表に成長させる。「GoSE(a)」は、「GrowSE(a)」の右下隅である。これらは、ラベル位置式の例である。
「GrowS(`Assignee vv 1):TwitBegin」の定義(15)は、Assigneeセルの下の全てのセルをTwitBeginセルとしてマークする。「GrowS(`Assignee _|1):TwitEnd」の定義(16)は、Assigneeセルの下の最後の列の全てのセルをTwitEndとしてマークする。定義(13)、(14)、(15)、及び(16)の割り当ての結果を、表1570の表1575に示す(図15C)。
さらに本実施形態によれば、非交差領域は、完全に不連続である領域、又はそれらの境界が交差しないように他の中に完全に含まれる領域のいずれかとして定義することができる。開始セルと終了セルのセットは、非交差領域に対応する最大1つのマッチングを認めることができ、そのようなマッチングは、開始セルの数をnとすると、「O(n log n)」時間で見い出せることを示すことができる。したがって、これらのTwitBeginタグ及びTwitEndタグから、ユーザの意図するTWITを常に復元することができる。
あるいは、TwitBeginタグ又はTwitEndタグの一部をIDで補強することも可能である。TwitBeginタグとTwitEndタグのペアは、それぞれ同じIDを有する必要がある。これにより、ユーザはペアリングを明示的に指定することができる。しかしながら、自動マッチングアルゴリズムでは、そのようなIDは、一意である必要はない。このように、どのセルが開始タグを有し、どのセルが終了タグを有するかを示すことによって、本実施形態によるフラットな2Dスプレッドシート構造において階層的領域を作成することができるが、開始セルと終了セルとの明示的かつ正確なマッチングはなく、したがって、システムは、交差しない領域のセットを生成する開始タグと終了タグとの一意のペアリングを選択する。
シートが多数の行を含む場合、行の挿入と削除は、その下の全ての行に影響するため、非常に高価になる可能性がある。行と列の効率的な挿入と削除は、問題を軽減するためにビグナム(bignum)行番号の導入により緩和される。ビグナムとは、任意に高い精度を有する数であるので、二進数で正確に表現できる全ての数を正確に表現できる。
本実施形態によれば、行番号は必ずしも連続である必要はなく、小数であってもよく、整数はスキップすることができる。例えば、1、2、3、4、5行から始まり、ユーザが3行目を削除し、1と2の間に別の行を挿入すると、行番号は、1、1.5、2、4、5となる。このように、行を削除することは、安価な操作であり、その下の行に不必要に影響を与えない。
ビグナム行では、2つの行の順序はまだ決定できるものの、特定の行の前の行又は次の行を決定することは、もはや自明なことではない。(i)ある行rの上又は下のn番目の行は何か、(ii)行r1とr2の間の距離は何か、という2つのクエリに答えるのに役立つインデックスが必要である。
インデックスは、このようなクエリに効率的に答えられるようにする必要があるが、さらに、インデックスを小さな情報の断片に分解し、セルの計算中に、どの情報の断片が使われたかを記録できるようにする必要がある。そうすれば、ある情報が変化したときに、どのセルを再計算すればよいかが分かる。また、行が挿入/削除されると、そのような情報の一部のみが変更され、そのような情報のリストは容易に見つけることができる。その後、理想的には、本当に再計算が必要なセルだけが再計算される。
この目的のために、本実施形態によれば、スキップリストのような構造が使用される。具体的には、新しい行が作成されるとき、その行には、ランダムにレベルが割り当てられる。行は、レベル1である確率は0.5、レベル2である確率は0.25、等である。行番号のレベルが変わることはない。また、各レベル1ノードには次のレベル1ノードが記録され、各レベル2ノードには次のレベル1ノードと次のレベル2ノードが記録される。さらに、一般に、レベルNのノードには、レベル1からレベルNまでのN個の次のノードが記録される。最後に、特別な、目に見えない、一番上の行には行番号「-inf」が割り当てられ、全てのレベルにあるとみなされる。
このように、レベル1は、全ての行のリンクリストを形成する。より高いレベルは、エクスプレスレーンであり、より大きなスパンでの検索をより高速に進めることができる。このインデックスがあることで、「ある行rの上/下のn番目の行は何か」といった質問には、「O(log(N))」の情報片を使って答えることができる。さらに、「r1行とr2行の間の距離は?」という質問にも「O(log(N))」個の情報片を使って答えることができる。
このように、本実施形態によれば、行が挿入又は削除されると、各レベルにおいて、せいぜい2つのリンクに影響を与えることが分かる。したがって、行の挿入又は削除は、せいぜい「O(レベルの数)」個の情報を破壊する。
ユーザへの提示のために、ビグナム行番号を直接表示しないことを選択してもよいが、むしろ、最初の行までの距離が表示されるので、ユーザは依然として連続した整数を見ることができる。上述したように、2つの行の間の距離は、スキップリストを使用して効率的に計算することができる。
このように、本実施形態は、スプレッドシートの利用及び操作を強化する、堅牢なユーザ向けスプレッドシートプログラミング言語を提供することが分かる。本実施形態によれば、スピル、関数呼び出しとしてのシート置換、セル値及びコールバックパラメータとしてのシート置換(サンク)、バリア、プログラムスタイル定義、TWIT、クラスス(classs)、ラベル位置式、リモートコールバックとしてのシート置換(サンク)、コラボレティブ文書におけるきめの細かい許可、シート置換を使用するウェブページ、単一のスプレッドシートによって定義される動的ウェブページ、ユーザ指定制約、空間インデックス、持続的インデックス及びデルタ更新セル、ビグナム行及び列番号、並びに行及び列インデックスが定義されて、簡単で柔軟で汎用性のある下位互換性があり、スプレッドシートフレンドリーなソリューションが提供された。
本実施形態の前述の詳細な説明において例示的な実施形態が提示されたが、膨大な数の変形が存在することが理解されるべきである。さらに、例示的な実施形態は例示に過ぎず、本発明の範囲、適用性、動作、又は構成を何ら制限することを意図していないことを理解されたい。むしろ、前述の詳細な説明は、本発明の例示的な実施形態を実施するための便利なロードマップを当業者に提供し、添付の請求項に規定される本発明の範囲から逸脱することなく、例示的な実施形態に記載されたステップの機能及び配置並びに動作方法において、様々な変更を行うことができることが理解されよう。
Claims (42)
- スプレッドシートをプログラミングするための方法であって、
スプレッドシートのセルにラベルを割り当てるステップであって、前記ラベルのそれぞれは、変数の複数の値に対応するデータのための複数の隣接する変数値セルのうちの1つに割り当てられ、前記複数の隣接する変数値セルは、前記複数の隣接する変数値セルのセル範囲の開始及び終了を示すラベルのペアによってユーザ定義される、ステップと、
定義された式を有するセルから、前記変数の前記複数の値によって定義される変数範囲を含む前記式に応答して、データが流れ込むことができるスピルエリアを定義するステップであって、前記スピルエリアが前記変数の前記複数の値に対応する複数の式解に自動的にサイズ調整される、ステップと、
を含む、方法。 - スピルエリアを定義するステップが、前記複数の隣接する変数値セルへのデータの後続のユーザ入力の前に、定義された式を有するセルからデータが流れ込むことができる非縮小スピルエリアを定義することを含む、請求項1に記載の方法。
- 前記スピルエリアに弾性限界を確立するために1つ以上のセルにわたってバリアを定義するステップをさらに含み、前記スピルエリアを定義するステップは、前記複数の隣接する可変値セルに入力されたデータが前記スピルエリア内のセルの数より大きい複数の式解に対応するとき、前記バリアに隣接する前記スプレッドシートの残りの部分を妨げることなく、弾性スピルエリア内のセルを定義するステップを含む、請求項1に記載の方法。
- 1つ以上のセルに渡ってバリアを定義するステップは、前記スプレッドシートの行又は列の全てのセルにわたってバリアを定義するステップを含む、請求項3に記載の方法。
- 前記スプレッドシートの大きな表の内部に1つ以上のミニ表を囲む1つ以上の表内表(TWIT)を定義するステップをさらに含み、前記1つ以上のミニ表のそれぞれが占める行の数、列の数及び総面積は、ユーザTWIT入力に応答して定義される、請求項1~4のいずれか一項に記載の方法。
- 前記スプレッドシートの前記大きな表の内部の前記ミニ表は、少なくとも2つの非交差領域を備える、請求項5に記載の方法。
- 前記ユーザTWIT入力が、1つ以上のセルをTWIT開始セルとして指定し、1つ以上のセルをTWIT終了セルとして指定するステップを含み、前記スプレッドシートの前記大きな表の内部に前記ミニ表を囲む前記TWITを定義するステップが、前記1つ以上のTWIT開始セル及び前記1つ以上のTWIT終了セルに応じて、前記1つ以上のミニ表のそれぞれが占める行、列及び総面積を定義するステップを含む、請求項5又は請求項6に記載の方法。
- 前記1つ以上のTWIT開始セルのうちの少なくとも1つ及び前記1つ以上のTWIT終了セルのうちの対応する少なくとも1つは、TWITペアリングIDを含む、請求項6に記載の方法。
- 曖昧さが、前記TWITペアリングIDの不在によって、又は同じTWITペアリングIDを含む前記1つ以上のTWIT開始セルのうちの2つによって、又は同じTWITペアリングIDを含む前記1つ以上のTWIT終了セルのうちの2つによって定義され、前記方法が、TWIT境界の交差を認めないことによって前記曖昧さを解決するステップをさらに含む、請求項7又は請求項8に記載の方法。
- ユーザがプログラム可能な二次元スタイル定義に従って前記スプレッドシートのセルを表示するステップを含む、請求項1~9のいずれか一項に記載の方法。
- 前記ユーザがプログラム可能な二次元スタイル定義が、データフォントスタイル、データフォント色、及びセル背景色のうちの1つ以上を含む、請求項10に記載の方法。
- スプレッドシートプログラミングのための方法であって、スプレッドシートに別のアイテムを、関数呼び出し及び/又はリモートコールバックを含む前記スプレッドシートのセルのセル値に応答して置換するステップを含む、方法。
- 前記スプレッドシートに置換された前記アイテムの形状が、前記セルの元の値の形状と一致しない場合に、エラーが発生する、請求項12に記載の方法。
- 前記スプレッドシートに前記別のアイテムを置換するステップが、前記スプレッドシートのセルの値に応答して、動的に指定されたスプレッドシート参照を前記スプレッドシートに置換するステップを含み、前記動的に指定されたスプレッドシート参照が、動的に指定されたディレクトリ参照及び別のスプレッドシートのスプレッドシート名を含む、請求項12に記載の方法。
- 前記スプレッドシートのセルにおける読み取り及び/又は書き込みコードへのアクセスが、きめ細かいアクセス制御許可に従って制御され、前記きめ細かいアクセス制御許可が、具象ユーザ及び抽象ユーザのうちの1つ以上に従って定義されたシート所有者及びシートユーザを含む、請求項1~14のいずれか一項に記載の方法。
- 前記ラベルを操作するためのラベル位置式を定義するステップをさらに含み、前記ラベル位置式は、前記ラベルが割り当てられている前記セルの座標を操作する、請求項1~15のいずれか一項に記載の方法。
- 二次元配列に配置された複数のセルであって、前記複数のセルのうちの1つ以上が、前記スプレッドシートに別のアイテムを置換するためのセル値を含み、前記セル値が関数呼び出し及び/又はリモートコールバックを含む、複数のセルを含む、スプレッドシート。
- 動的に指定されたスプレッドシート参照が、前記セル値に応答して前記スプレッドシートに置換され、前記動的に指定されたスプレッドシート参照が動的に指定されたディレクトリ参照及び別のスプレッドシートのスプレッドシート名を含む、請求項17に記載のスプレッドシート。
- 二次元配列に配置された複数のセルであって、前記複数のセルが、変数の複数の値に対応するデータのための複数の隣接する変数値セルを含み、前記複数の隣接する変数値セルが、前記複数の隣接する変数値セルのセル範囲の開始及び終了を示すセル値のペアによってユーザ定義される、複数のセル
を含む、スプレッドシートであって、
前記複数のセルが、前記変数の前記複数の値によって定義される変数範囲を含む式に応答して、定義された式を有するセルからデータが流れ込むことができるスピルエリアをさらに備え、前記スピルエリアは、前記変数の前記複数の値に対応する複数の式解に自動的にサイズ調整される、スプレッドシート。 - 前記スピルエリアは、前記複数の隣接する変数値セルへのデータの後続のユーザ入力の前に、定義された式を有するセルからデータが流れ込むことができる非縮小スピルエリアを含む、請求項19に記載のスプレッドシート。
- 前記スピルエリアに弾性限界を確立するために1つ以上のセルにわたってバリアが定義され、前記スピルエリアは、前記複数の隣接する可変値セルに入力されたデータが前記スピルエリア内のセルの数より大きい複数の式解に対応するとき、前記バリアに隣接する前記スプレッドシートの残りの部分を妨げることなく、弾性スピルエリア内にあるように定義されたセルを含む、請求項19によるスプレッドシート。
- 前記バリアが前記スプレッドシートの行の全セル又は列の全てのセルにわたって定義される、請求項21に記載のスプレッドシート。
- 前記スプレッドシートのセルにおける読み取り及び/又は書き込みコードへのアクセスが、きめ細かいアクセス制御許可に従って制御され、前記きめ細かいアクセス制御許可が、具象ユーザ及び抽象ユーザのうちの1つ以上に従って定義されたシート所有者及びシートユーザを含む、請求項17~22のいずれか一項に記載のスプレッドシート。
- 前記複数のセルが、前記スプレッドシートの大きな表の内部の第一のミニ表を囲む第一の表内表(TWIT)を含み、前記第一のミニ表が占める行の数、列の数及び総面積が、ユーザTWIT入力に応答して定義される、請求項17~23までのいずれか一項に記載のスプレッドシート。
- 前記複数のセルが、前記スプレッドシートの前記大きな表の内部の第二のミニ表を囲む第二のTWITを含み、前記第一のミニ表と前記第二のミニ表とが、前記スプレッドシートの前記大きな表内で非交差領域を含む、請求項24に記載のスプレッドシート。
- 前記ユーザTWIT入力が、1つ以上のセルをTWIT開始セルとして指定する開始セル定義と、1つ以上のセルをTWIT終了セルとして指定する終了セル定義を含み、前記第一のミニ表が占める前記行と前記列を定義する、請求項24又は請求項25に記載のスプレッドシート。
- 前記TWIT開始セルの少なくとも1つと前記TWIT終了セルの少なくとも1つは、TWITペアリングIDを含む、請求項26に記載のスプレッドシート。
- 曖昧さが、前記TWITペアリングIDの不在によって、又は同じTWITペアリングIDを含む前記1つ以上のTWIT開始セルのうちの2つによって、又は同じTWITペアリングIDを含む前記1つ以上のTWIT終了セルのうちの2つによって定義され、方法が、TWIT境界の交差を認めないことによって自動的に解決される、請求項27に記載のスプレッドシート。
- 前記複数のセルのうちの1つ以上は、セルを表示するための1つ以上のユーザプログラム可能な二次元スタイル定義を含む、請求項17~28のいずれか一項に記載のスプレッドシート。
- 前記ユーザプログラム可能な二次元スタイル定義が、データフォントスタイル、データフォント色、及びセル背景色のうちの1つ以上を含む、請求項29に記載のスプレッドシート。
- 前記複数の隣接する可変値セルの1つ以上のセルが、それに割り当てられたラベルによってユーザ定義され、ラベル位置式が、前記二次元配列内の前記複数の隣接する可変値セルの前記1つ以上のセルの座標に応答して、前記ラベルに作用する、請求項19~30のいずれか一項に記載のスプレッドシート。
- 動的ウェブサイトのプレゼンテーションのための方法であって、
単一のスプレッドシート文書に応答して前記動的ウェブサイトの前記プレゼンテーションを生成するステップであって、前記単一のスプレッドシート文書は、データ及びビジネスロジックを含み、前記動的ウェブサイトの前記プレゼンテーションのための前記方法は、前記単一のスプレッドシート文書の前記データ及び前記ビジネスロジックに応答して生成される、ステップ
を含む、方法。 - 前記ビジネスロジックが、ユーザ提出データに応答して実行される1つ以上のマクロを含む、請求項32に記載の方法。
- 前記動的ウェブサイトの前記プレゼンテーションを生成するステップは、
動的ウェブページ要求に応答して、動的ウェブページ要求クエリパラメータをスプレッドシートに置換するステップと、
それに応答して、前記スプレッドシートを前記動的ウェブサイトのウェブページとしてレンダリングするステップと、
を含む、請求項32又は請求項33に記載の方法。 - 二次元配列に配置された複数のセルであって、前記複数のセルの1つ以上が、非エラー値及び非偽値に評価されるように設計されたユーザ指定制約を含む、複数のセルを含む、スプレッドシート。
- 前記複数のセルのうちの少なくとも1つに対して実行されたアクションは、前記ユーザ指定制約の1つ以上が失敗する原因となった前記アクションに応答して拒否され、前記スプレッドシートは、前記ユーザ指定制約の1つ以上が失敗する原因となった前記アクションに応答して、前記アクションが実行される前の状態に復元する、請求項35に記載のスプレッドシート。
- スプレッドシートをスプレッドシートプログラミングするための方法であって、
非エラー値及び非偽値に評価されるように設計された制約を含むように、前記スプレッドシートの1つ以上のセルをユーザ指定するステップと、
前記スプレッドシートの前記1つ以上のセルの少なくとも1つに対してアクションを実行するステップと、
前記制約の少なくとも1つが失敗する原因となった前記アクションに応答して、前記アクションを拒否するステップと、
前記制約の少なくとも1つが失敗する原因となった前記アクションに応答して、前記スプレッドシートを前記アクションが実行される前の状態に復元するステップと、 を含む、方法。 - スプレッドシートのセルの任意のブロックにおける値の検索を高速化する方法であって、
空間インデックスを利用するステップと、
可能なセル値の総順序を定義するステップと、
を含む、方法。 - 前記空間インデックスがR-treeインデックスを含む、請求項38に記載の方法。
- スプレッドシートであって、
複数の行と複数の列によって定義される二次元配列に配置された複数のセルであって、前記複数の行のそれぞれがビグナム行番号によって識別され、前記複数の列のそれぞれがビグナム列番号によって識別され、各ビグナム行番号と各ビグナム列番号がその二進表現において任意に高い有限精度が可能な数を含む、複数のセルを含む、スプレッドシート。 - 前記複数の行に1つの行が追加又は削除されたときに、前記複数のセル内のセルの再計算を効率的に行うための行スキップリストをさらに含む、請求項40に記載のスプレッドシート。
- 前記複数の列に1つの列が追加又は削除されたときに、前記複数のセル内のセルの再計算を効率的に行うための列スキップリストをさらに含む、請求項40又は請求項41に記載のスプレッドシート。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
SG10202005091RA SG10202005091RA (en) | 2020-05-29 | 2020-05-29 | User-facing spreadsheet programming language |
SG10202005091R | 2020-05-29 | ||
PCT/SG2021/050299 WO2021242177A1 (en) | 2020-05-29 | 2021-05-31 | User-facing spreadsheet programming language |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023533122A true JP2023533122A (ja) | 2023-08-02 |
Family
ID=78745731
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022569176A Pending JP2023533122A (ja) | 2020-05-29 | 2021-05-31 | ユーザ向けのスプレッドシートプログラミング言語 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20230205983A1 (ja) |
JP (1) | JP2023533122A (ja) |
CN (1) | CN115668127A (ja) |
DE (1) | DE112021003056T5 (ja) |
SG (1) | SG10202005091RA (ja) |
WO (1) | WO2021242177A1 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11709993B2 (en) * | 2021-05-27 | 2023-07-25 | Microsoft Technology Licensing, Llc | Efficient concurrent invocation of sheet defined functions including dynamic arrays |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001175501A (ja) * | 1999-12-16 | 2001-06-29 | Ntt Comware Corp | 単体モジュール試験方法 |
US7117435B1 (en) * | 2000-06-21 | 2006-10-03 | Microsoft Corporation | Spreadsheet fields in text |
US7415481B2 (en) * | 2004-09-30 | 2008-08-19 | Microsoft Corporation | Method and implementation for referencing of dynamic data within spreadsheet formulas |
US11157688B2 (en) * | 2014-03-14 | 2021-10-26 | Microsoft Technology Licensing, Llc | Enhanced indicators for identifying affected data |
US20160117412A1 (en) * | 2014-10-28 | 2016-04-28 | International Business Machines Corporation | Recursive extraction and narration of nested tables |
US10255263B2 (en) * | 2015-05-18 | 2019-04-09 | Workiva Inc. | Data storage and retrieval system and method for storing cell coordinates in a computer memory |
US10789378B1 (en) * | 2015-08-12 | 2020-09-29 | Workday, Inc. | User interface for region and cell sharing |
US10545953B2 (en) * | 2015-11-03 | 2020-01-28 | Microsoft Technology Licensing, Llc | Modern spreadsheet arrays |
US11023669B2 (en) * | 2018-06-29 | 2021-06-01 | Microsoft Technology Licensing, Llc | Rendering lambda functions in spreadsheet applications |
US11397608B2 (en) * | 2020-05-18 | 2022-07-26 | Sudharshan Srinivasan | Multi-dimensional spreadsheet system enabling stack based programming using a virtual machine |
-
2020
- 2020-05-29 SG SG10202005091RA patent/SG10202005091RA/en unknown
-
2021
- 2021-05-31 US US17/927,911 patent/US20230205983A1/en not_active Abandoned
- 2021-05-31 CN CN202180038307.9A patent/CN115668127A/zh active Pending
- 2021-05-31 DE DE112021003056.6T patent/DE112021003056T5/de not_active Withdrawn
- 2021-05-31 WO PCT/SG2021/050299 patent/WO2021242177A1/en active Application Filing
- 2021-05-31 JP JP2022569176A patent/JP2023533122A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230205983A1 (en) | 2023-06-29 |
WO2021242177A1 (en) | 2021-12-02 |
SG10202005091RA (en) | 2021-12-30 |
CN115668127A (zh) | 2023-01-31 |
DE112021003056T5 (de) | 2023-07-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11442707B2 (en) | Spreadsheet-based software application development | |
US20210334250A1 (en) | Construction of database schema models for database systems and rest api's | |
US9075787B2 (en) | Defining a reusable spreadsheet-function by extracting the function from a complex calculation in a spreadsheet document | |
US9176934B2 (en) | User interface for nonuniform access control system and methods | |
US20030115176A1 (en) | Information system | |
US20070005657A1 (en) | Methods and apparatus for processing XML updates as queries | |
Tateosian | Python For ArcGIS | |
US8122431B2 (en) | Device for processing formally defined data | |
JP2023533122A (ja) | ユーザ向けのスプレッドシートプログラミング言語 | |
Collins | Pro HTML5 with CSS, JavaScript, and Multimedia | |
Oliveira et al. | XChange: A semantic diff approach for XML documents | |
US20080295013A1 (en) | Method and apparatus for performing semantically informed text operations | |
Verbruggen et al. | Automatically wrangling spreadsheets into machine learning data formats | |
Küspert et al. | Design Issues and First Experiences with a Visual Database Editor for the Extended NF 2 Data Model | |
Bohøj et al. | AdapForms: A framework for creating and validating adaptive forms | |
Naylor | Asp. net mvc with entity framework and css | |
Škrbić et al. | Bibliographic records editor in XML native environment | |
Swat et al. | CompuCell3D Python Scripting Manual, Version 3.7. 4 | |
Bohøj et al. | A framework for interactively helpful web forms | |
Tao | Mandarin Builder: A Mandarin Resource Sharing Platform for Mandarin Educators | |
Sikora et al. | Programming communication with the user in multiplatform spreadsheet applications | |
Voorhees et al. | Persistent Data Storage | |
AU767847B2 (en) | Information system | |
Prettyman | PHP arrays | |
Leung | Visual Studio LightSwitch 2012 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20230112 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20240531 |