(57)【特許請求の範囲】
【請求項１】
入力手段、表示手段、メモリ、該メモリに結合された処理装置、及び統合されたスプレッドシート機能を備える表を含むドキュメントを作成して表示するための前記メモリ内に格納され前記処理装置上で実行可能なプログラムを含むコンピュータの動作方法であって、前記処理装置が前記メモリから前記プログラムを読み出して実行するときに、前記方法は、
前記処理装置が前記メモリ上に作成した前記マークアップ言語で記述されたドキュメント内の表を前記表示手段に表示し、前記ドキュメントは前記表と該表の外側のテキストとを含むステップと、
前記処理装置が前記入力手段を介して前記表の中に入力された、データと該データを参照する少なくとも１つの式とを受け取るステップと、
前記処理装置が前記表からの前記データおよび式を前記メモリ上で管理するステップと、
前記処理装置が前記入力手段を介した前記データの変更に応答して前記メモリ上の前記式を再計算するステップと、
前記処理装置が前記メモリ上の前記ドキュメント内の修正された表を前記表示手段に表示し、当該修正された表は前記再計算からの結果を反映するステップと
を含み、
前記再計算するステップは、式の連鎖をトラバースし、前記連鎖内の順序に従って前記式を計算し、前記連鎖内の評価されていない式に依存する任意の式は、前記連鎖の末尾に移動されるステップを含むことを特徴とする方法。
【発明の詳細な説明】
【０００１】
(技術分野)
本発明は、コンピュータプログラム、特にワードプロセッシングプログラムおよびスプレッドシートプログラムに関する。より具体的には、本発明は、スプレッドシートプログラムのスプレッドシートとワードプロセッシングプログラムの表を統合するアーキテクチャに関する。
【０００２】
(発明の背景)
ワードプロセッシングプログラムおよびスプレッドシートプログラムは、2つのよく知られ、広く使用されているソフトウェアアプリケーションである。ユーザは、ワードプロセッシングプログラムを使用して、手紙の草稿を作成したり、本を書いたり、言葉を主体とするその他のドキュメントをコンピュータ上に作成することができる。ワードプロセッシングプログラムは、通常、著者を念頭に置いて設計され、編集機能(たとえば、切り取り、コピー、貼り付け、検索、置換など)、スペルおよび文法チェック、ドキュメント書式設定など、ライティング作業を簡単に行えるようにするツールとユーザインターフェイスを備える。ワードプロセッシングプログラムの例として、Microsoft Corporationの「Word（商標）」およびCorel Corporationの「WordPerfect（商標）」がある。
【０００３】
スプレッドシートプログラムを使用すると、財務記録、会計用スプレッドシート、予算、およびその他の数値セントリック（number-centric）のドキュメントをコンピュータ上に作成することができる。スプレッドシートプログラムは、会計士を念頭において開発されており、データ入力とデータ操作を簡素化するツールおよびユーザインターフェイスを重視している。スプレッドシートプログラムは、通常、セル内への式の入力、データ変更時の自動再計算、複数シート参照、データ型に基づくセルの書式設定(たとえば、日付、通貨、割合など)などの機能を備える。スプレッドシートプログラムの一例に、Microsoft Corporationの「Excel（商標）」アプリケーションがある。
【０００４】
これまで、主に言葉ベースのドキュメントの作成を希望するコンピュータユーザは、ワードプロセッシングプログラムを選択し、数値セントリックのドキュメントの作成を希望するユーザは、スプレッドシートプログラムを選択していた。しかしワードプロセッシングプログラムのユーザがふつうの言葉主体のドキュメントに数値を挿入しスプレッドシートの「見た目」にしなければならない状況もありえる。
【０００５】
このようなクロスオーバー状況に対応するため、ワードプロセッシングプログラムの改良が進められ、数値やその他のデータ型を格納しまとめるのに使用できる視覚的構造である表を備えるようになった。表は、データを列と行に配列したもので、スプレッドシートの「見た目」をエミュレートするようになっている。ワードプロセッシングプログラムのユーザは、表の挿入、レイアウトの修正、およびセル書式の変更により、ユーザのデータに合わせて特定の視覚的表示を実現することができる。複数の隣接するセルをまとめて追加するなどの初歩的な機能をサポートする表さえもある。しかし、これらの機能は自動再計算を行うわけではない。したがって、スプレッドシートとは見かけは似ているが、ワードプロセッシングプログラムの表はスプレッドシートの全機能をサポートしていない。
【０００６】
最近、オブジェクト指向プログラミングおよびOLE技術を使用して統合した機能が豊富になった。豊富な機能を望むワードプロセッシングプログラムのユーザは、OLEを使用することにより、表の代わりに、スプレッドシートオブジェクトをユーザのワードプロセッシングプログラムのドキュメントに埋め込むことができる。これは、本質的に、スプレッドシートプログラム「Excel（商標）」(またはその他のスプレッドシートプログラム)を「Word（商標）」プログラム(またはその他のワードプロセッシングプログラム)で実行されているドキュメント内に埋め込む操作と似ている。埋め込まれたオブジェクトは、ユーザが式を入力し、セルの書式を設定し、関数を再計算し、スプレッドシートプログラムで通常実行できることをすべて行うのに十分な機能を備える。
【０００７】
埋め込まれたスプレッドシートは、視覚的には表に似ており、目的のスプレッドシート機能を備えているが、実際には、ユーザが呼び出さなければならない別個のプログラムである。OLEでは、両方の種類のアプリケーションプログラム-ワードプロセッサとスプレッドシートプログラムをコンピュータにインストールする必要がある。ユーザが埋め込まれたスプレッドシートを更新する場合、マウスポインタを埋め込まれたオブジェクト上のどこかに移動し、左マウスボタンをダブルクリックすることにより(または他の何らかの作動メカニズムにより)スプレッドシートオブジェクトを呼び出す。それに対する応答として、スプレッドシートプログラムのインスタンスが実行され、スプレッドシートの表示が「表の見た目」から番号付きの行と英字付きの列とプログラム固有のメニューを備えるサイズが縮小されたスプレッドシートプログラムに変更される。この状態で、ユーザは、関数を変更する、データを修正する、スプレッドシートの書式を変更する、他のスプレッドシートタスクを実行するといった操作を行える。ユーザは作業を終了したら、マウスポインタをスプレッドシートオブジェクトの外に移動し、左マウスボタンを1回クリックして、フォーカスをワードプロセッシングプログラムのドキュメントに戻す。
【０００８】
OLE方式ではワードプロセッシングプログラムのドキュメント内でスプレッドシートプログラムの全機能を利用できるが、このプロセスは幾分高度であり、通常は、スプレッドシートプログラムとワードプロセッシングプログラムの両方を熟知している経験者向けである。初心者または経験の少ないユーザは、表を見ても、ワードプロセッシングプログラムの表と全機能を使用できる埋め込まれたスプレッドシートオブジェクトとの違いを認識できず混乱する場合がある。ユーザの観点から、視覚的構造が表であるかまたはスプレッドシートであるかに応じて別々の操作を使用する。さらに、テキストの書式設定、スペルチェック、などの一般的なサービスは、埋め込みOLEオブジェクトには通じないため、ユーザはドキュメントと埋め込まれたスプレッドシートの両方に対しこのようなサービスを実行せざるを得ない。
【０００９】
したがって、最終的な表示が視覚的には似ていても、ワードプロセッシングプログラムの表とスプレッドシートは、情報を表示するための2つの完全に独立したメカニズムを備える。そのため、スプレッドシートの機能をワードプロセッシングプログラムの表に組み込む適切な方法が必要である。
【００１０】
インターネットが急速に普及した結果、コンピュータに配送されコンピュータ上でレンダリングされる多くのドキュメントは、HTML(Hyperテキストマークアップ言語)などのマークアップ言語で書かれる。マークアップを言語使用することで、作成者は、ドキュメントの目的の視覚的レイアウトを簡単に構築することができる。いくつかのHTMLドキュメントでは、囲むテキストと統合されているかのように表示され機能する表を備えるものもある。たとえば、金融関係のWebサイトでは、通常、退職金制度、学資預金、または住宅購入などに関する中身の濃い説明が行われており、そこには、ユーザに個人財務情報および目標の入力を勧める表が1つまたは複数それらの説明とともに含まれている。ユーザがデータ値フィールドの入力を終了すると、ドキュメントが表示され、オンザフライで計算を実行しその結果が説明とともに表示される。
【００１１】
ドキュメント内計算の表示にかかわらず、HTMLドキュメントは、ユーザが入力したデータを受け取る電子形式と変わるところはない。ユーザが入力を完了すると、HTMLドキュメントがWebサーバに送信され、そこでユーザデータが抽出され、適切な財務計算が行われる。サーバは、その結果を別のHTMLドキュメントに入れ、ドキュメントをユーザのコンピュータに戻す。送信および返信は非常に速く実行されるため、ユーザは、結果を保持しているHTMLドキュメントがユーザが最初にデータを入力したHTMLドキュメントと異なることに気づかないくらいである。いずれにせよ、従来行われていたスプレッドシートと表の区別はインターネットを基盤とする時代になっても続いている。
【００１２】
(発明の概要)
システムアーキテクチャで、スプレッドシートの機能をワードプロセッシングプログラムおよびHTMLドキュメントで一般に使用する表に統合する。このアーキテクチャは、ドキュメントの一部のように見える表のユーザインターフェイス(UI)を表示し、テキストとその他のドキュメント要素によって囲むことができる。たとえば、HTMLドキュメントでは、表は他の要素とともに構築され、統合されたドキュメントとしてまとめられたHTML要素である。表のUIは、レンダリングされると、視覚的には非編集モードの表と編集モードのスプレッドシートに似ている。しかし、表の感触は、ユーザが複数の段落を入力する、リストを作成する、セルを分割するなどの点でワードプロセッシングプログラムの表とほとんど同じである。しかし、代表的なワードプロセッシングプログラムの表とは異なり、この表はスプレッドシートの全機能をサポートする。
【００１３】
この表のUIをもとに、アーキテクチャの一実装では、データ処理機能と表示機能とを分離している。このアーキテクチャには、テーブルのサイズ変更、選択、切り取り、コピー、貼り付け、分割、結合、表書式設定などの特性を含むドキュメント内での表の表示方法を管理する表表示マネージャが含まれる。再計算、式の処理、並べ替え、参照などの表に対するスプレッドシート機能を管理するスプレッドシート機能マネージャも備える。
【００１４】
この分岐（二股）アーキテクチャ（bifurcated architecture）では、同一ドキュメント内で表が互いに別々になっているとしても一方の表の中のセルが他方の表の中のセルを参照できるクロス表参照機能をサポートする。このアーキテクチャでは、ユーザは、クロス表を参照機能の一部として参照編集操作を使用し、他の表の中のセルを参照することができる(たとえば、ポインタをセルに移動し、クリックしてそのセル内の内容を捕捉する)。さらに、このアーキテクチャは、ドキュメント内のすべての表にわたる汎用的な自動的再計算にも対応する。したがって、ユーザが一方の表の内容を修正すると、その修正の影響を受ける表の中の式に対し自動的に再計算が行われる。
【００１５】
また、一方の表が他方の表のセル内に入れ子になっている入れ子表構造もサポートする。他の多くのアーキテクチャ面の特徴とUIの特徴についても説明する。
【００１６】
(好ましい実施形態の詳細な説明)
本開示では、スプレッドシートの機能をワードプロセッシングプログラムおよびHTMLドキュメントで一般に使用する表に統合するアーキテクチャについて説明する。このアーキテクチャは、ユーザがワードプロセッシングプログラムの表の最高の機能とスプレッドシートエンジンの最高の機能とを組み合わせて使用する単一のメカニズムを備える。
【００１７】
記載した実施では、このアーキテクチャは、マークアップ言語(たとえば、HTML)で書かれたドキュメント内に統合された表とスプレッドシートを配置する。この方法では、ユーザは、表のレイアウト変更(たとえば、セルの結合と分割)や、従来別の表計算アプリケーションにのみ関連付けられていたデータ固有の計算および書式設定機能をはじめとする、テキストと表の両方の豊富なHTML書式設定オプションを利用することができる。しかし、このアーキテクチャは、マークアップ言語を基盤としない他の種類のドキュメントでも使用できることに注意されたい。
【００１８】
アーキテクチャ
図1は、スプレッドシートの機能をワードプロセッシングプログラムの表に統合するアーキテクチャ100を示している。アーキテクチャ100は、スタンドアロンのコンピュータ、ネットワークサーバコンピュータ、ネットワーククライアントコンピュータ上に実装するか、またはサーバおよびクライアントの両方に分散させることができる。アーキテクチャ100は、オプションによりスプレッドシートエンジン112が使用できるドキュメントレンダラ102、表オブジェクト104、スプレッドシートオブジェクト106、スプレッドシートエディタ108、ワークブック110、スプレッドシートエンジン112、および1つまたは複数の非コアワークシート関数（non-core worksheet functions）114(1)-114(W)を含む。
【００１９】
アーキテクチャ100では、統合された表/スプレッドシートのデータ処理機能を表示機能から分離している。この方法では、アーキテクチャは、2つのシステムマネージャ、つまり表表示マネージャ116およびスプレッドシート機能マネージャ118の連携動作として特徴づけることができる。表表示マネージャ116は、表のドキュメント内での表示を管理し、テーブルのサイズ変更、選択、切り取り、コピー、貼り付け、分割、結合、表書式設定などのタスクを簡単に行えるようにする。表表示マネージャ116は、表オブジェクト104、スプレッドシートオブジェクト106、およびスプレッドシートエディタ108を含む。スプレッドシート機能マネージャ118は、再計算、式の処理、並べ替え、参照などの表に対するスプレッドシート機能を管理する。スプレッドシート機能マネージャ118は、スプレッドシートエンジン112およびワークシート関数114を含む。この分岐アーキテクチャでは、スプレッドシート機能マネージャ118は、表のレイアウトまたはその他の視覚的機能には関係せず、表表示マネージャ116は、データ管理、式、および再計算プロセスに関係しない。
【００２０】
分岐アーキテクチャ100は、複数の表にわたるクロス表参照機能をサポートしているという点で好都合である。また、式の入力時に参照編集機能を利用できるため、他のセルを選択し、式で使用されている内容をバリアント型（variant）として取り出す場合に便利である。さらに、このアーキテクチャでは、ユーザが単一の表に修正を加えた場合にそれに応答してドキュメント内のすべての表にわたって汎用的な自動的再計算を簡単に実行できる。
【００２１】
ドキュメント120は、ドキュメントレンダラ102上で作成されレンダリングされる。ドキュメント120は、1つまたは複数のテキストベースの本文要素122と1つまたは複数の表124とを組み合わせたものである。説明のために、ドキュメント120をXML(拡張可能マークアップ言語)などのマークアップ言語で作成する。XMLドキュメントは、XSL(拡張可能スタイルシート言語)を使用して変換し、直接HTML(Hyperテキストマークアップ言語)としてレンダリングすることができるという点で優れている。この場合、レンダラ102は、HTMLドキュメントを処理しレンダリングするブラウザまたはその他のアプリケーションとして実装することができる。表124は、HTMLの表としてレンダリングされる。
【００２２】
図2は、本文要素122(1)、122(2)、122(3)および本文要素122(2)と122(3)との間に配置された表124を備えるドキュメント例120を示している。この例では、ドキュメント120はJones氏宛てに書かれた手紙であって、さまざまな家庭改善プロジェクトとそれらのプロジェクトに関連するコストを説明している。図2では、表124は非編集モードであり、標準のワードプロセッシングプログラムの表に似ており、3つの列202(1)-202(3)と5つの行204(1)-204(5)で構成されている。
【００２３】
図3は、ユーザが表124を編集しているときのドキュメントと同じドキュメント120を示している。表124の「見た目」は、従来の表よりもスプレッドシートによく似ていることに注意されたい。表124は、列ヘッダ302(1)、302(2)、および302(3)をまとめ、また行ヘッダ304(1)-304(6)もまとめている。表124は、列展開コントロール306および行展開コントロール308を備えており、表を簡単に展開できるようになっている。
【００２４】
この例では、ユーザはセルC6に総計式を入力している。ユーザは、マウスポインタ310を使用して、式に入力するセルC2からC5の配列を参照している。確認した後(たとえば、左マウスボタンを離した後)、セルC2-C5への参照がセルC6内の総計式に挿入され、式が計算され、列C内に総額が加算される。結果$12,060がセルC6に挿入される。表のユーザインターフェイスには多数の機能があるが、これらについて、以下の「ユーザインターフェイスの機能」という見出しの項で詳述する。
【００２５】
図1を再び参照すると、表オブジェクト104およびスプレッドシートオブジェクト106は、表124用の編集機能を備えており、たとえば、表のサイズ変更、選択、切り取り、コピー、貼り付け、分割、結合、表書式設定、およびその他多数のリッチなスプレッドシートイベントがある。スプレッドシートエンジン112は、式作成、参照編集、再計算などの機能を含む、表124に対するスプレッドシート機能を備える。アーキテクチャに関しては、表コンポーネントとスプレッドシートコンポーネントは互いに区別されるが、スプレッドシートは表に依存し、表はスプレッドシートを補助するための特別な通知とイベントを備える。これにより、いずれのコンポーネントも他方のコンポーネントに直接影響を及ぼすことなく機能を追加することができる。
【００２６】
スプレッドシートエンジン112は、表124内のユーザの活動を示すイベントを受け取るグリッドオブジェクト130を含み、さまざまなオブジェクト間のアクションを調整する。ドキュメント120内に作成された表ごとにグリッドオブジェクト130が1つある。ワークブック110は、すべてのグリッドオブジェクト130を追跡し、クロス表の参照を解決する。作成後、グリッドオブジェクト130はワークブック110に登録され、表の更新時に加えることができる。グリッドオブジェクトは、レンダラ102で保持されているHTMLツリーから値をフェッチするスプレッドシートオブジェクト106(これは、技術的にはブラウザビヘイビアであるが、任意のオブジェクトで構わない)とのインターフェイスを備える。
【００２７】
グリッドオブジェクト130は、書式の表132とセルの表134の2つの表を保持する。書式の表132は、表124の各セルのデータ形式に関する情報を保持する。たとえば、セルには、日付、数値、金額、割合などを格納することができる。セルの表134には、表124内の各セルの実際のデータを格納する。図3に示されている例では、書式の表132は、セルA1-A6、B1-B6、およびC1がテキストであり、セルC2-C5が米国通貨形式で表示されるという情報を含む。
【００２８】
セルの表134は、テキスト、値、および式などの、表124のセル内の実際のデータを保持する。セルの表134は、複数のセル136(1)-136(C)へのポインタを表内のセルごとに1つずつ格納する。各セル136は、バリアント型のオブジェクトで、セルの解析済みの値とそのセルに関する完全な情報の参照を含む。セルにテキストまたは数値データが含まれる場合(たとえば、図3のセルA1-A6、B1-B5、およびC1-C5)、バリアント型に直接格納される。図3のセルC6内の総計式などの式は、バリアント型として格納され、式マネージャ140(後述)によって保持される適切な式オブジェクトへのポインタを含む。
【００２９】
スプレッドシートエンジン112は、すべての式と、式、データ値、および参照(たとえば、D4:E23など)の構文解析作業を処理する式マネージャ140を備える。ワークブック110は、式マネージャ140と登録されているグリッド130とを連携するものとして使用される。式マネージャ140は、表内のイベントが変化した場合にその変化への応答としてすべての式の再計算を実行する再計算エンジン142を保持する。一実施例では、再計算エンジン142は、双方向リンクリストにドキュメントの式を保持するが、これは、「式連鎖」とも呼ばれる。再計算イベント(たとえば、ユーザによる新しいデータ値または新しい式の入力)に続いて、再計算エンジン142はリストをトラバースし、そのイベントの影響を受けると思われる式を評価する。
【００３０】
現在の式がまだ評価されていない他の式に依存している場合、現在の式はリストの終わりに移される。再計算が1回行われると、式リストが自然な順序で編成され、新しい式が追加されない限りその後の再計算で順序を変更する必要はない。再計算がリストの終わりにすでに突き当たっている式に至ったときに、この式が未計算依存関係にそのまま依存していると発見した場合、式は循環参照を含む。この場合、再計算エンジンは循環参照エラーを返す。
【００３１】
式マネージャ140はさらに、式の構文解析を行う構文解析系144も備える。一実施例では、構文解析系144は再帰的下向き解析系で、ストリームからトークン（字句）を抽出し、そのトークンを文字サイズ演算型の配列とバリアント型オペランド（演算数）の平行配列に付加する。完了すると、構文解析系144は新しい式オブジェクト146を作成し、それに構文解析済み情報からなる2つの配列を割り当てる。したがって、式マネージャ140は構文解析系144が返す構文解析済みの式、現在の結果、式の型、および現在の式の状態など、式情報を含む1つまたは複数の式オブジェクト146(1)-146(B)を保持する。
【００３２】
構文解析系144は、式をはじめてロードしたときや値をはじめて編集したり参照したときなど、必要なときのみセルの構文解析を行う遅延構文解析系であるのが好ましい。ただし、表の中のほとんどのセルは、式によって参照される値を含まず、したがって、非式セルは必要に応じてのみ構文解析される。表をロードするときに式を含むセルが見つかった場合、そのセルの構文解析が即座に行われ、再計算連鎖に加えられる。セルに式が含まれていない場合、式に値が必要になるまで構文解析を行わない。
【００３３】
一実施例では、通常、準計算（semicalculation）、および非計算（non-calculation）の3種類の式がある。通常式は、依存関係が変更されたときのみ再評価される。準計算式は、再計算エンジン142が再計算演算を実行することに再評価される。非計算式は、評価されることは全くない。非計算式は、入れ子になっている表(つまり、表の中に表がある)と表の中に入れ子になっているフリーフローティングフィールド(つまり、単一表セル)またはその他のフリーフローティングフィールドを処理する特別な型の式である。
【００３４】
外側の表のセルの内側に入れ子になっている内表の場合について考察する。内表は再計算の後異なる値に変わる式を含む場合、外表のセルの値も変わる。内表に付加されている外表内に式がないので、このような依存関係はどこでもエンコードされない。このような場合、非計算式は外表のセル内で設定され内側の計算から得た結果の値を再フェッチする。したがって、これは再計算の通常の依存関係管理に関わり、外表への参照はすべて適宜更新される。入れ子の表については、以下で詳述する。
【００３５】
一実施例では、式オブジェクト146はCOMラッパー(図に示されていない)が所有し、これはさらに式が置かれているグリッド130内のセルオブジェクト136が保持する。式オブジェクト146は、それ自体、再計算エンジン142によって保持されている式の双方向リンクリストの一部である。式オブジェクト146は、ホームの行と列およびグリッド130内のセルオブジェクト136への参照を含む。これらの参照により、再計算エンジン142は、複数の表からの式を含む再計算連鎖を下り、指定された式がどの表に属するかを容易に判別できる。式の節約から表の削除にいたるまでさまざまな操作は、この連鎖をトラバースできるかどうかにかかっている。
【００３６】
式マネージャ140はさらに、参照されているセルグループを構文解析する。たとえば、式マネージャ140は「A5」をセル参照として、「D4:E23」を複合長方形領域参照として、「$F$30」を絶対参照として、「Table5!D5」をクロス表参照として、「Field3」を表全体クロス表参照として、「A5:D5 B3:B6」を共通部分として、「D3,E4」を和集合として解析する。
【００３７】
非コアワークシート関数114(1)-114(W)はオプションの要素である。このような関数の例としては、分析関数、統計関数、および三角関数がある。モジュール方式のアーキテクチャ100であるため、不要なワークシート関数を削除したり、新しいワークシート関数を追加したりすることが自由自在に行える。
【００３８】
スプレッドシートオブジェクト106は、スプレッドシートエンジンの外部に置かれているグリッドオブジェクト130と対になるものである。表124ごとに、スプレッドシートオブジェクト106とグリッドオブジェクト130のペアが1つある。スプレッドシートオブジェクト106は、ドキュメントレンダラ102からイベントを受け取り、それを少し処理して、イベントをグリッドオブジェクト130に渡すビヘイビアを定義する。それらのイベントに対する応答として、グリッドオブジェクト130はセルの表134内の表ごとのセルデータおよび/または書式の表132内の書式設定情報を更新する。
【００３９】
スプレッドシートビヘイビア106は、3つのオブジェクト、GridBehavior 150、CellEditing 152、およびSpreadsheet 154を備える。GridBehaviorオブジェクト150では、グリッドオブジェクト130と個々のHTMLの表セルとの間に抽象化のレイヤを1つ配置し、グリッドオブジェクト130でHTMLの値およびスタイルにアクセスできるようにしている。GridBehaviorオブジェクト150は、共通のインターフェイスによるHTML要素のラッパーであり、グリッド130はHTMLの表の特定の構造を認識できる必要はない。さらに、GridBehaviorオブジェクト150は、「参照編集」操作の表固有の部分を管理する。
【００４０】
CellEditingオブジェクト152およびSpreadsheetオブジェクト154はHTMLツリーおよび表ビヘイビア104と直接相互作用し、グリッド130にイベントを送る。Spreadsheetオブジェクト154では、スプレッドシートに影響を与えるアクションの元に戻すレコードを記録する必要がある。
【００４１】
CellEditingオブジェクト152は、セルに対するユーザレベルでの編集を管理する。これはセル内データ値のユーザによる編集に関係するイベントを処理する機能を持ち、ユーザが式を編集できるようにする式編集ボックスなどの何らかの編集用ユーザインターフェイス(UI)要素を備える。式を編集するときに、移動可能な式編集ボックスがセルの位置の上に配置され、式が中に収まるように必要に応じてサイズが変更される。ローカライズした編集ボックスを使用することで、ユーザ側で表セル内に式全体を詰め込む必要がありユーザがその結果で置き換える必要のある式を表示し、その表示を消すときに表(または段落)が異様なサイズに変更されるというUIに関する潜在的な問題をなくすことができる。
【００４２】
CellEditingオブジェクト152は、さらに、式編集ボックスを表示したときの参照編集操作をもサポートする。上記のように、参照編集操作を使用すると、ユーザはマウスポインタ(またはその他のフォーカスメカニズム)を使用してセルを視覚的に参照することができ、応答として、そのセルデータへの参照を現在の式編集ボックス挿入する。式編集ボックスについては、以下で詳述する。CellEditingオブジェクト152は、セルの編集がアクティブになっているときのみ存在する。
【００４３】
スプレッドシートオブジェクト106は、表またはフリーフローティングフィールドを挿入したりドキュメント120内の現在の選択に基づきコマンドを適切な表に送るなどの最上位の作業を処理する。スプレッドシートオブジェクト106はさらに、ワークブック110を作成し管理する。
【００４４】
統合された表とスプレッドシートのモデルを採用することにより、ユーザがドキュメントを作成する前に予めそのドキュメント内のデータの構造を選択する必要がなくなる。歴史的には、表データの表示をより細かに調整する必要がある場合、ユーザはワードプロセッシングアプリケーションを選ぶ傾向があった。他方、データの計算が必要な場合は、一般に、表計算アプリケーションを選択していた。この統合アーキテクチャでは、ユーザは複数の異なる種類のデータを1つのドキュメントにまとめることができる。
【００４５】
さらに、スプレッドシート機能を表の中に組み込むことより、ユーザはその表を中心にドキュメントを作成できる。表計算アプリケーションでは、ユーザは、ドキュメントの全内容についてグリッドレイアウトに制約されている。統合アーキテクチャでは、複数の表を含み、それぞれの表ではデータを値として書式設定し、データを各種の表の全体にわたる計算の中で使用できる、リッチなドキュメントを作成することができる。
【００４６】
フリーフローティングフィールドによるアーキテクチャ
図4は、図1に示されているものに似たアーキテクチャ400を示しているが、フリーフローティングフィールドとともに単一のドキュメント内に複数の表が収まるようにスケーリングするアーキテクチャを示している。アーキテクチャ400は、スタンドアロンのコンピュータ、ネットワークサーバコンピュータ、ネットワーククライアントコンピュータ上に実装するか、またはサーバおよびクライアントの両方に分散させることができる。
【００４７】
図4では、レンダラ102によってレンダリングされたドキュメント402は複数のテキストベースの本文部分404(1)-404(3)、2つの表406(1)と406(2)、および1つのフリーフローティングフィールド(FFF)408を備えている。フリーフローティングフィールド408は、テキストベースの本文の真ん中に置かれていたり、テキストの自然な部分として現れるなど、ドキュメント内のどこにでも挿入できるスプレッドシートの値に似ている。
【００４８】
図5および6は、複数の表および/またはフリーフローティングフィールドが含まれる表を備えるドキュメントの2つの例を示している。図5では、ドキュメント500は、第1のまたは外側の表502および外側の表502のセルB3内に入れ子になっている第2のまたは内側の表504を含む。表を入れ子にできるということは、従来のスプレッドシートプログラムにはないこのアーキテクチャの特徴の1つである。図6では、ドキュメント600は3つの表602、604、および606と、現在編集中のフリーフローティングフィールド608を備えている。
【００４９】
再び図4を参照すると、スプレッドシートエンジンは、グリッドオブジェクト130(1)、130(2)、および130(3)で表されているように、ドキュメント420内の表およびフリーフローティングフィールドごとに1つのグリッドオブジェクトを備える。さらに、スプレッドシートオブジェクト106(1)および106(2)で表されているように、ドキュメント402内の表406ごとに1つのとスプレッドシートビヘイビアがある。アーキテクチャ400はさらに、ドキュメント内のフリーフローティングフィールド408ごとに1つのフリーフローティングフィールドビヘイビア410を備える。その結果、ドキュメント402内の表またはフリーフローティングフィールドごとに対応するグリッドオブジェクトおよびスプレッドシート/FFFビヘイビアの1つのペアがある。
【００５０】
フリーフローティングフィールドオブジェクト410をサポートするために使用されるグリッドオブジェクト130(2)は、上で詳述した、表をサポートするために使用されるグリッドオブジェクト130(1)および130(3)と本質的に同じである。1つの小さな違いとして、フリーフローティングフィールド408はセルを1つだけ持つ表に似ているためグリッドオブジェクト130(2)はセルオブジェクト136を1つだけ含むという点があげられる。
【００５１】
フリーフローティングフィールドのビヘイビア410は、FFFBehaviorオブジェクト412、CellEditingオブジェクト414、およびSpreadsheetオブジェクト416の3つのオブジェクトを備える。CellEditingオブジェクト414およびSpreadsheetオブジェクト416は、図1を参照しながら上で説明したように、スプレッドシートビヘイビア106のとまったく同じである。FFFBehaviorオブジェクト412は、フリーフローティングフィールドのコンテキストにおいてGridBehaviorオブジェクトの代わりになる。GridBehaviorのように、FFFBehaviorオブジェクト412はグリッドオブジェクト130 (2)用のインターフェイスを備え、フリーフローティングフィールドの「参照編集」操作を管理する。
【００５２】
コンピューティング環境の例
図7は、図1および4の統合スプレッドシート/表アーキテクチャを実装するために使用できる独立のコンピューティングデバイス700の一例を示している。コンピューティングデバイス700は、汎用コンピュータ(たとえば、ワークステーション、サーバ、デスクトップコンピュータ、ラップトップコンピュータなど)、ハンドヘルドコンピューティングデバイス(たとえば、PDA、PIMなど)、携帯通信デバイス(たとえば、計算機能を備えた携帯電話)、またはその他の種類の専用電子機器(たとえば、セットトップボックス、ゲームコンソールなど)をはじめとする、さまざまな方法により実装できる。
【００５３】
図の例では、コンピューティングデバイス700は、1つまたは複数のプロセッサまたは処理装置702、システムメモリ704、およびシステムメモリ704などの各種システムコンポーネントをプロセッサ702に結合するバス706を備える。バス706は、メモリバスまたはメモリコントローラ、周辺機器バス、グラフィック専用高速ポート、およびさまざまなバスアーキテクチャを使用するプロセッサまたはローカルバスなど、1つまたは複数の種類のバス構造を表している。システムメモリ704は、読み取り専用メモリ(ROM)708およびランダムアクセスメモリ(RAM)710を備える。コンピューティングデバイス700内の要素間の情報伝送を助ける基本ルーチンを含む基本入出力システム(BIOS)712は、ROM 708に格納される。
【００５４】
コンピューティングデバイス700はさらに、1つまたは複数のハードディスク(図に示されていない)との間で読み書きを行うハードディスクドライブ714を備える。取り外し可能磁気ディスク718との間で読み書きを行う磁気ディスクドライブ716、CD ROMやその他の光媒体などの取り外し可能光ディスク722との間で読み書きを行う光ディスクドライブ720を備えることができるコンピューティングデバイスもある。ハードディスクドライブ714、磁気ディスクドライブ716、および光ディスクドライブ720は、ハードディスクドライブインターフェイス724、磁気ディスクドライブインターフェイス726、および光ドライブインターフェイス728によりそれぞれ、バス706に接続される。それとは別に、ハードディスクドライブ714、磁気ディスクドライブ716、および光ディスクドライブ720は、SCSIインターフェイス(図に示されていない)によりバス706に接続できる。磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)などの他の種類のコンピュータ可読媒体も動作環境例で使用することができる、または代わりに使用することができる。
【００５５】
ROM 708、RAM 710、ハードディスク714、磁気ディスク718、または光ディスク722には、オペレーティングシステム730、1つまたは複数のアプリケーションプログラム732、その他のプログラムモジュール734、およびプログラムデータ736などのプログラムモジュールをいくつでも格納できる。一例として、アーキテクチャ100は、メモリに格納され処理装置702によって実行される1つまたは複数のプログラム732またはプログラムモジュール734として実装することができる。ドライブおよび関連コンピュータ可読媒体は、コンピューティングデバイス700用のコンピュータ可読命令、データ構造、プログラムモジュール、およびその他のデータを格納する不揮発性ストレージを備える。
【００５６】
いくつかのコンピューティングデバイス700では、ユーザは、キーボード738およびポインティングデバイス740などの入力デバイスを介してコマンドおよび情報を入力できる。他の入力デバイス(図に示されていない)としては、マイク、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどがある。ただし、このような種類の入力デバイスを備えていないコンピューティングデバイスもありえる。これらの入力デバイスやその他の入力デバイスは、バス706に結合されているインターフェイス742を通じて、処理装置702に接続されている。いくつかのコンピューティングデバイス700では、ディスプレイ744(たとえば、モニタ、LCD)は、ビデオアダプタ746などのインターフェイスを介してバス706に接続される。ただし、このような種類の表示デバイスを備えていないデバイスもありえる。コンピューティングデバイス700はさらに、スピーカやプリンタなどの他の周辺出力デバイス(図に示されていない)も備えることができる。
【００５７】
一般に、コンピューティングデバイス700のデータプロセッサは、コンピュータのさまざまなコンピュータ可読記憶媒体に異なる時期に格納されている命令を使ってプログラムされる。プログラムおよびオペレーティングシステムは、通常、たとえば、フロッピー(登録商標)ディスクまたはCD-ROMで、あるいはインターネット上で配布される。それらの媒体からコンピューティングデバイス700の補助記憶装置にインストールまたはロードされる。これらの命令は、実行時にコンピューティングデバイスの主記憶装置に少なくとも一部はロードされる。ここで説明しているコンピューティングデバイスは、これらの種類やその他のさまざまな種類のコンピュータ可読記憶媒体を含み、これらの媒体にはマイクロプロセッサまたはその他のデータプロセッサと連動して後述のステップを実行する命令またはプログラムが格納されている。このサービスシステムはさらに、後述の方法および手法によりプログラムしたときにコンピューティングデバイス自体も含む。
【００５８】
説明のため、プログラムおよび、オペレーティングシステムなどの他の実行可能なプログラムコンポーネントはここでは異なるブロックに示されているが、このようなプログラムおよびコンポーネントはさまざまな時期に、コンピューティングデバイス700の異なるストレージコンポーネント内に置かれ、コンピュータのデータプロセッサにより実行されることは理解されるであろう。
【００５９】
コンピュータ700を有線接続または無線接続によりネットワークに接続し、1つまたは複数のリモートコンピュータと情報をやり取りすることができることに留意されたい。このようなネットワークを背景として、アーキテクチャ100の一部を格納し実行するようにコンピュータ700を構成し、その一方で1つまたは複数のリモートコンピュータにアーキテクチャの他の部分を格納し、実行するようにできる。たとえば、ドキュメントレンダラ102を一方のコンピュータ上に置き、残りのコンポーネントを別のコンピュータ上に配置することができる。その結果、アーキテクチャが分散され、さまざまなコンポーネントが異なるコンピュータ可読媒体上に格納されることになる。
【００６０】
一般的演算
図8は、図1の表/スプレッドシートアーキテクチャ100によって実装される表/スプレッドシートプロセス800を示している。プロセス800は、図7のコンピューティングデバイス700などのコンピュータ上に格納され、実行されるソフトウェアにより実現できる。したがって、プロセス800は、プロセッサ装置702などの処理システム上で実行したときに、図8のブロックで示されている演算とタスクを実行するコンピュータ実行可能命令として実装することができる。
【００６１】
ブロック802で、アーキテクチャ100は、ドキュメントの一部として表示される新しい表UIの対応する一組の表104、スプレッドシート106、およびグリッドオブジェクト130を作成する。一実施例では、GridBehaviorオブジェクト150、CellEditingオブジェクト152、およびSpreadsheetオブジェクト154が最初その新しい表について作成され、その後、Spreadsheetオブジェクト154がスプレッドシートエンジン112内に関連するグリッドオブジェクト130を作成する。グリッドオブジェクト130は、書式の表132とセルの表134を含む。これが最初のスプレッドシートの場合、ワークブック110も作成される。次に、グリッド130およびワークブック110により、他のオブジェクト、たとえば、作成する表内の各セルの式マネージャ140およびセル136が作成される。
【００６２】
ブロック804で、ユーザが表にデータおよび/または式を入力したことに応答して、このアーキテクチャはユーザ入力を受け取り、それをスプレッドシートエンジン112に渡し、処理する。より具体的には、続く実施例において、Spreadsheetオブジェクト154がドキュメントレンダラ102から表構文解析済み通知を受け取り、それを新しい表のグリッド130に渡す。たとえば、ユーザが以下の表を作成するとする。
【００６３】
【表１】
0004522650.tif 000002
【００６４】
この表に対するHTMLコードは以下のようになる。
<table>
<tr><td>7</td><td FMLA="=A1+A2">15</td></tr>
<tr><td>8</td><td></td></tr>
</table>
GridBehaviorオブジェクト150によって提供される列挙方法を使用すると、4つのセル136 (1)-136 (4)が表内の既存のセルごとに1つずつ取り出される。Spreadsheetオブジェクト154は、セルA1についてはデータ値7、セルA2についてはデータ値8、セルB1については式を受け取り、この情報をスプレッドシートエンジン112に渡す。
【００６５】
このアーキテクチャは、ブロック806で、ユーザの入力に基づき、ユーザ入力情報を構文解析するか、それとも構文解析を後で行うよう遅らせるかを決定する。このアーキテクチャでは、式をはじめてロードしたときや値をはじめて編集したり参照したときなど、必要なときのみセルの構文解析を行う遅延構文解析系を採用するのが好ましい。ただし、表の中のほとんどのセルは、式によって参照される値を含まず、したがって、非式セルは必要に応じてのみ構文解析される。表をロードするときに式を含むセルが見つかった場合、そのセルの構文解析が即座に行われ、再計算連鎖に加えられる。セルに式が含まれていない場合、式に値が必要になるまで構文解析を行わない。
【００６６】
ブロック808で、構文解析が必要になったと仮定して(つまり、ブロック806からの「いいえ」分岐)、ユーザが入力した情報が構文解析され、この情報に基づき書式の表132とセルの表134が更新される。たとえば、セルA1が最初に構文解析されるが、その順序は重要でない。構文解析系144は、式が存在するかどうかを評価する。この場合、式が見つからず、セルは構文解析が行われず、後で構文解析するというマークが付けられる。セルの表134内の対応する0,0エントリが、構文解析されていないセル136(1)を指すように設定される。
【００６７】
セルB1が次に構文解析される。ここで、構文解析系144が式「FMLA」属性(つまり、「=A1+A2」)を見つけ、式文字列を構文解析し、適切なバリアント型を返す。このバリアントは新しいセル136(2)内に置かれ、このセルは、セルの表134の適切な位置0,1に格納される。さらに、この式は再計算エンジン142で保持されている式の連鎖に追加される。
【００６８】
セルA2およびB2は、いずれのセルも式を含まないためA1と同様にして構文解析され、構文解析されていないセル136(3)および136(4)への参照がセルの表134に追加される。すべてのセルの構文解析が完了すると、再計算エンジンにより第1の再計算が開始され、式が含まれるセル内に表示する実際の値を決定する。
【００６９】
ブロック810で、このアーキテクチャは、再計算が適切かどうかを判別する。式によって参照されない新しいデータ値の挿入など、再計算を必要としないユーザ入力もある。再計算が必要ない場合、流れはブロック814に続き、そこでユーザ入力を考慮して表を更新する必要があるかどうかを判別する。
【００７０】
ブロック812で、再計算が適切であると仮定すると(つまり、ブロック810からの「はい」の分岐)、ユーザ入力の影響を受けている可能性のあるさまざまな式が再計算される。現在の例で、値をセルの表134のセル136に入力する操作により、登録済みのリスナーへのデータ変更通知がトリガされ、グリッドオブジェクト130を含む。グリッドオブジェクト130では、変更されたセルを識別し、その通知を式マネージャ140に転送し、これにより、再計算が必要な場合に変更されたセルに応じて式に汚れているというマークを付ける。
【００７１】
次に、グリッドオブジェクトは再計算エンジン142を呼び出し、再計算式連鎖上でループし、各種の影響を受ける式を再計算する(ブロック812(1))。式連鎖の中で式を評価している間、構文解析が行われないままであった未構文解析セルの構文解析を行える(ブロック812(2))。この場合、式=A1+A2が評価されると、再計算エンジンは、それらのセルが構文解析されていないことを発見する。即座に、構文解析系144にセルの完全構文解析を要求する。構文解析系144は構文解析を実行し、値7および8をセルの表134に入力する。その後、再計算エンジンは構文解析系144が見つけた新しい値を使用して式=A1+A2を評価することができる。
【００７２】
再計算エンジン142が終了すると、制御権がワークブック110に戻される。ワークブック110は、再計算エンジン142にコールバックし、再計算サイクルの結果としてどの式が変更されたかを認識する。次に、ワークブック110は式を保持しているグリッドオブジェクト130を見つけ、それを呼び出して、結果が変更された式を含むセルを保存する。
【００７３】
ブロック814で、このアーキテクチャは、再計算の後に結果は変更されたかどうかを判別する。結果は変更されていなければ(つまり、ブロック814からの「いいえ」分岐)、プロセスの流れは次のユーザ入力のためブロック804に続く。逆に、結果が変わっている場合(つまり、ブロック814からの「はい」分岐)、アーキテクチャ100により、更新された表に修正された値がロードされ、更新された表がドキュメントの一部としてレンダリングされる(ブロック816)。
【００７４】
上の例では、ユーザがデータまたは式を入力したと仮定していることに注意されたい。またユーザは、表の中の1つまたは複数のセルの書式を変更することもできる。プロセス800は本質的に同じ方法で書式を変更を処理するが、セルの表134ではなく書式の表132の変更を扱う。
【００７５】
ユーザインターフェイスの機能
アーキテクチャ100/400では、レンダリングされたドキュメント内で多数のユーザインターフェイス(UI)機能をサポートしており、その表が単なる表だけでなく全機能を備えるスプレッドシートでもあることがユーザに伝達される。これらのUI機能については、図2、3、5、および6を参照しながら、別々に後述する。これらの機能は、アーキテクチャ100/400内のさまざまなコンポーネントの基本操作および内部メカニズムと同調している。これらの態様については、本開示の後のほうの「機能の特長」という見出しの項で詳述する。
【００７６】
スプレッドシート機能を表に組み込む主な利点の1つに、ドキュメントが主に表計算アプリケーションによって作成されたスプレッドシートドキュメント(たとえば、「Excel（商標）」プログラムから出力される「.xls」ファイル)なのか、それともワードプロセッシングアプリケーションによって作成されたワードプロセッシングドキュメント(たとえば、「Word（商標）」プログラムから出力された「.doc」ファイル)なのかをユーザが考えなくて済むという点が挙げられる。その代わりに、ユーザはテキストとスプレッドシート/表コンポーネントの両方を含むことができるHTMLドキュメント(またはXMLドキュメントなどのその他のマークアップ言語ベースのドキュメント)を作成する。スプレッドシート機能を表の中に組み込むことにより、ユーザは、スプレッドシートプログラムの場合のように、すべてのドキュメントコンテンツに対するグリッドレイアウトに制限されることなく、表を中心としてドキュメントを作成することができる。
【００７７】
統合されたヘッダ
表124では、ユーザが表を編集しているかどうかに応じて「表の見た目」(図2)と「スプレッドシートの見た目」(図3)とを相互に切り替えられる。スプレッドシートの見た目は、セルをアクティブに編集したり、ポインタを表の上で動かしたり、またはその他の何らかの操作を行うことなど、さまざまな方法で表示させることができる。図3に示されているように、スプレッドシートの見た目には列ヘッダ302(1)-302(3)および行ヘッダ304(1)-304(6)が含まれ、それぞれ、表の列および行と統合される。視覚的には、列ヘッダ302は列の真上に表示され、文字A、B、Cなどがラベルとして付けられ、行ヘッダ304は行の左に配置され、番号1、2、3などがラベルとして付けられる。
【００７８】
知能的な選択機能
このアーキテクチャは、ユーザによるセル選択時にセル内のコンテンツの型を見分ける高度なインテリジェント機能を備えている。たとえば、セルにデータ値、テキスト、または式のいずれが含まれているかを判別する。選択されたセルにテキストまたは値が含まれる場合、UIに、この選択がセル編集可能状態にある文字ベースのカーソルとして表示される。選択されたセルに式が含まれている場合、このUIでは、式の結果全体をハイライト表示にすることによりその選択を示す。第2の選択ジェスチャにより、ユーザは式編集ボックス内の式を編集することができる。
【００７９】
キーの処理
いくつかのキーには、セルの内容に応じて異なる解釈が割り当てられる。このような動的な解釈により、ワードプロセッシングプログラムの表に注目する場合とスプレッドシートに注目する場合の競合状態に対処する。たとえば、「Enter」キーは、通常、ワードプロセッシングプログラムでは復帰改行を意味するが、スプレッドシートプログラムでは次のセルへの移動を意味する。
【００８０】
セルにテキスト(たとえば、図3のセルA1-A6、B1-B5、およびC1)が含まれる場合、アーキテクチャはこのセルを、主に、ワードプロセッシングベースのセルであると解釈し、ユーザがワードプロセッシングアプリケーション内で作業しているかのようにキーを処理する。したがって、「Enter」キーは復帰改行を意味し、「Tab」キーはある距離へのタブ移動を意味し、セルの先頭以外の場所で入力された「=」キーは記号と同じであって式を表さないなどとなる。
【００８１】
セルに式またはデータ値(たとえば、図3のセルC2-C6)が含まれる場合、このセルは、主に、スプレッドシートベースのセルであると解釈され、ユーザが表計算アプリケーション内で作業しているかのようにキーを処理する。したがって、「Enter」キーおよび「Tab」キーは、次のセルに移動するためのナビゲーションコマンドを意味し、「=」キーをセルの先頭で入力すると式の開始を意味する、といったようになる。
【００８２】
表の展開
スプレッドシートユーザは、無限大グリッドのルックアンドフィールに慣れている。図3のスプレッドシートの見た目は無限大グリッドの見た目と同じではないが、表124には列展開コントロール306および行展開コントロール308があり、それぞれ列と行を簡単に追加できるようになっている。コントロール306および308は、ダッシュで示される列/行とともに作動可能追加アイコンを含み、単にアイコンを作動させるだけで列と行を追加できることを示している。
【００８３】
ビヘイビアのサイズ変更
表124は、列幅を保存し、ユーザがセンテンスおよびフレーズを入力するときにテキストを折り返す。図3では、セルB5内の項目2が、項目全体が入るように列幅に合わせてサイズ変更するのではなく、セル内で折り返されることに注意されたい。
【００８４】
式編集ボックス
このアーキテクチャでは、表のセルまたはフリーフローティングフィールドに式を挿入したり編集するための式編集ボックスを備える。式編集ボックスは、式が置かれ、デフォルトとして最初にセルのサイズおよび形状になっている元のセル上に重なる。式が最初のサイズを超えると、式が収まるように式編集ボックスのサイズが変化する。サイズ変更の実行中に、式編集ボックスは、最初に横方向に長さが延び、次に縦方向に深さが延びる。元の表のサイズは変更されない。セルおよび表ではなくローカルの式編集ボックスのサイズの変更できることで、ユーザがクリックして式を含むセルの中に入ったり出たりするときに表のサイズが奇妙に変更されるのが観察されるという潜在的なUI問題を解消できる。
【００８５】
式編集ボックスの例を図3、5、および6に示す。図3では、式編集ボックス312は、セルC6の上にあり、合計式を受け付ける。図5では、式編集ボックス506は、セルC3の上でフローティング状態にあり、展開された式が収まるようにサイズが変更される。元の表のセルC3のサイズは変更されず、表内でサイズも形状も同じままであることに注意されたい。図6では、式編集ボックス610は、フリーフローティングフィールド608の上に置かれており、長い式が収まるようにサイズが変更される。
【００８６】
参照編集
表124では、ユーザは参照編集操作を実行することができ、ユーザは1つまたは複数のセルを参照し、他のセル内の式に含めるデータ値を抽出する。図3で、ユーザはセルC6の上の式編集ボックス312への合計式(つまり、「=SUM()」)の入力を開始する。次に、ユーザはポインタ310またはその他の何らかのメカニズムを使用してセルC2からC5までを参照する。参照されたセルC2:C5は、ハイライト表示になるか、または他の方法で選択されているものとして示され、たとえばセルを囲む太い長方形ボックスにより表される。
【００８７】
ユーザが目的のセルの選択を終了すると(たとえば、セルC2:C5のハイライト表示後、左マウスボタンを離す)、参照されているセルが式編集ブロック312内の合計式に追加される(つまり、「=SUM(C2:C5)」)。ユーザがさらに確認した後(たとえば、「Enter」キーを押す)、更新イベントが発生し、アーキテクチャ100がその式を再計算し、セルC6を更新して、セルC2:C5の合計、つまり$12,060をセルC6内に表示する。
【００８８】
クロス表参照と汎用的な再計算
アーキテクチャ100では、一方の表の中のセルに他方の表の中のセルを参照する式が含まれるクロス表参照をサポートしている。アーキテクチャ100は、さらに、ユーザが式を他方の表に入力する際に一方の表またはフリーフローティングフィールドの中のセルを参照することができるクロス表参照編集操作もサポートする。
【００８９】
図6は、表606に表602および604への参照が含まれるクロス表参照を示している。3つの表はすべて別々で、互いに独立しており、アーキテクチャ面からは、グリッドオブジェクト130、スプレッドシートオブジェクト106、および表オブジェクト104の独自のセットを備える。図6では、表606内のセルB2には、値を表602のセルB2およびB3に加えるための合計式が含まれる(つまり、=SUM(Tablel!B2:Tablel!B3))。表606内のセルB3には、値を表604のセルB2からB4までに加えるための合計式が含まれる(つまり、=SUM(Table2!B2:Table2!B4))。
【００９０】
他の表またはフリーフローティングフィールドをクロス参照できると、表のどれか1つだけに変更が生じた場合にすべての表およびフリーフローティングフィールドをあまねく更新できるため都合がよい。たとえば、ユーザが表602のセルB2内の値を$300から$400に変更すると仮定する。この変更の結果、表602は更新されて新しい値$400を反映し、セルB6内の合計金額が$3,060から$3,160に更新される。さらに、表606のセルB2内の値は、$2,400に更新され、表606のセルB4内の合計金額が$7,800から$7,900に変更される。
【００９１】
クロス表参照機能は、ワードプロセッシングドキュメント内にスプレッドシートオブジェクトを埋め込む従来のOLE技術に比べて著しく改善された機能である。OLEでは、各スプレッドシートオブジェクトは他のオブジェクトと無関係であり、自動的に互いにセルを参照することができない。OLE方式では、相互参照機能がないため、一方のスプレッドシート内の値を変更した結果ドキュメントのスプレッドシート全体に対し汎用的な更新を行う機能をサポートできない。
【００９２】
フリーフローティングフィールドの参照編集
参照編集操作は、フリーフローティングフィールドに式を入力するときにも使用できる。図6のドキュメント600を考察する。作成者が、冒頭段落内のすべての作業項目の合計コストを要約しようとしている。ユーザは、ハード値を入力するのではなく、ジョブに対する合計を保持するフリーフローティングフィールド608を挿入することに決める。フリーフローティングフィールドを608を使用することにより、元の表の中の他の推定値が修正されたときに自動的に金額を更新できる。
【００９３】
ユーザは、参照編集操作を使用して、要素「Table1!B6」を捕促するため表602内のセルB6を選択し、要素「Table2!B8」を捕促するために表604内のセルB8を選択することによりフリーフローティングフィールド608の編集ボックス610に式を入力し、要素「Table2!B8」を取り出す。ユーザがこの式を確認すると、式編集ボックス610が消えて、合計値「$12,060」がフリーフローティングフィールド608内に挿入される。
【００９４】
ユーザがその後表602または604内の項目の推定値を変更した場合、フリーフローティングフィールド608内の合計値も自動的に更新される。前の例を拡張して、ユーザが表602のセルB2内の値を$300から$400に変更すると仮定する。この変更の結果、表602は更新されて新しい値$400を反映し、セルB6内の合計金額が$3,060から$3,160に更新される。表606のセルB2内の値は、$2,400に更新され、表606のセルB4内の合計金額が$7,800から$7,900に変更される。さらに、フリーフローティングフィールド608内の合計額は$12,060から$12,160に更新される。表およびフリーフローティングフィールド全体を通しての更新はすべて、単一の表の中の単一のセルに対するユーザによる変更に応答して自動的に実行される。
【００９５】
さらに、フリーフローティングフィールドは他のフリーフローティングフィールドを参照できることに注意されたい。たとえば、他のフリーフローティングフィールドをドキュメント600に追加して、第1のフリーフローティングフィールド608、またはフリーフローティングフィールド608と表602、604、および606内の表のセルの組み合わせを参照することができる。
【００９６】
入れ子になった表
アーキテクチャ100は、互いの中に入れ子になっている表をサポートしている。図5は、外側の表502のセルB3内に内側の表504が入れ子になっている状況を示している。2つの表は独立に管理され、それぞれ、グリッドオブジェクト130、スプレッドシートオブジェクト106、および表オブジェクト104の独自基本セットを備える。この例では、外側の表502の中のセルC3は、式編集ボックス506内の合計式で表されているように、内側の表504内のセルB1:B3の配列を参照している。式編集ボックス内の参照構文「Table2!B1」は別の表を参照しており、セルB3を参照しているのではないことに注意されたい。これは、他方の表のセル内に入れ子になっている表の参照であるとしても、上述のクロス表参照編集操作と本質的に同じである。
【００９７】
入れ子になった表は、従来の表およびスプレッドシート方式に勝る改良であるもう1つの特長である。スプレッドシートオブジェクトをワードプロセッシングドキュメント内に埋め込むOLEメカニズムは、入れ子になった表をサポートしていない。
【００９８】
共通ドキュメントビヘイビア
このアーキテクチャでは、テキスト本文に対する共通ドキュメントビヘイビアを複数の表にわたって使用することができる。スペルチェック、文法チェック、検索、および置換などの機能は、表の境界を越えて連続しており、セルの内容をドキュメントの一部であるかのように処理する。さらに、テキスト書式設定は境界越しに適用される。本質的に、テキスト修正のため追加されるどのような機能も、同様にして表の境界を越えて表の内側のテキストに適用される。スプレッドシートオブジェクトをワードプロセッシングドキュメント内に埋め込む従来のOLEメカニズムでは、表の境界を横断するこれらの共通ドキュメントビヘイビアをサポートすることができなかった。
【００９９】
機能の特長
この項では、このアーキテクチャが機能に関して、再計算、参照編集の仕組み、クロス表参照機能、式編集ボックス、および表に対する構造変更など上述のユーザインターフェイスの特長をどのようにサポートするかを説明する。これらの機能の特徴について別に以下で説明する。
【０１００】
データと表示
統合表/スプレッドシートアーキテクチャ100/400は、表またはフローティングフィールドごとにデュアルオブジェクトを採用することにより統合表/スプレッドシートのデータ機能と表示機能を分離している。図4に示されているように、それぞれの表またはフローティングフィールドごとにスプレッドシートオブジェクトとグリッドオブジェクトのペアが1つある。グリッドオブジェクト130は、データおよび書式の情報を保持し、再計算プロセスを行いやすくしている。対応するスプレッドシートオブジェクト106は、ドキュメントの一部として表およびフリーフローティングフィールドを表示すること、ユーザ入力を表およびフリーフローティングフィールドに捕捉することに、より強く関係している。
【０１０１】
分離すると、アーキテクチャでクロス表参照機能、他の表の参照編集機能、およびドキュメント全体を通して汎用的な再計算をサポートできるため都合がよい。基本のグリッドオブジェクトは、表のレイアウトの仕方やドキュメント内の表示場所を配慮しないか、またはグリッドオブジェクトが1つあるのか複数あるのかも配慮しない。同様に、スプレッドシートオブジェクト106はデータおよび式、または再計算プロセスを考慮しない。
【０１０２】
再計算
再計算は、表またはフリーフローティングフィールドの修正に応答してアーキテクチャ100が実行する機能である。修正が行われると、アーキテクチャ100は、ユーザ入力の影響を受けていると思われるドキュメント内のすべての表およびフリーフローティングフィールド内にあるさまざまな式を再計算する。
【０１０３】
図6の例を続けると、ユーザが第1の表602のセルB2内の値を$300から$400に変更すると、スプレッドシートエンジン112内の再計算エンジン142が第1の表のセルB6内の式を再計算して、金額を$3,060から$3,160に更新する。再計算エンジン142はさらに、第3の表606のセルB2内の式を再計算して金額$2,400を求め、第3の表606のセルB4内の式を再計算して金額$7,900を求める。最後に、再計算エンジン142は、フリーフローティングフィールド608内の式を再計算して、値を$12,060から$12,160に更新する。この再計算は、ユーザの入力への応答としてドキュメント全体にわたり自動的に実行される。
【０１０４】
図9は、単一の表の再計算プロセス900を詳細に示している。入力バージョンのユーザインターフェイスの表902(1)が、ユーザが新しい値「7」をセルA1に入力したときに表示されるが、まだその入力が確認されていない(たとえば、「Enter」キーを押すか、またはセルの外でクリックする)。出力バージョンのUIの表902(2)は、ユーザ確認直後に表示される。
【０１０５】
表902に対し、スプレッドシートオブジェクト106とグリッドオブジェクト130の対応するペアが存在する。グリッドオブジェクト130は、セルの表134と書式の表132を保持する。ユーザが「7」をセルA1に入力する前に、セルの表134ではセルA3に値「1」を格納し、セルA1を参照する式(つまり、「=A1」)をセルC1に格納し、セルA1とC1を足す式(つまり、「=A1+C1」)をセルC3に格納する。書式の表132は、セルA3が数値形式であること、またセルC1およびC3が米国ドルの通貨形式であることを示している。入力バージョンのUIの表902(1)は、書式設定された式の結果をセルC1に$0.00として、セルC3に$1.00として表示する。
【０１０６】
そこで、ポインタ904で示されているように、ユーザが値「7」をUIの表902(1)のセルA1に入力する。この値は、流れの矢印910により示されているように、スプレッドシートオブジェクト106に届く。ユーザがセルA1から選択を移動することでこの入力を確認した後、新規入力した値「7」がスプレッドシートエンジン112に渡され、特に、式マネージャ140の構文解析系144に渡される(流れの矢印912)。
【０１０７】
構文解析系144は、入力の構文解析を実行し、その入力をデータ値であると判別する。構文解析系144は、データ値をセルの表134のセルA1に挿入する(流れの矢印914)。この挿入により、表変更イベントが発生し、このイベントは再計算エンジン142に送られ、再計算を開始する(流れの矢印916)。再計算エンジン142は、式連鎖を辿り、セルA1内の新しいデータ値の影響を受ける式を任意の場所で再計算する。この場合、セルC1とC3の中の式は影響を受けるため、これらの式は再計算される(流れの矢印918)。再計算により、セルC1内に結果「7」が収められ、セルC3内に結果「8」が納められる。
【０１０８】
その後、書式の表132が参照され、新しい値と再計算された式の目的の書式を決定する(流れの矢印920)。ここで、式の結果はセルC1とC3内の「$」記号により示されている通貨形式に設定され、新しい値「7」はセルA1内の「#」記号によりされている数値形式に設定される。
【０１０９】
スプレッドシートエンジンは、書式設定された結果$7.00および$8.00をスプレッドシートオブジェクト106に返す(流れの矢印922)。スプレッドシートオブジェクト106は、この書式設定された結果で表を更新し、出力バージョンのUIの表902(2)を作成する(流れの矢印924)。
【０１１０】
再計算イベントは本質的に、瞬時に起こる。ユーザは単に、UIの表が入力バージョン902(1)から出力バージョン902(2)に即座に変わるのを見るだけである。
【０１１１】
参照編集の仕組み
参照編集メカニズムを使用すれば、ユーザに値または参照構文を入力させるのではなく、他のセルを参照してデータを取得するようにできる。図9で、ユーザがセルC1内に式「=A1」を作成したときの状況を考察する。ユーザは、セルC1を選択し「=」記号を入力して、式であることを示し、その後、マウスポインタ904をセルA1に移動してクリックすることによりセルA1を参照する。スプレッドシートオブジェクト106(つまり、CellEditingオブジェクト152)は、この参照を捕捉して構文解析系144に渡す。構文解析系144は、これを式として認識し、式オブジェクト作成し、セルC1によって示されているようにその式をセルの表134のセルに挿入する。
【０１１２】
クロス表参照と汎用的な再計算
アーキテクチャ100では、参照編集機能をドキュメント全体に分散している複数の表およびフリーフローティングフィールドにまたがって拡張することができる。1つの表またはフリーフローティングフィールド内のセルで、他方の表、異なるフリーフローティングフィールド、または表のセルとフリーフローティングフィールドの組み合わせの中のセルを参照することができる。アーキテクチャ100は、一方の表のセルまたはフリーフローティングフィールド内の変更の影響を受けるすべての表およびフリーフローティングフィールドを自動的に再計算する。
【０１１３】
図10は、テキスト本文全体にわたって分散している複数の表1004(1)、...1004(N)、および複数のフリーフローティングフィールド1006(1)、...1006(M)を含むドキュメント1002の再計算プロセス1000を示している。ドキュメント1002内の表1004(1)-1004(N)およびフリーフローティングフィールド1006(1)-1006(M)ごとにスプレッドシートオブジェクト106とグリッドオブジェクト130の対応するペアが作成される。
【０１１４】
この図では、スプレッドシートオブジェクト106(1)および関連するグリッドオブジェクト130(1)はUIの表1004(1)をサポートし、スプレッドシートオブジェクト106(N)および関連するグリッドオブジェクト130(N)はUIの表1004(N)をサポートし、スプレッドシートオブジェクト106(N+1)および関連するグリッドオブジェクト130(N+1)はフリーフローティングフィールド1006(1)をサポートし、スプレッドシートオブジェクト106(M)および関連するグリッドオブジェクト130(N+M)はフリーフローティングフィールド1006(M)をサポートする。表グリッドオブジェクト130(1)-130(N)はそれぞれ、セルの表134(1)-134(N)および書式の表を132(1)-132(N)を含む。FFFグリッドオブジェクト130(N+1)-130(N+M)はそれぞれ、単一のセル136(1)-136(M)および対応する書式のセルを138(1)-132(M)を含む。
【０１１５】
ユーザが、表1004(1)内の3つのセルC1-C3を追加するUIの表1004(N)のセルB1に合計式を入力するものとする。ユーザは、参照構文(つまり、「=SUM(Tablel!Cl:Table1!C3)」)を入力するのではなく、単にポインタ1010を表1004(1)に移動し、選択ブロック1012によって示されているように、目的のセルの配列を選択するだけである。ソース表1004(N)と関連するスプレッドシートオブジェクト106(N)(つまり、CellEditingオブジェクト)は、参照編集操作を認識し、リモートの参照されている表1(流れの矢印1020)内の選択されたセルC1-C3を捕捉する。ユーザが参照されている表1004(1)から選択を移動することでこの入力を確認すると、新規入力した式「=SUM(Table1!C1:Table1!C3)」がスプレッドシートエンジン112に渡され、特に、式マネージャ140の構文解析系144に渡される(流れの矢印1022)。
【０１１６】
構文解析系144は、入力されたのが式であることを判別し、式オブジェクト(図に示されていない)を作成して、式を式連鎖に追加する。構文解析系144は、式をセルの表N内のセルの表134(N)のセルB1に挿入する(流れの矢印1024)。この挿入により、表変更イベントが発生し、このイベントは再計算エンジン142に送られ、再計算を開始する(流れの矢印1026)。
【０１１７】
再計算エンジン142は、式連鎖全体を辿り、セルB1内の新しい式の追加の影響を受ける表またはフリーフローティングフィールド内の式を再計算する。この場合、フリーフローティングセル136(1)および136(M)内の式が影響を受ける。ただし、これらの式は表N内に新しく入力した式の結果に依存しているため、これらの式は式連鎖の末尾に移動される。そのため、新しい式は最初に計算され(流れの矢印1028)、その後、フリーフローティングフィールドのセル136(1)および136(M)内の式が再計算される(流れの矢印1030および1032)。再計算により、結果「425」がセルの表N内の表のセルB1について、結果「425」がFFFセル136(1)内に、結果「425」がFFFセル136(M)内に得られる。
【０１１８】
その後、さまざまな書式の表132(N)および書式のセル138(1)および138(M)を参照し、再計算した式の結果に対する望ましい書式を決定する。ここで、式の結果はすべて「$」で示されている通貨形式である。スプレッドシートエンジン112は、書式設定された結果「$425.00」を関連するスプレッドシートオブジェクト106(N)、106(N+1)、および106(N+M)に返す(流れの矢印1034,1036、1038)。次に、スプレッドシートオブジェクトは、その関連する表およびフリーフローティングフィールドをそれらの書式設定済みの結果により更新し、図10に示されているように出力を行う(流れの矢印1040、1042、1044)。
【０１１９】
またしても、再計算イベントは本質的に瞬間的であり、ユーザは単に、ドキュメント1002全体を通して影響を受けるUIの表およびフリーフローティングフィールド内の即時の変更を認知するだけである。
【０１２０】
式編集ボックス
CellEditingオブジェクト152は、ユーザが式の編集を行う式編集ボックスを管理する。ユーザがセルの先頭に「=」記号を入力したことに応答してユーザインターフェイスに式編集ボックスを表示する。式編集ボックスはセルの上に別々の入力フィールドとして重ねられ、そこにユーザが式を挿入する。CellEditingオブジェクト152は、式内のさまざまなバリアント型のユーザ入力を捕捉し、バリアント型を入力する手段として他のセルへの参照編集を簡単に行えるようにする。式編集ボックスを介して式を入力し確認すると、CellEditingオブジェクト152は式をスプレッドシートエンジン112内の式マネージャ140に渡し、構文解析を行う。式編集ボックスは、ユーザインターフェイスから削除される。
【０１２１】
構造の変更
表オブジェクト104は、行の挿入/削除、セルの結合など、構造の変更に関してユーザ入力を管理し監視する。ユーザは構造変更を行った場合、表オブジェクト104はGridBehaviorオブジェクト150対するイベントを発生し、スプレッドシートエンジン112に通知し、さらにUIの表と関連するセルの表134を更新する。
【０１２２】
上記のように、セルの表に対する変更によりイベントが発生し、イベントが再計算エンジン142に返され、再計算サイクルを開始する。再計算エンジンは、式の連鎖を1ステップずつ辿り、構造変化の影響を受けるすべてのセルを更新し、構造変化から生じる可能性のあるエラーを返す(例えば、行/列を削除した結果参照値が失われる)。次に、スプレッドシートエンジンは再計算の結果を出力し、UIの表を更新して構造変化および再計算結果を反映する。
【０１２３】
切り取り、コピー、貼り付け
別のドキュメントオブジェクトを使用して、特定の表ではなく、ドキュメント全体に影響を及ぼす操作を管理することができる。ドキュメントオブジェクトは、最初に表/スプレッドシートをドキュメントに挿入する役割を果たす。ドキュメントオブジェクトは、GridBehaviorオブジェクト150と似た方法で構築し、切り取り、コピー、および貼り付けを監視するよう設定できる。切り取り操作またはコピー操作を実行すると、オブジェクトは、HTMLコードをグリップボードに格納する。その後の貼り付け操作で、グリップボードからHTMLコードが取り出され、適切な場所に挿入される。一部のスプレッドシートプログラムとは異なり、ユーザは切り取り/コピーを実行しその直後に貼り付ける必要はないことに注意されたい。
【０１２４】
従来のスプレッドシートプログラムにはなかった独特の問題として、貼り付け操作を通じて新しい表を作成できるようになったという点が挙げられる。新しい表が作成されると、このアーキテクチャでは、その新しい表の名前を自動的に変更し貼り付けられた表の中のすべての参照を調整する。
【０１２５】
結論
上の説明では構造的機能および/または方法論的活動に固有の言語を使用しているが、付属の請求項で定められている発明は、説明した特定の機能または活動に限られていないことは理解されるであろう。むしろ、特定の機能および活動は請求されている発明を実施する実施例として開示されている。
【図面の簡単な説明】
【図１】  スプレッドシートの機能をワードプロセッシングプログラムの表に統合するためのアーキテクチャ例のブロック図である。
【図２】  スプレッドシートの機能を実行できる単一の表を含むレンダリングされたドキュメントの画面表示である。図2では、この表は非編集モード時の「表の見た目」を示している。
【図３】  編集モード時に表が「スプレッドシートの見た目」を表す、レンダリングされたドキュメントの画面表示である。
【図４】  スプレッドシートの機能をワードプロセッシングプログラムの表に統合するためのアーキテクチャの他の例のブロック図である。図4のアーキテクチャは、複数の表とフリーフローティングフィールドをサポートすることにより図1のアーキテクチャを拡張したものである。
【図５】  複数の表を含むレンダリングされたドキュメントの画面表示である。特に、図5は、一方の表が他方のセルの中に挿入され、一方の表から他方の表に参照することができる入れ子になった表を示している。
【図６】  複数の表と、編集モードでフリーフローティングフィールドを含むレンダリングされたドキュメントの画面表示である。図6は、クロス表の参照と、フリーフローティングフィールドからの編集参照の図である。
【図７】  図1および4のアーキテクチャを実装するコンピュータ例のブロック図である。
【図８】  図1および4のアーキテクチャによって実装されるプロセスの流れ図である。
【図９】  レンダリングされたドキュメント内のユーザインターフェイスの表とこのアーキテクチャの基本機能コンポーネントの再計算操作時の連携を示す概略図である。
【図１０】  複数のUIの表とこのアーキテクチャの基本機能コンポーネントのクロス表参照編集操作時の連携を示す概略図である。
【図１】
0004522650.tif 000003
【図２】
0004522650.tif 000004
【図３】
0004522650.tif 000005
【図４】
0004522650.tif 000006
【図５】
0004522650.tif 000007
【図６】
0004522650.tif 000008
【図７】
0004522650.tif 000009
【図８】
0004522650.tif 000010
【図９】
0004522650.tif 000011
【図１０】
0004522650.tif 000012