アプリケーションを実行するシステム、方法およびプログラム
【課題】グリッド表示を行うアプリケーションを実行し表示制御を行う場合に、初期表示に要する時間の短縮と、スクロール操作における反応時間の短縮とを両立させる。
【解決手段】グリッド表示を行うアプリケーションを実行し、セルの表示要素の集合で構成された画面を生成するスプレッドシート生成部121と、ディスプレイ装置200に表示された画面に対するスクロール操作を受け付け、画面のスクロールを制御するスクロール制御部122とを備える。このスクロール制御部122は、スクロール操作によって、ディスプレイ装置200に表示される可視領域から外れるセルと、新たに可視領域に入るセルとが存在する場合に、可視領域から外れるセルの表示に用いられた表示要素における位置情報を含む属性を可視領域に入るセルを表す内容に変更することにより、可視領域に入るセルをディスプレイ装置200に表示させる。
【解決手段】グリッド表示を行うアプリケーションを実行し、セルの表示要素の集合で構成された画面を生成するスプレッドシート生成部121と、ディスプレイ装置200に表示された画面に対するスクロール操作を受け付け、画面のスクロールを制御するスクロール制御部122とを備える。このスクロール制御部122は、スクロール操作によって、ディスプレイ装置200に表示される可視領域から外れるセルと、新たに可視領域に入るセルとが存在する場合に、可視領域から外れるセルの表示に用いられた表示要素における位置情報を含む属性を可視領域に入るセルを表す内容に変更することにより、可視領域に入るセルをディスプレイ装置200に表示させる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ブラウザ上で動作するアプリケーション、特にスプレッドシート等のグリッド表示を行うアプリケーションを実行するシステム、その制御方法およびプログラムに関する。
【背景技術】
【0002】
今日、ウェブ・ブラウザにおけるDHTML(Dynamic Hyper Text Markup Language)やJavaScript(登録商標)の機能を利用した、いわゆるリッチ・ユーザ・インタフェース技術の活用が盛んに行われている。この技術によれば、高度な表(グリッド)形式の部品やスプレッドシート・ユーザ・インタフェース部品等(以下、これらの部品を総称してスプレッドシートと呼ぶ)の機能を、標準的なウェブ・ブラウザの機能だけで実現することができる。
【0003】
リッチ・ユーザ・インタフェースでは、例えば、HTML(Hyper Text Markup Language)言語で用意された、テーブル形式の表示を行うTABLE要素を用いてスプレッドシートが実現される。この場合、スプレッドシートの行と列を、例えばTR要素およびTD要素を用いて表示することができる。また、DIV要素を用いてスプレッドシートのセルを表示することもできる。
【0004】
この種のリッチ・ユーザ・インタフェースを実現した従来技術としては、例えば、米国グーグル(Google)社のGoogle Spreadsheets(例えば、非特許文献1参照)やカナダ ニトビ(Nitobi)社のnitobi Grid等が存在する。Google Spreadsheetsは、ウェブ・ブラウザ上でスプレッドシート機能を実現する。また、nitobi Gridは、スプレッドシート機能を持ったグリッド形式の表示を、ウェブ・ブラウザ上で実現する。
【0005】
ところで、スプレッドシートにおいて、ディスプレイ装置に一度に表示できるセルの数は、比較的大型かつ高解像度のディスプレイ装置を用いた場合でも600〜1000程度である。一方、ビジネス・アプリケーション等においては、数万から100万程度のセル数のスプレッドシートが必要とされる場合が少なくない。したがって、実際のスプレッドシートの使用においては、ディスプレイ装置に表示される画面をスクロールさせることが不可欠である。
【0006】
リッチ・ユーザ・インタフェース技術を用いてスプレッドシートを実現する方法としては、様々な方法が可能であるが、スクロールに関しては、主として次のような方法が採られると考えられる。
第1に、最初にスプレッドシートを開く際に、スプレッドシート全体のDOM(Document Object Model)構造を生成する方法である。この方法では、一度アプリケーションを起動してしまえば、スプレッドシートの全ての行と列についての画面要素(TR要素、TD要素など)が生成される。スクロールにおいては、既に生成されているスプレッドシートの画面要素の中から表示領域に対応する箇所を順次表示していく。
【0007】
第2に、初期表示においては実際に表示される領域のみについて画面要素を生成する方法である。この場合、画面のスクロールが行われて新しい行や列が表示される際に、スクロール操作に応じて必要なDOM構造を順次追加し、画面要素を動的に生成していくこととなる。
【0008】
【非特許文献1】「米Google、表計算Webアプリケーション「Google Spreadsheets」ベータ版」、[online]、2006年6月7日、INTERNET Watch、[2007年12月28日検索]、インターネット<URL : http://internet.watch.impress.co.jp/cda/news/2006/06/07/12229.html>
【発明の開示】
【発明が解決しようとする課題】
【0009】
リッチ・ユーザ・インタフェース技術を用いてウェブ・ブラウザ上で動作するスプレッドシートを実現する場合、上記のように、初期表示の際に全ての行と列について画面要素を生成する方法と、初期表示の際には表示される領域のみについて画面要素を生成する方法とが考えられる。
しかし、第1の方法では、最初に、表示される部分に関わらずスプレッドシートの全体が生成されるため、スプレッドシートのサイズ次第では初期表示の際の待ち時間が非常に大きくなる。また、行や列の高さおよび幅のサイズを変えるような、画面要素の構成を変更する操作を行ったときの待ち時間も非常に大きくなる。
【0010】
一方、第2の方法では、初期表示に要する時間は必要最小限で済むものの、スクロールの度にDOM構造を追加し画面要素を生成するため、処理に時間を要し、スムーズなスクロールを行うことが困難になる。また、生成された行や列が累積されるに伴って、DOM構造が大きくなり、画面要素の追加生成の処理における負担が増加するため、スクロールがさらに遅くなる。
【0011】
本発明は、以上の課題を解決し、初期表示に要する時間の短縮と、スクロール操作における反応時間の短縮とを両立させることを目的とする。
【課題を解決するための手段】
【0012】
上記の目的を達成するため、本発明は、次のようなシステムとして構成される。このシステムは、グリッド表示を行うアプリケーションを実行するシステムにおいて、セルの表示要素の集合で構成される格子状に区切られた画面を生成する画面生成部と、この画面生成部により生成された画面をディスプレイ装置に表示する表示部と、ディスプレイ装置に表示された画面に対するスクロール操作を受け付け、画面のスクロールを制御するスクロール制御部とを備える。そして、このスクロール制御部は、スクロール操作によって、ディスプレイ装置に表示される可視領域から外れるセルと、新たに可視領域に入るセルとが存在する場合に、可視領域から外れるセルの表示に用いられた表示要素における位置情報を含む属性を可視領域に入るセルを表す内容に変更することにより、可視領域に入るセルをディスプレイ装置に表示させる。
【0013】
また、このシステムにおいて、スクロール制御部は、可視領域から外れるセルの数よりも可視領域に入るセルの数の方が多い場合に、両者の差分の数だけセルの表示要素を生成し、この表示要素により可視領域に入るセルをディスプレイ装置に表示させる。
さらに詳細には、画面において前記セルが行列をなして整列し、スクロール操作によって、少なくとも1つの列を構成するセルが可視領域から外れ、かつ少なくとも1つの列を構成するセルが新たに可視領域に入る場合に、スクロール制御部は、可視領域に入る列における各セルの行方向の位置が可視領域から外れた列におけるセルの行方向の位置に対応するように、セルの表示要素の属性を変更する。
さらにまた、スクロール操作によって、少なくとも1つの行を構成するセルが可視領域から外れ、かつ少なくとも1つの行を構成するセルが新たに可視領域に入る場合に、スクロール制御部は、可視領域に入る行における各セルの列方向の位置が可視領域から外れた行におけるセルの列方向の位置に対応するように、セルの表示要素の属性を変更する。
【0014】
より好ましくは、このシステムは、画面において複数のセルがまとまって1つのセルとして扱われる連結セルを構成する場合、スクロール制御部は、セルの表示要素の属性を変更する際に、スクロール前に連結セルを構成していたセルを検出し、セルの表示要素の属性を、連結セルにおいてスクロール後に画面に表示されている部分を構成する内容に設定し直す。
さらに好ましくは、画面生成部は、画面のサイズとセルのサイズとに基づいて、画面に同時に表示されるセルの数の最大値を算出し、この最大値に基づいて特定される数の表示要素を生成し、画面を生成する。
【0015】
また本発明は、方法のカテゴリにおいて把握することができる。この方法は、コンピュータにより、グリッド表示を行うアプリケーションの表示制御を行う方法において、セルの表示要素の集合で構成される格子状に区切られた画面を生成してディスプレイ装置に表示させるステップと、ディスプレイ装置に表示された画面に対するスクロール操作を受け付けてスクロール制御を行い、ディスプレイ装置に表示される可視領域から外れるセルと、新たに可視領域に入るセルとが存在する場合に、可視領域から外れるセルの表示に用いられた表示要素における位置情報を含む属性を可視領域に入るセルを表す内容に変更することにより、可視領域に入るセルをディスプレイ装置に表示させるステップとを含む。
【0016】
さらに本発明は、コンピュータを制御して、上記のシステムとして機能させるプログラムや、上記の方法における各ステップに対応する処理を実行させるプログラムとしても実現される。このプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記憶媒体に格納して配布したり、ネットワークを介して配信したりすることにより、提供することができる。
【発明の効果】
【0017】
以上のように構成された本発明によれば、グリッド表示を行うアプリケーションを実行し表示制御を行う場合に、初期表示に要する時間を短縮し、かつスクロール操作における反応時間も短縮させることができる。
【発明を実施するための最良の形態】
【0018】
以下、添付図面を参照して、本発明の実施形態について詳細に説明する。
<システム構成>
本実施形態によるアプリケーション実行システムは、パーソナルコンピュータ等のコンピュータにより実現される。図1は、本実施形態のシステムを実現するコンピュータのハードウェア構成例を示す図である。
【0019】
図1に示すコンピュータ10は、演算手段であるCPU(Central Processing Unit)10aと、記憶手段であるメイン・メモリ10cおよび磁気ディスク装置(HDD:Hard Disk Drive)10gを備える。また、ネットワークを介して外部装置に接続するためのネットワーク・インタフェース・カード10fと、表示出力を行うためのビデオ・カード10dおよび表示装置10jと、音声出力を行うための音声機構10hとを備える。さらに、キーボードやマウス等の入力デバイス10iを備える。
【0020】
図1に示すように、メイン・メモリ10cおよびビデオ・カード10dは、システム・コントローラ10bを介してCPU10aに接続されている。また、ネットワーク・インタフェース・カード10f、磁気ディスク装置10g、音声機構10hおよび入力デバイス10iは、I/Oコントローラ10eを介してシステム・コントローラ10bと接続されている。各構成要素は、システム・バスや入出力バス等の各種のバスによって接続される。例えば、CPU10aとメイン・メモリ10cの間は、システム・バスやメモリ・バスにより接続される。また、CPU10aと磁気ディスク装置10g、ネットワーク・インタフェース・カード10f、ビデオ・カード10d、音声機構10h、入力デバイス10i等との間は、PCI(Peripheral Components Interconnect)、PCI Express、シリアルATA(AT Attachment)、USB(Universal Serial Bus)、AGP(Accelerated Graphics Port)等の入出力バスにより接続される。
【0021】
なお、図1は、本実施形態が適用されるのに好適なコンピュータのハードウェア構成を例示するに過ぎず、実際の各サーバが図示の構成に限定されないことは言うまでもない。例えば、ビデオ・カード10dを設ける代わりに、ビデオメモリのみを搭載し、CPU10aにてイメージ・データを処理する構成としても良い。また、音声機構10hを独立した構成とせず、システム・コントローラ10bやI/Oコントローラ10eを構成するチップセットの機能として備えるようにしても良い。また、補助記憶装置として磁気ディスク装置10gの他に、各種の光学ディスクやフレキシブル・ディスクをメディアとするドライブを設けても良い。表示装置10jとしては、主として液晶ディスプレイが用いられるが、その他、CRTディスプレイやプラズマ・ディスプレイ等、任意の方式のディスプレイを用いて良い。
【0022】
図2は、本実施形態によるアプリケーション実行システムの機能構成を示す図である。
図2に示すアプリケーション実行システム100は、例えば図1に示したコンピュータ10において、メイン・メモリ10cに読み込まれたプログラムをCPU10aが実行することにより実現され、オペレーティング・システム(以下、OSと略記する)110と、OS110上で動作するウェブ・ブラウザ120とを備える。ウェブ・ブラウザ120は、スプレッドシート生成部121と、スクロール制御部122とを備える。スプレッドシート生成部121およびスクロール制御部122は、DHTMLやJavaScriptを用いて記述され、ウェブ・ブラウザ120上で動作するが、図示しないウェブ・サーバからオンラインで提供されるアプリケーション(スプレッドシート)の機能の一部として実現される。また、このアプリケーションによるスプレッドシートの画面は、ウェブ・ブラウザ120の機能により、ディスプレイ装置200に表示される。すなわち、ウェブ・ブラウザ120は、スプレッドシートの画面をディスプレイ装置200に表示する表示部としても機能する。ディスプレイ装置200は、例えば図1に示した表示装置10jにより実現される。
【0023】
<スプレッドシート生成部の機能>
スプレッドシート生成部121は、アプリケーションの起動時に、セルの集合で構成されるスプレッドシートの画面要素を生成する。言い換えれば、スプレッドシート生成部121は、グリッド形式によるスプレッドシートの画面を生成する画面生成部である。スプレッドシートのセル表示には、TABLE要素およびその子要素となる特定のテーブル関連の要素群は使わず、CSS(Cascading Style Sheet)機能のボックス・モデル に関するスタイル属性を用いる。ここで、ボックス・モデルとは、様々な表示要素に共通である矩形領域としてのスタイル属性の意味を規定するものである。
【0024】
このスタイル属性は、それが有効であるような表示要素に関連付けて指定される。例えば、特定の表示様式を持たないDIV要素にこのスタイル属性を与えることができ、これにより、枠線(境界線)の表示、枠線の色、セルのサイズ、背景色などを表現した、スプレッドシートのセルとして用いられる矩形領域を表示することができる。なお、セルを構成するためにDIV要素以外の要素を用いることも可能であるが、以下では、DIV要素が用いられた場合の例について説明する。
【0025】
複数のDIV要素を、親表示要素(例えば、親もDIV要素でよい)の子要素として、行列状に配置することにより、格子状にセルが区切られたスプレッドシートが表示できる。DIV要素は、さらに子要素を持つことができるので、スプレッドシートの各セルの内側に、DIV要素の子要素としての適当な要素による表示を入れることができる。
【0026】
CSSのボックス・モデルでは、position属性を用いることにより、親表示要素のボックスと子要素のボックスとの位置関係を指定することができる。特に、子要素のposition属性の値として「absolute」を指定し、さらにその実際の位置属性を与えることにより、その子要素の表示位置を親表示要素のボックスの左上の点を基点とした座標系の上で指定できる。
【0027】
図3は、スプレッドシートを実現するためのDOM構造の例を示す図である。
図3に示す例では、スプレッドシートを構成するDOM構造が、可視域表示要素(第1層)、セル平面表示要素(第2層)、セル表示要素(第3層)の3層で構成されている。
第1層の可視域表示要素には、スプレッドシートのうち、現在画面上に表示されている部分(可視域)のサイズが指定されている。この可視域表示要素は、さらに上位の要素の部分として画面上に現れる。
第2層のセル平面表示要素は、第3層のセル表示要素群の配置を決めるための座標系を定義する。図3に示す例では、左端の上から2番目のセルの位置が、座標(△s,△t)で示されている。
第3層のセル表示要素は、スプレッドシートを構成する個々のセルを定義する。
【0028】
ここで、第1層で設定される可視域と第2層で設定されるセル平面の位置関係を変えることがスクロール操作に相当する。図3に示す例では、可視域に対するセル平面の位置が、座標(△x,△y)で示されている。また、図3に示すセル平面のうち、網掛けの部分が画面上に見えている部分を表している。
【0029】
スプレッドシートの全てのセルに関するサイズ、背景色、内容等の各種の情報は、アプリケーションを提供するウェブ・サーバからウェブ・ブラウザ120により取得され、図1に示したメイン・メモリ10c等のメモリ領域に読み込まれているものとする。また、必要なときに随時ウェブ・ブラウザ120からウェブ・サーバにリクエストして、必要な情報を取得できるものとしても良い。例えば、2次元配列cellsを用意し、i行j列目のセルの情報へのアクセスを、cells[i][j]のような式で表すとする。このとき、例えばセルの幅は、cells[i][j].widthといった式を評価することで取得される。
【0030】
スプレッドシート生成部121は、最初の画面の作成において、可視域表示要素、セル平面表示要素を生成すると共に、セル表示要素とその子孫については、可視領域を埋めるのに十分な数を生成する。このとき、どれだけの数のセル表示要素を生成するかに関しては、次のいずれかの方針を採り得る。
(i)可視領域を埋めるのに必要な行および列をそれぞれ求め、それの範囲に含まれるセルの数だけ生成する。
(ii)スプレッドシート全域にスクロールしたときに、それぞれの場所での可視領域に含まれる行数と列数を判定し、それぞれの最大値の積の数だけ生成する。
【0031】
(i)は、必要になるまではできるだけセル表示要素の数を増やさないという方針である。一方、(ii)は、可視領域のサイズが変わらない限りは、スクロールの途中で表示に必要なセル表示要素の追加が起こらない。そのため、スクロール中には表示要素の追加に関する処理時間を要しない。したがって、各スクロール単位の処理量が一定になる。
【0032】
<スクロール制御部の機能>
スクロール制御部122は、ユーザが図1の入力デバイス10iを用いて行ったスクロール操作に応じて、画面のスクロールを実行する。画面のスクロールは、セル平面の、可視領域からの相対的な位置を変更することにより行われる。可視領域が右にスクロールするということは、可視領域に対するセル平面の基点の位置が左に移動するということである。可視領域が左にスクロールする場合の処理、また上下方向のスクロールに関しても、同様に考える。
【0033】
図4は、可視領域が右にスクロールする様子を示す図である。
所定の幅のスクロールを行うと、スクロール前に可視領域に含まれていてスクロール後に可視領域の外に出る列が発生する。これを削除列と呼ぶことにする。発生する削除列の数は、0列、1列または複数列である。図4(a)に示す例では、スクロールにより、セル平面の基点の位置が(△x1,△y)から(△x2,△y)に移動している。そして、これにより、左端の1列が可視領域から外れ、削除列となっている。
【0034】
また、新しく可視領域になった領域のうち、まだセル表示要素が配置されていない部分が発生する。これを追加列と呼ぶことにする。発生する追加列の数は、0列、1列または複数列である。削除列よりも追加列の方が多い場合、スクロール制御部122は、その差の数の追加列を選び、それらの列上に配置するセル表示要素を新たに生成する。そして、生成した各セル表示要素に対して、位置属性を含む必要な属性を設定する。
【0035】
残りの追加列(削除列と同数分の追加列、ただし1以上の場合)については、スクロール制御部122は、削除列上に配置されていたセル表示要素に関して、追加列上に配置しなおすために、位置属性を含む必要な属性を設定する。そして、削除列上にあった各セル表示要素は追加列上に再配置される。すなわち、削除列と同数分の追加列に関しては、セル表示要素が新しく生成されるのではなく、図4(b)に示すように、既存のセル表示要素が移動することで充当されることとなる。セル表示要素の生成に要する処理時間は比較的大きいが、このように既存のセル表示要素を流用することで、処理時間を短縮できる。
【0036】
さらに、各々のセル表示要素は、移動前と後とで同じ行に対応するように配置される。このようにすることで、行ごとに設定されるセルの属性(例えば、高さや背景色などが行ごとに設定されているような場合)について再度設定し直さずに済むため、処理時間のさらなる短縮を図ることができる。
【0037】
さて、スクロール制御部122は、上述したように、スクロール時の処理として可視領域から外に出た削除列に配置されているセル表示要素を取得し、その属性を変更する操作を行う。そこで、各時点でのセル表示要素の行・列位置に応じて、特定の行や列上のセル表示要素を取得するための、また、行や列の単位でセル表示要素の位置を変更したときに変更後の位置関係を記憶しておくための、効率のよいデータ構造を設計する必要がある。
【0038】
1つの方法として、JavaScriptの配列(1次元配列)を使って、行や列を表し、その集まりをさらに上位の配列で表すことで行列に相当する2次元配列を構成し、この配列を用いて特定の行や列に位置づけられているセル表示要素を記憶することが考えられる。例えば、配列名をcellsとすると、100行目、500列目の位置をあらわすのにcells[100][500]のように記述する。そして、この配列への代入操作、アクセス操作により、セル表示要素を記憶したり、アクセスしたりする。一般に、スプレッドシート全体の位置を表すには、配列のインデックスは非常に大きな数になる。しかし、JavaScriptの配列は、インデックスが数字の場合でもいわゆる連想配列である。そのため、インデックスの数値が大きくなった場合でも、配列要素が空の部分に関しては実際の記憶領域を必要としない。したがって、この配列は、アクセスの性能と記憶領域の両方において十分効率の良いデータ構造である。
【0039】
<スプレッドシート生成部およびスクロール制御部の動作の具体例>
次に、具体的なスプレッドシートの構成例を挙げて、スプレッドシート生成部121およびスクロール制御部122の動作について、さらに詳細に説明する。
図5は、スプレッドシートの構成例を示す図である。
図5において、スプレッドシートの上辺および左辺の数字は、各行および各列の幅および高さを表す。また、各セルに記載されたC(i,j)は、そのセルに付けられた名前とする。図示の例では、スプレッドシートの左上の3行4列についてのみサイズが記述されているが、省略されている右方向および下方向へセルは続いている。そして、図示されたサイズ以外に、データ、前景色、背景色などセルの表示に必要なデータが、各セルのC(i,j)に関連付けてメモリに保持されているものとする。
【0040】
図6は、スプレッドシートにおける可視域のサイズの例を示す図である。
図6に示す可視域のサイズの値と図5に示したスプレッドシートの行および列のサイズの値は、同一の単位によるものとする。
図7は、図5のスプレッドシートの上に図6の可視域を重ね合わせた様子を示す図である。図において網掛けされた部分が可視域を表している。
図7に示す例では、スプレッドシートの左上隅の点から表示されるものとして、左上3行3列が可視域に掛かっていることがわかる。
以上の状況において、スプレッドシート生成部121は、スプレッドシートの可視域を表示するためにDIV要素による図3を参照して説明した3層のDOM構造を作成する。
【0041】
第1層のDIV要素では、スタイル属性として少なくとも可視域の幅と高さが設定される。この設定を、以下のように表記する。
DIVp.style = “width: 200; height: 150”
この記載は、第1層目のDIV要素であるDIVpのスタイル属性として、幅属性widthが200、高さ属性heightが150であることを意味する。なお、以下の説明も含め、これらの属性名は標準的なWebブラウザのスタイルシート技術に準じたものである。
【0042】
次に、第2層のDIV要素DIVmのスタイル属性は、次のように設定する。
DIVm.style = “position: absolute; overflow: visible; left: 0; top: 0; width: 0; height: 0”
この記載は、位置指定属性positionは値がabsoluteで、この要素の位置が親の要素の左上の点からの座標で指定されることを意味する。オーバフロー属性overflowは値がvisibleで、この要素の子要素がDIVmの幅、高さの範囲を超えた場所に配置されたときの扱いとして可視とすることを指定している。位置は、左leftが0、上topが0で、この要素の左上の点が親要素の左上の点と同じであることを意味する。幅、高さは何でも良いが、ここではwidthは0と高さも0としている。オーバフロー属性の指定がvisibleであるので、子要素はDIVmのサイズに関わらず表示される。
【0043】
第3層目のDIV要素群は、現在の可視域を漏れなく表示するために9個生成される。各DIV要素にはDIV1からDIV9と名付ける。
図8に、各DIV要素の配置の例を示す。
各DIV要素のスタイル属性に関して、位置指定属性positionは、値はabsoluteとし、親すなわちDIVmの左上の点からの位置で指定されるものとする。位置を指定する属性left、topは、各々の行、列の高さ、幅の情報から計算され指定される。例えばDIV5は、left:100;top:50;width:90;height:50となる。その他、各セルに関する色やフォントなどのスタイル属性やデータ表示のための子要素などを第3層のDIV要素群に設定することで各セルの表示が完成する。
【0044】
次に、上記のように生成されたスプレッドシートにおいて、右に1列分すなわち100だけスクロールすることを考える。
図9は、スクロール後の新しい可視域と現在の第3層のDIV要素の位置の関係を示す図である。
図9を参照すると、現在1列目(左端)にあるDIV要素の位置は、スクロール後には完全に可視域から外に出る。一方2列、3列のDIV要素は新しい可視域にも含まれる。4列目のセルに関しては現在DIV要素がない。第2、3、4列が表示できれば新しい可視域は漏れなく表示できる。そこで、スクロール後の表示を構成する操作は、次の通りになる。
【0045】
スクロール制御部122は、まず、第2層のDIVmについて、left属性を0から−100に変更する。これにより、第2層の第1層に対する相対位置が左に100移動する。これは、第1層の可視域を基準にすると第2層が右に100移動することを意味する。次に、第3層のDIV1、DIV2、DIV3のleft属性を240に、width属性を120に変更する。さらに、この3つのDIV要素について、新しくこれらの要素が表示するセルの表示に必要なスタイル属性やデータを表示する子要素を設定する。
【0046】
図10は、以上の操作による最終的な第1層の可視域、第2層、第3層のDIV要素の位置関係を示す図である。
以上の操作において、DIV4からDIV9に関しては位置を含め全く属性や下位構造を変更していない。また、第3層において新しいDIV属性を追加していない。これらの点は、スクロールにおける処理時間を低減するのに効果的であり、特にスプレッドシートの表示されるセル数が多い場合は顕著である。第3層の新しいDIV属性の生成については、可視域を埋め尽くすのに十分なDIV要素が足りない場合には必要になる。しかし、予め広めに第3層のDIV要素を作っておく場合や、ある程度DIV要素を追加した後では、多くの場合で既存のDIV要素を再利用できることが期待できる。
【0047】
図11は、スクロール制御部122による処理の流れを示すフローチャートである。
図11に示すように、スクロール制御部122は、スクロール動作を行った際に、まず削除列の数と追加列の数とを比較する。削除列の数が追加列の数以上である場合は(ステップ1101でNo)、削除列の数が0であれば(すなわち、削除列も追加列も0である場合)、可視領域に含まれ表示されるセルはスクロールによって変わらないので、スクロール制御部122はそのまま処理を終了する(ステップ1102でNo)。
【0048】
一方、削除列の数が1以上である場合は(ステップ1102でYes)、スクロール制御部122は、削除列にある各DIV要素の属性を、追加列のセルを表す内容に変更する(ステップ1103)。これにより、削除列のセルを表示するために使用されていたDIV要素が、追加列のセルを表示するために使用されることとなる。
【0049】
次に、削除列の数よりも追加列の数の方が多い場合(ステップ1101でYes)、削除列の数が0であれば(ステップ1104でNo)、追加列のセルの分だけDIV要素が不足するので、スクロール制御部122は、必要な数のDIV要素を生成する(ステップ1105)。生成されたDIV要素は、追加列のセルを表示するために使用される。
【0050】
一方、削除列の数が1以上である場合は(ステップ1104でYes)、スクロール制御部122は、削除列にある各DIV要素の属性を、追加列のセルを表す内容に変更する(ステップ1106)。しかし、これでは追加列の全てのセルを表示するには足りないので、スクロール制御部122は、不足分のDIV要素を生成する(ステップ1107)。そして、削除列のセルを表示するために使用されていたDIV要素と、追加生成により補充されたDIV要素が、追加列のセルを表示するために使用される。
【0051】
なお、上記の動作例は、スクロールによってスプレッドシートの列が削除され、また追加される場合について説明したが、他の方向へのスクロールによってスプレッドシートの行が削除され、追加される場合も、処理の流れは同様である。また、フローチャートには図示されていないが、削除列の方が追加列よりも多い場合、追加列のセルの表示に使用されない余剰のDIV要素が発生する。この場合、余ったDIV要素は、例えば、スクロール方向の延長上で未だ表示されていない列のセルに割り当てて配置しておけば良い。このようにすることで、実際にさらにスクロール操作が行われて、当該列が表示されることになったとしても、DIV要素を新たに生成する必要がなくなる。あるいは、別の方法として、余剰分の削除列(DIV要素)を変更せずに残すことも考えられる。残った削除列は、次の同方向へのスクロール時に、その時点の削除列の一部として考慮される。この方法によれば、スクロール時点での処理量を必要最小限とし、かつスクロール方向が逆方向に変わった場合の変更量を減らすことができる。
【0052】
<初期表示におけるセル表示要素の生成>
スクロール中にセル表示要素の追加が起こると、そのための処理時間がかかり、スクロールの遅延の原因となる。スプレッドシート生成部121が、初期可視域において、必要な数よりも多めのセル表示要素を予め生成しておけば、このような要素追加が起こる可能性は低くなる。このような要素追加が全く起きないようにするには、スプレッドシート全域にわたってスクロールしたときのそれぞれの場所での可視領域に含まれる行数と列数を判定し、その最大数の行と列をもったセル表示要素を初期表示時に生成し、配置しておけば良い(スプレッドシート生成部121の機能で説明した(ii)の方針)。可視領域に含まれる行数と列数は、実際に競る表示要素を生成することなく、可視領域のサイズと各セルのサイズの情報に基づいて計算される。ただし、スプレッドシートのセルサイズの定義や可視域のサイズが変化しないことが前提となる。
【0053】
図12は、行方向に関して可視領域に含まれる行数の最大値を求めるプログラムのJavaScript言語で書いた擬似コードを示す図である。図には行方向に関するプログラムが記載されているが、列方向についても同様に計算できる。
図示のプログラム例は、1行単位でスクロールを順次進めていき、それぞれの時点で可視域を埋めるのに必要な行数を求め、その最大値を求めるものである。スクロールを行の単位で進める場合は、このプログラムで必要な行数の最大値が求められる。また、スクロールを行の単位よりも小さな単位で行える場合には、可視域を埋める行数の最大値は、このプログラムで計算した最大値よりも高々1大きな値になる。したがって、その場合でもこのプログラムを適用して行数の最大値を決めることができる。
【0054】
このように計算した表示に必要な最大行数、最大列数が大きな数になった場合、初期状態の処理量が多くなり、初期画面の起動遅延時間が大きくなることもあり得る。初期起動時間を優先し、スクロール中で起こるセル表示要素の生成に起因する遅延を選択するか、初期起動時間を犠牲にしてスクロール中の遅延を全くなくすか、その中間の調整をして遅延を初期処理とスクロール時に分散させるかは、設計上の判断となる。
【0055】
<連結セルの取り扱い>
通常、高機能のグリッド表示コンポーネントやスプレッドシートは、連結セルを扱う機能を持つ。連結セルは、複数のセルの集まりを、行の範囲と列の範囲により指定し、これらのセルの大きさをまとめた1つのセルとして表示するものである。連結セル中に表示する情報は、連結前のセルのうちのいずれか1つ(例えば左上隅のセル)と関連付ける。連結セルの範囲として指定したセルを連結要素と呼ぶ。
【0056】
連結セルを含む場合の処理方法は、上述した連結セルを考えない場合の処理を拡張して実現される。初期画面の作成時、またはスクロール時で、それぞれのセル表示要素の幅、高さ、およびセル平面表示要素からの位置を指定する局面を考える。このとき、連結セルを考えない場合は、対応するセルの情報から幅、高さを取得し、また周囲のセルとの位置関係、周囲のセルの大きさにより位置を決定した。
【0057】
これに対し、連結セルを考える場合は、次のように拡張する。まず、上記と同様の局面において、対応するセルが連結要素でなければこれまでと同様の処理を行う。一方、対応するセルが連結要素である場合、そのセル表示要素が代表表示要素かそれ以外の表示要素かを後述する方法で判定する。そして、代表表示要素である場合には、表示の大きさは対応する連結要素を含む連結セルの大きさとする。また、表示の位置はその連結セルに含まれる連結要素のうちの左上隅の要素の左上隅の位置にあわせる。それ以外の表示要素の場合は、表示の大きさはゼロ(もしくは非表示になるような方法であればどのようなものでも良い)にする。ある連結セルに対応する代表表示要素とは、現在の表示要素のなかで対応するセルがその連結セルの連結要素であるもののうち、その位置が左上隅にあるものを指す。
【0058】
所定のセル表示要素が代表表示要素かどうかの判定は次のようにして行う。
(1)もし、そのセル表示要素が現在の全てのセル表示要素の中で左上隅にある場合は、代表表示要素である。
(2)それ以外の場合で、そのセル表示要素が現在の全てのセル表示要素の中で最も左の列にあり、かつ、対応するセルがある連結セルの連結要素のうち最も上の行にある場合は、代表表示要素である。
(3)それ以外の場合で、そのセル表示要素が現在の全てのセル表示要素の中で最も上の行にあり、かつ、対応するセルがある連結セルの連結要素のうち最も左の行にある場合は、代表表示要素である。
(4)それ以外の場合はそのセル表示要素は代表表示要素ではない。
【0059】
スプレッドシート生成部121が初期画面を表示する際は、全てのセル表示要素において、上記の手順で、大きさと位置を指定する。スクロール制御部122が画面のスクロールを行う際は、例えば左から右にスクロールする場合、新しく生成されたセル表示要素および削除列に含まれ位置変更の対象となったセル表示要素について、上記の手順で、大きさと位置を指定する。また、所定の削除列のセル表示要素が移動し、新しく左端となった列に含まれるセル表示要素全てについて、上記の手順で大きさおよび位置を設定し直す。その他の方向にスクロールする場合も、同様の考え方で処理を行う。
【0060】
図13は、セルの定義と表示要素との関係を模式的に表した図である。図13(a)には、大きさなどのセルの情報の位置的な関係と連結セルの定義(情報)が示されており、図13(b)には、これらのセルの定義と表示要素との関係が示されている。
セル表示要素のうち、連結要素と対応がとれ、かつ左上隅に位置するセル表示要素が、代表表示要素である(図において太線で示したDIV要素)。代表表示要素は、スクロールの度に選択され、その大きさと位置が設定される。代表表示要素の大きさと位置は、図において網掛けで示した部分、すなわち連結セルの大きさと位置に相当するものに設定される。また、代表表示要素がスクロールにより代表表示要素でなくなり、かつ依然として連結要素に対応している場合は、大きさがゼロに設定される。
【0061】
<連結セルの取り扱いの具体例>
次に、具体的なスプレッドシートの構成例を挙げて、連結セルの取り扱いについて、さらに詳細に説明する。
図14は、連結セルを含むスプレッドシートの構成例を示す図である。
図14に示すスプレッドシートは、図5に示したスプレッドシートと同様の構成であるが、セルC(1,1)、C(1,2)、C(2,1)、C(2,2)が連結され、この4つのセルの領域を併せたものが1つの連結セルとして扱われる。このような連結情報は、それぞれの連結されるセルに関連してメモリに保持されており、連結されたセルの大きさが計算できるものとする。また、連結セルの表示データやサイズ以外のスタイルに関する情報も、適当な手段でこれらのセルと関連付けて記憶され、スプレッドシート表示の処理において、取得し計算できるものとする。図において網掛けされた部分が可視域を表している。
【0062】
最初の表示がスプレッドシートの最左上の点を基準にするものとする。この場合、まず、第3層のDIV要素として、表示域を埋めるのに必要なセルに対応させてDIV1からDIV9までが生成される。
図15に、各DIV要素の配置の例を示す。
連結セルが画面に含まれているので、連結セルとして扱われるセルに対応するDIV要素の1つ、ここではDIV1を代表表示要素として選ぶ。図において、連結セルを構成するDIV要素は破線で示されており、特に代表表示要素は太い破線で示されている。
【0063】
図15に示すスプレッドシートにおいて、連結セル以外のセルに対応するDIV要素については、通常通りに位置、サイズなどの属性が設定される。
一方、連結セルの代表表示要素については、連結セルの位置、サイズその他の属性が設定される。図示の例では、位置、サイズは、left:0;top:0;width:190;height:100となる。連結セル内のセルに対応していてかつ代表表示要素でない要素DIV2、DIV4、DIV5については、非表示になるように、例えばサイズを0とするように属性が設定される。この結果、連結セルの部分が1つの大きなセルとして表示される。
【0064】
次に、このスプレッドシートが右に1列分スクロールする場合を考える。
図16は、図15の状態から右に1列分スクロールした状態を示す図である。
まず、連結セルを考えずに、通常通り、第1列のDIV1、DIV2、DIV3要素に関して、第4列目を表示するように設定が変えられる。このとき、DIV1は連結セルの表示として使われなくなる。
【0065】
次に、新しく左端の列となった第2列に注目し、この列に連結セルの一部となる要素が含まれているか否かをチェックする。この例では第2列に連結セルが掛かっている。代表表示要素は、連結セルの一部として表示されるセル領域のなかで最左上に対応する要素と決めているので、連結セルの領域に対応しているDIV4、DIV5のうちDIV4が代表表示要素となる。DIV4の位置、サイズは、それぞれleft0;top0;width190;height100となる。DIV5は、非表示になるようにサイズが0に設定される。この結果、スクロール後には、左側が欠けた連結セルが可視域左端に現れることになる。
【0066】
以上の操作では、スクロール後に新しく端になった列(縦方向のスクロールの場合は行)から代表表示要素を選択し、その代表表示要素とその回りの代表表示要素にならなかったDIV要素に対して、適切に位置、サイズを設定する処理が追加された。そして、この追加された処理を除けば、連結セルが無い場合のスクロール処理と同じである。すなわち、連結セルが無い場合のスクロール処理に対して上記の簡単な拡張を行うのみで、連結セルを含む場合のスクロール処理が実現できた。
【0067】
効率上の配慮として、スプレッドシートにおいて、連結セルの指定、もしくは指定解除の時点で、スプレッドシート中の連結セルの有無を記憶しておき、それに応じてスクロール処理方式を切り替えるようにする。これにより、連結セルが1つも無い場合には、上記のような連結セルのための追加処理を行わないような制御を行っても良い。
【0068】
図17は、連結セルが存在する場合のスクロール制御部122による処理の流れを示すフローチャートである。
図17において、ステップ1701〜1703の動作は、図11に示したステップ1101〜1103と同様である。また、削除列の数よりも追加列の数の方が多い場合(ステップ1701でYes)におけるステップ1706〜ステップ1708およびステップ1711の動作は、図11に示したステップ1104〜1107の動作と同様である。
【0069】
本動作例では、ステップ1703においてDIV要素の属性が変更された後、スクロール制御部122は、スクロール前に連結セルを構成していたセルであって、スクロール後の可視域に含まれているセルのDIV要素を検出し、代表表示要素を選択する(ステップ1704)。そして、スクロール後の可視域に含まれる範囲で連結セルを構成する各セルのDIV要素の属性を、連結セルを表す内容に再設定する(ステップ1705)。
【0070】
ステップ1708においてDIV要素の属性が変更された後も、同様に、代表表示要素の選択(ステップ1709)、連結セルを構成する各セルのDIV要素における属性の再設定(ステップ1710)が行われる。なお、図17のフローチャートでは、連結セルに対する処理(ステップ1709、1710)が行われた後に、不足分のDIV要素の生成(ステップ1711)が行われることとしているが、これらの実行順は図示の例に限定されるものではない。
【0071】
以上、本実施形態について説明したが、本発明の技術的範囲は上記実施形態に記載の範囲には限定されない。例えば、上記実施形態では、ウェブ・ブラウザ120上で動作するアプリケーションがスプレッドシートである場合を例として説明したが、この他、グリッド形式の表示を行う種々のアプリケーションに対して、本実施形態を適用することができる。また、本実施形態では、アプリケーションは、ウェブ・サーバからオンラインで提供されることを想定して説明したが、ウェブ・ブラウザ120上で動作するアプリケーションであれば、オンラインで提供されるものに限定されない。その他、上記実施形態に、種々の変更または改良を加えたものも、本発明の技術的範囲に含まれることは、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【0072】
【図1】本実施形態が適用されるシステムを実現するコンピュータのハードウェア構成例を示す図である。
【図2】本実施形態によるアプリケーション実行システムの機能構成を示す図である。
【図3】本実施形態でスプレッドシートを実現するためのDOM構造の例を示す図である。
【図4】本実施形態において、可視領域がスクロールする様子を示す図である。
【図5】本実施形態で用いられるスプレッドシートの構成例を示す図である。
【図6】スプレッドシートにおける可視域のサイズの例を示す図である。
【図7】図5のスプレッドシートの上に図6の可視域を重ね合わせた様子を示す図である。
【図8】図7に示すスプレッドシートにおける各DIV要素の配置の例を示す図である。
【図9】スクロール後の新しい可視域と現在の第3層のDIV要素の位置の関係を示す図である。
【図10】最終的な第1層の可視域、第2層、第3層のDIV要素の位置関係を示す図である。
【図11】本実施形態のスクロール制御部による処理の流れを示すフローチャートである。
【図12】行方向に関して可視領域に含まれる行数の最大値を求めるプログラムのJavaScript言語で書いた擬似コードを示す図である。
【図13】本実施形態におけるセルの定義と表示要素との関係を模式的に表した図である。
【図14】連結セルを含むスプレッドシートの構成例を示す図である。
【図15】図14に示すスプレッドシートにおける各DIV要素の配置の例を示す図である。
【図16】図15の状態から右に1列分スクロールした状態を示す図である。
【図17】連結セルが存在する場合のスクロール制御部による処理の流れを示すフローチャートである。
【符号の説明】
【0073】
100…アプリケーション実行システム、110…オペレーティング・システム(OS)、120…ウェブ・ブラウザ、121…スプレッドシート生成部、122…スクロール制御部、200…ディスプレイ装置
【技術分野】
【0001】
本発明は、ブラウザ上で動作するアプリケーション、特にスプレッドシート等のグリッド表示を行うアプリケーションを実行するシステム、その制御方法およびプログラムに関する。
【背景技術】
【0002】
今日、ウェブ・ブラウザにおけるDHTML(Dynamic Hyper Text Markup Language)やJavaScript(登録商標)の機能を利用した、いわゆるリッチ・ユーザ・インタフェース技術の活用が盛んに行われている。この技術によれば、高度な表(グリッド)形式の部品やスプレッドシート・ユーザ・インタフェース部品等(以下、これらの部品を総称してスプレッドシートと呼ぶ)の機能を、標準的なウェブ・ブラウザの機能だけで実現することができる。
【0003】
リッチ・ユーザ・インタフェースでは、例えば、HTML(Hyper Text Markup Language)言語で用意された、テーブル形式の表示を行うTABLE要素を用いてスプレッドシートが実現される。この場合、スプレッドシートの行と列を、例えばTR要素およびTD要素を用いて表示することができる。また、DIV要素を用いてスプレッドシートのセルを表示することもできる。
【0004】
この種のリッチ・ユーザ・インタフェースを実現した従来技術としては、例えば、米国グーグル(Google)社のGoogle Spreadsheets(例えば、非特許文献1参照)やカナダ ニトビ(Nitobi)社のnitobi Grid等が存在する。Google Spreadsheetsは、ウェブ・ブラウザ上でスプレッドシート機能を実現する。また、nitobi Gridは、スプレッドシート機能を持ったグリッド形式の表示を、ウェブ・ブラウザ上で実現する。
【0005】
ところで、スプレッドシートにおいて、ディスプレイ装置に一度に表示できるセルの数は、比較的大型かつ高解像度のディスプレイ装置を用いた場合でも600〜1000程度である。一方、ビジネス・アプリケーション等においては、数万から100万程度のセル数のスプレッドシートが必要とされる場合が少なくない。したがって、実際のスプレッドシートの使用においては、ディスプレイ装置に表示される画面をスクロールさせることが不可欠である。
【0006】
リッチ・ユーザ・インタフェース技術を用いてスプレッドシートを実現する方法としては、様々な方法が可能であるが、スクロールに関しては、主として次のような方法が採られると考えられる。
第1に、最初にスプレッドシートを開く際に、スプレッドシート全体のDOM(Document Object Model)構造を生成する方法である。この方法では、一度アプリケーションを起動してしまえば、スプレッドシートの全ての行と列についての画面要素(TR要素、TD要素など)が生成される。スクロールにおいては、既に生成されているスプレッドシートの画面要素の中から表示領域に対応する箇所を順次表示していく。
【0007】
第2に、初期表示においては実際に表示される領域のみについて画面要素を生成する方法である。この場合、画面のスクロールが行われて新しい行や列が表示される際に、スクロール操作に応じて必要なDOM構造を順次追加し、画面要素を動的に生成していくこととなる。
【0008】
【非特許文献1】「米Google、表計算Webアプリケーション「Google Spreadsheets」ベータ版」、[online]、2006年6月7日、INTERNET Watch、[2007年12月28日検索]、インターネット<URL : http://internet.watch.impress.co.jp/cda/news/2006/06/07/12229.html>
【発明の開示】
【発明が解決しようとする課題】
【0009】
リッチ・ユーザ・インタフェース技術を用いてウェブ・ブラウザ上で動作するスプレッドシートを実現する場合、上記のように、初期表示の際に全ての行と列について画面要素を生成する方法と、初期表示の際には表示される領域のみについて画面要素を生成する方法とが考えられる。
しかし、第1の方法では、最初に、表示される部分に関わらずスプレッドシートの全体が生成されるため、スプレッドシートのサイズ次第では初期表示の際の待ち時間が非常に大きくなる。また、行や列の高さおよび幅のサイズを変えるような、画面要素の構成を変更する操作を行ったときの待ち時間も非常に大きくなる。
【0010】
一方、第2の方法では、初期表示に要する時間は必要最小限で済むものの、スクロールの度にDOM構造を追加し画面要素を生成するため、処理に時間を要し、スムーズなスクロールを行うことが困難になる。また、生成された行や列が累積されるに伴って、DOM構造が大きくなり、画面要素の追加生成の処理における負担が増加するため、スクロールがさらに遅くなる。
【0011】
本発明は、以上の課題を解決し、初期表示に要する時間の短縮と、スクロール操作における反応時間の短縮とを両立させることを目的とする。
【課題を解決するための手段】
【0012】
上記の目的を達成するため、本発明は、次のようなシステムとして構成される。このシステムは、グリッド表示を行うアプリケーションを実行するシステムにおいて、セルの表示要素の集合で構成される格子状に区切られた画面を生成する画面生成部と、この画面生成部により生成された画面をディスプレイ装置に表示する表示部と、ディスプレイ装置に表示された画面に対するスクロール操作を受け付け、画面のスクロールを制御するスクロール制御部とを備える。そして、このスクロール制御部は、スクロール操作によって、ディスプレイ装置に表示される可視領域から外れるセルと、新たに可視領域に入るセルとが存在する場合に、可視領域から外れるセルの表示に用いられた表示要素における位置情報を含む属性を可視領域に入るセルを表す内容に変更することにより、可視領域に入るセルをディスプレイ装置に表示させる。
【0013】
また、このシステムにおいて、スクロール制御部は、可視領域から外れるセルの数よりも可視領域に入るセルの数の方が多い場合に、両者の差分の数だけセルの表示要素を生成し、この表示要素により可視領域に入るセルをディスプレイ装置に表示させる。
さらに詳細には、画面において前記セルが行列をなして整列し、スクロール操作によって、少なくとも1つの列を構成するセルが可視領域から外れ、かつ少なくとも1つの列を構成するセルが新たに可視領域に入る場合に、スクロール制御部は、可視領域に入る列における各セルの行方向の位置が可視領域から外れた列におけるセルの行方向の位置に対応するように、セルの表示要素の属性を変更する。
さらにまた、スクロール操作によって、少なくとも1つの行を構成するセルが可視領域から外れ、かつ少なくとも1つの行を構成するセルが新たに可視領域に入る場合に、スクロール制御部は、可視領域に入る行における各セルの列方向の位置が可視領域から外れた行におけるセルの列方向の位置に対応するように、セルの表示要素の属性を変更する。
【0014】
より好ましくは、このシステムは、画面において複数のセルがまとまって1つのセルとして扱われる連結セルを構成する場合、スクロール制御部は、セルの表示要素の属性を変更する際に、スクロール前に連結セルを構成していたセルを検出し、セルの表示要素の属性を、連結セルにおいてスクロール後に画面に表示されている部分を構成する内容に設定し直す。
さらに好ましくは、画面生成部は、画面のサイズとセルのサイズとに基づいて、画面に同時に表示されるセルの数の最大値を算出し、この最大値に基づいて特定される数の表示要素を生成し、画面を生成する。
【0015】
また本発明は、方法のカテゴリにおいて把握することができる。この方法は、コンピュータにより、グリッド表示を行うアプリケーションの表示制御を行う方法において、セルの表示要素の集合で構成される格子状に区切られた画面を生成してディスプレイ装置に表示させるステップと、ディスプレイ装置に表示された画面に対するスクロール操作を受け付けてスクロール制御を行い、ディスプレイ装置に表示される可視領域から外れるセルと、新たに可視領域に入るセルとが存在する場合に、可視領域から外れるセルの表示に用いられた表示要素における位置情報を含む属性を可視領域に入るセルを表す内容に変更することにより、可視領域に入るセルをディスプレイ装置に表示させるステップとを含む。
【0016】
さらに本発明は、コンピュータを制御して、上記のシステムとして機能させるプログラムや、上記の方法における各ステップに対応する処理を実行させるプログラムとしても実現される。このプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記憶媒体に格納して配布したり、ネットワークを介して配信したりすることにより、提供することができる。
【発明の効果】
【0017】
以上のように構成された本発明によれば、グリッド表示を行うアプリケーションを実行し表示制御を行う場合に、初期表示に要する時間を短縮し、かつスクロール操作における反応時間も短縮させることができる。
【発明を実施するための最良の形態】
【0018】
以下、添付図面を参照して、本発明の実施形態について詳細に説明する。
<システム構成>
本実施形態によるアプリケーション実行システムは、パーソナルコンピュータ等のコンピュータにより実現される。図1は、本実施形態のシステムを実現するコンピュータのハードウェア構成例を示す図である。
【0019】
図1に示すコンピュータ10は、演算手段であるCPU(Central Processing Unit)10aと、記憶手段であるメイン・メモリ10cおよび磁気ディスク装置(HDD:Hard Disk Drive)10gを備える。また、ネットワークを介して外部装置に接続するためのネットワーク・インタフェース・カード10fと、表示出力を行うためのビデオ・カード10dおよび表示装置10jと、音声出力を行うための音声機構10hとを備える。さらに、キーボードやマウス等の入力デバイス10iを備える。
【0020】
図1に示すように、メイン・メモリ10cおよびビデオ・カード10dは、システム・コントローラ10bを介してCPU10aに接続されている。また、ネットワーク・インタフェース・カード10f、磁気ディスク装置10g、音声機構10hおよび入力デバイス10iは、I/Oコントローラ10eを介してシステム・コントローラ10bと接続されている。各構成要素は、システム・バスや入出力バス等の各種のバスによって接続される。例えば、CPU10aとメイン・メモリ10cの間は、システム・バスやメモリ・バスにより接続される。また、CPU10aと磁気ディスク装置10g、ネットワーク・インタフェース・カード10f、ビデオ・カード10d、音声機構10h、入力デバイス10i等との間は、PCI(Peripheral Components Interconnect)、PCI Express、シリアルATA(AT Attachment)、USB(Universal Serial Bus)、AGP(Accelerated Graphics Port)等の入出力バスにより接続される。
【0021】
なお、図1は、本実施形態が適用されるのに好適なコンピュータのハードウェア構成を例示するに過ぎず、実際の各サーバが図示の構成に限定されないことは言うまでもない。例えば、ビデオ・カード10dを設ける代わりに、ビデオメモリのみを搭載し、CPU10aにてイメージ・データを処理する構成としても良い。また、音声機構10hを独立した構成とせず、システム・コントローラ10bやI/Oコントローラ10eを構成するチップセットの機能として備えるようにしても良い。また、補助記憶装置として磁気ディスク装置10gの他に、各種の光学ディスクやフレキシブル・ディスクをメディアとするドライブを設けても良い。表示装置10jとしては、主として液晶ディスプレイが用いられるが、その他、CRTディスプレイやプラズマ・ディスプレイ等、任意の方式のディスプレイを用いて良い。
【0022】
図2は、本実施形態によるアプリケーション実行システムの機能構成を示す図である。
図2に示すアプリケーション実行システム100は、例えば図1に示したコンピュータ10において、メイン・メモリ10cに読み込まれたプログラムをCPU10aが実行することにより実現され、オペレーティング・システム(以下、OSと略記する)110と、OS110上で動作するウェブ・ブラウザ120とを備える。ウェブ・ブラウザ120は、スプレッドシート生成部121と、スクロール制御部122とを備える。スプレッドシート生成部121およびスクロール制御部122は、DHTMLやJavaScriptを用いて記述され、ウェブ・ブラウザ120上で動作するが、図示しないウェブ・サーバからオンラインで提供されるアプリケーション(スプレッドシート)の機能の一部として実現される。また、このアプリケーションによるスプレッドシートの画面は、ウェブ・ブラウザ120の機能により、ディスプレイ装置200に表示される。すなわち、ウェブ・ブラウザ120は、スプレッドシートの画面をディスプレイ装置200に表示する表示部としても機能する。ディスプレイ装置200は、例えば図1に示した表示装置10jにより実現される。
【0023】
<スプレッドシート生成部の機能>
スプレッドシート生成部121は、アプリケーションの起動時に、セルの集合で構成されるスプレッドシートの画面要素を生成する。言い換えれば、スプレッドシート生成部121は、グリッド形式によるスプレッドシートの画面を生成する画面生成部である。スプレッドシートのセル表示には、TABLE要素およびその子要素となる特定のテーブル関連の要素群は使わず、CSS(Cascading Style Sheet)機能のボックス・モデル に関するスタイル属性を用いる。ここで、ボックス・モデルとは、様々な表示要素に共通である矩形領域としてのスタイル属性の意味を規定するものである。
【0024】
このスタイル属性は、それが有効であるような表示要素に関連付けて指定される。例えば、特定の表示様式を持たないDIV要素にこのスタイル属性を与えることができ、これにより、枠線(境界線)の表示、枠線の色、セルのサイズ、背景色などを表現した、スプレッドシートのセルとして用いられる矩形領域を表示することができる。なお、セルを構成するためにDIV要素以外の要素を用いることも可能であるが、以下では、DIV要素が用いられた場合の例について説明する。
【0025】
複数のDIV要素を、親表示要素(例えば、親もDIV要素でよい)の子要素として、行列状に配置することにより、格子状にセルが区切られたスプレッドシートが表示できる。DIV要素は、さらに子要素を持つことができるので、スプレッドシートの各セルの内側に、DIV要素の子要素としての適当な要素による表示を入れることができる。
【0026】
CSSのボックス・モデルでは、position属性を用いることにより、親表示要素のボックスと子要素のボックスとの位置関係を指定することができる。特に、子要素のposition属性の値として「absolute」を指定し、さらにその実際の位置属性を与えることにより、その子要素の表示位置を親表示要素のボックスの左上の点を基点とした座標系の上で指定できる。
【0027】
図3は、スプレッドシートを実現するためのDOM構造の例を示す図である。
図3に示す例では、スプレッドシートを構成するDOM構造が、可視域表示要素(第1層)、セル平面表示要素(第2層)、セル表示要素(第3層)の3層で構成されている。
第1層の可視域表示要素には、スプレッドシートのうち、現在画面上に表示されている部分(可視域)のサイズが指定されている。この可視域表示要素は、さらに上位の要素の部分として画面上に現れる。
第2層のセル平面表示要素は、第3層のセル表示要素群の配置を決めるための座標系を定義する。図3に示す例では、左端の上から2番目のセルの位置が、座標(△s,△t)で示されている。
第3層のセル表示要素は、スプレッドシートを構成する個々のセルを定義する。
【0028】
ここで、第1層で設定される可視域と第2層で設定されるセル平面の位置関係を変えることがスクロール操作に相当する。図3に示す例では、可視域に対するセル平面の位置が、座標(△x,△y)で示されている。また、図3に示すセル平面のうち、網掛けの部分が画面上に見えている部分を表している。
【0029】
スプレッドシートの全てのセルに関するサイズ、背景色、内容等の各種の情報は、アプリケーションを提供するウェブ・サーバからウェブ・ブラウザ120により取得され、図1に示したメイン・メモリ10c等のメモリ領域に読み込まれているものとする。また、必要なときに随時ウェブ・ブラウザ120からウェブ・サーバにリクエストして、必要な情報を取得できるものとしても良い。例えば、2次元配列cellsを用意し、i行j列目のセルの情報へのアクセスを、cells[i][j]のような式で表すとする。このとき、例えばセルの幅は、cells[i][j].widthといった式を評価することで取得される。
【0030】
スプレッドシート生成部121は、最初の画面の作成において、可視域表示要素、セル平面表示要素を生成すると共に、セル表示要素とその子孫については、可視領域を埋めるのに十分な数を生成する。このとき、どれだけの数のセル表示要素を生成するかに関しては、次のいずれかの方針を採り得る。
(i)可視領域を埋めるのに必要な行および列をそれぞれ求め、それの範囲に含まれるセルの数だけ生成する。
(ii)スプレッドシート全域にスクロールしたときに、それぞれの場所での可視領域に含まれる行数と列数を判定し、それぞれの最大値の積の数だけ生成する。
【0031】
(i)は、必要になるまではできるだけセル表示要素の数を増やさないという方針である。一方、(ii)は、可視領域のサイズが変わらない限りは、スクロールの途中で表示に必要なセル表示要素の追加が起こらない。そのため、スクロール中には表示要素の追加に関する処理時間を要しない。したがって、各スクロール単位の処理量が一定になる。
【0032】
<スクロール制御部の機能>
スクロール制御部122は、ユーザが図1の入力デバイス10iを用いて行ったスクロール操作に応じて、画面のスクロールを実行する。画面のスクロールは、セル平面の、可視領域からの相対的な位置を変更することにより行われる。可視領域が右にスクロールするということは、可視領域に対するセル平面の基点の位置が左に移動するということである。可視領域が左にスクロールする場合の処理、また上下方向のスクロールに関しても、同様に考える。
【0033】
図4は、可視領域が右にスクロールする様子を示す図である。
所定の幅のスクロールを行うと、スクロール前に可視領域に含まれていてスクロール後に可視領域の外に出る列が発生する。これを削除列と呼ぶことにする。発生する削除列の数は、0列、1列または複数列である。図4(a)に示す例では、スクロールにより、セル平面の基点の位置が(△x1,△y)から(△x2,△y)に移動している。そして、これにより、左端の1列が可視領域から外れ、削除列となっている。
【0034】
また、新しく可視領域になった領域のうち、まだセル表示要素が配置されていない部分が発生する。これを追加列と呼ぶことにする。発生する追加列の数は、0列、1列または複数列である。削除列よりも追加列の方が多い場合、スクロール制御部122は、その差の数の追加列を選び、それらの列上に配置するセル表示要素を新たに生成する。そして、生成した各セル表示要素に対して、位置属性を含む必要な属性を設定する。
【0035】
残りの追加列(削除列と同数分の追加列、ただし1以上の場合)については、スクロール制御部122は、削除列上に配置されていたセル表示要素に関して、追加列上に配置しなおすために、位置属性を含む必要な属性を設定する。そして、削除列上にあった各セル表示要素は追加列上に再配置される。すなわち、削除列と同数分の追加列に関しては、セル表示要素が新しく生成されるのではなく、図4(b)に示すように、既存のセル表示要素が移動することで充当されることとなる。セル表示要素の生成に要する処理時間は比較的大きいが、このように既存のセル表示要素を流用することで、処理時間を短縮できる。
【0036】
さらに、各々のセル表示要素は、移動前と後とで同じ行に対応するように配置される。このようにすることで、行ごとに設定されるセルの属性(例えば、高さや背景色などが行ごとに設定されているような場合)について再度設定し直さずに済むため、処理時間のさらなる短縮を図ることができる。
【0037】
さて、スクロール制御部122は、上述したように、スクロール時の処理として可視領域から外に出た削除列に配置されているセル表示要素を取得し、その属性を変更する操作を行う。そこで、各時点でのセル表示要素の行・列位置に応じて、特定の行や列上のセル表示要素を取得するための、また、行や列の単位でセル表示要素の位置を変更したときに変更後の位置関係を記憶しておくための、効率のよいデータ構造を設計する必要がある。
【0038】
1つの方法として、JavaScriptの配列(1次元配列)を使って、行や列を表し、その集まりをさらに上位の配列で表すことで行列に相当する2次元配列を構成し、この配列を用いて特定の行や列に位置づけられているセル表示要素を記憶することが考えられる。例えば、配列名をcellsとすると、100行目、500列目の位置をあらわすのにcells[100][500]のように記述する。そして、この配列への代入操作、アクセス操作により、セル表示要素を記憶したり、アクセスしたりする。一般に、スプレッドシート全体の位置を表すには、配列のインデックスは非常に大きな数になる。しかし、JavaScriptの配列は、インデックスが数字の場合でもいわゆる連想配列である。そのため、インデックスの数値が大きくなった場合でも、配列要素が空の部分に関しては実際の記憶領域を必要としない。したがって、この配列は、アクセスの性能と記憶領域の両方において十分効率の良いデータ構造である。
【0039】
<スプレッドシート生成部およびスクロール制御部の動作の具体例>
次に、具体的なスプレッドシートの構成例を挙げて、スプレッドシート生成部121およびスクロール制御部122の動作について、さらに詳細に説明する。
図5は、スプレッドシートの構成例を示す図である。
図5において、スプレッドシートの上辺および左辺の数字は、各行および各列の幅および高さを表す。また、各セルに記載されたC(i,j)は、そのセルに付けられた名前とする。図示の例では、スプレッドシートの左上の3行4列についてのみサイズが記述されているが、省略されている右方向および下方向へセルは続いている。そして、図示されたサイズ以外に、データ、前景色、背景色などセルの表示に必要なデータが、各セルのC(i,j)に関連付けてメモリに保持されているものとする。
【0040】
図6は、スプレッドシートにおける可視域のサイズの例を示す図である。
図6に示す可視域のサイズの値と図5に示したスプレッドシートの行および列のサイズの値は、同一の単位によるものとする。
図7は、図5のスプレッドシートの上に図6の可視域を重ね合わせた様子を示す図である。図において網掛けされた部分が可視域を表している。
図7に示す例では、スプレッドシートの左上隅の点から表示されるものとして、左上3行3列が可視域に掛かっていることがわかる。
以上の状況において、スプレッドシート生成部121は、スプレッドシートの可視域を表示するためにDIV要素による図3を参照して説明した3層のDOM構造を作成する。
【0041】
第1層のDIV要素では、スタイル属性として少なくとも可視域の幅と高さが設定される。この設定を、以下のように表記する。
DIVp.style = “width: 200; height: 150”
この記載は、第1層目のDIV要素であるDIVpのスタイル属性として、幅属性widthが200、高さ属性heightが150であることを意味する。なお、以下の説明も含め、これらの属性名は標準的なWebブラウザのスタイルシート技術に準じたものである。
【0042】
次に、第2層のDIV要素DIVmのスタイル属性は、次のように設定する。
DIVm.style = “position: absolute; overflow: visible; left: 0; top: 0; width: 0; height: 0”
この記載は、位置指定属性positionは値がabsoluteで、この要素の位置が親の要素の左上の点からの座標で指定されることを意味する。オーバフロー属性overflowは値がvisibleで、この要素の子要素がDIVmの幅、高さの範囲を超えた場所に配置されたときの扱いとして可視とすることを指定している。位置は、左leftが0、上topが0で、この要素の左上の点が親要素の左上の点と同じであることを意味する。幅、高さは何でも良いが、ここではwidthは0と高さも0としている。オーバフロー属性の指定がvisibleであるので、子要素はDIVmのサイズに関わらず表示される。
【0043】
第3層目のDIV要素群は、現在の可視域を漏れなく表示するために9個生成される。各DIV要素にはDIV1からDIV9と名付ける。
図8に、各DIV要素の配置の例を示す。
各DIV要素のスタイル属性に関して、位置指定属性positionは、値はabsoluteとし、親すなわちDIVmの左上の点からの位置で指定されるものとする。位置を指定する属性left、topは、各々の行、列の高さ、幅の情報から計算され指定される。例えばDIV5は、left:100;top:50;width:90;height:50となる。その他、各セルに関する色やフォントなどのスタイル属性やデータ表示のための子要素などを第3層のDIV要素群に設定することで各セルの表示が完成する。
【0044】
次に、上記のように生成されたスプレッドシートにおいて、右に1列分すなわち100だけスクロールすることを考える。
図9は、スクロール後の新しい可視域と現在の第3層のDIV要素の位置の関係を示す図である。
図9を参照すると、現在1列目(左端)にあるDIV要素の位置は、スクロール後には完全に可視域から外に出る。一方2列、3列のDIV要素は新しい可視域にも含まれる。4列目のセルに関しては現在DIV要素がない。第2、3、4列が表示できれば新しい可視域は漏れなく表示できる。そこで、スクロール後の表示を構成する操作は、次の通りになる。
【0045】
スクロール制御部122は、まず、第2層のDIVmについて、left属性を0から−100に変更する。これにより、第2層の第1層に対する相対位置が左に100移動する。これは、第1層の可視域を基準にすると第2層が右に100移動することを意味する。次に、第3層のDIV1、DIV2、DIV3のleft属性を240に、width属性を120に変更する。さらに、この3つのDIV要素について、新しくこれらの要素が表示するセルの表示に必要なスタイル属性やデータを表示する子要素を設定する。
【0046】
図10は、以上の操作による最終的な第1層の可視域、第2層、第3層のDIV要素の位置関係を示す図である。
以上の操作において、DIV4からDIV9に関しては位置を含め全く属性や下位構造を変更していない。また、第3層において新しいDIV属性を追加していない。これらの点は、スクロールにおける処理時間を低減するのに効果的であり、特にスプレッドシートの表示されるセル数が多い場合は顕著である。第3層の新しいDIV属性の生成については、可視域を埋め尽くすのに十分なDIV要素が足りない場合には必要になる。しかし、予め広めに第3層のDIV要素を作っておく場合や、ある程度DIV要素を追加した後では、多くの場合で既存のDIV要素を再利用できることが期待できる。
【0047】
図11は、スクロール制御部122による処理の流れを示すフローチャートである。
図11に示すように、スクロール制御部122は、スクロール動作を行った際に、まず削除列の数と追加列の数とを比較する。削除列の数が追加列の数以上である場合は(ステップ1101でNo)、削除列の数が0であれば(すなわち、削除列も追加列も0である場合)、可視領域に含まれ表示されるセルはスクロールによって変わらないので、スクロール制御部122はそのまま処理を終了する(ステップ1102でNo)。
【0048】
一方、削除列の数が1以上である場合は(ステップ1102でYes)、スクロール制御部122は、削除列にある各DIV要素の属性を、追加列のセルを表す内容に変更する(ステップ1103)。これにより、削除列のセルを表示するために使用されていたDIV要素が、追加列のセルを表示するために使用されることとなる。
【0049】
次に、削除列の数よりも追加列の数の方が多い場合(ステップ1101でYes)、削除列の数が0であれば(ステップ1104でNo)、追加列のセルの分だけDIV要素が不足するので、スクロール制御部122は、必要な数のDIV要素を生成する(ステップ1105)。生成されたDIV要素は、追加列のセルを表示するために使用される。
【0050】
一方、削除列の数が1以上である場合は(ステップ1104でYes)、スクロール制御部122は、削除列にある各DIV要素の属性を、追加列のセルを表す内容に変更する(ステップ1106)。しかし、これでは追加列の全てのセルを表示するには足りないので、スクロール制御部122は、不足分のDIV要素を生成する(ステップ1107)。そして、削除列のセルを表示するために使用されていたDIV要素と、追加生成により補充されたDIV要素が、追加列のセルを表示するために使用される。
【0051】
なお、上記の動作例は、スクロールによってスプレッドシートの列が削除され、また追加される場合について説明したが、他の方向へのスクロールによってスプレッドシートの行が削除され、追加される場合も、処理の流れは同様である。また、フローチャートには図示されていないが、削除列の方が追加列よりも多い場合、追加列のセルの表示に使用されない余剰のDIV要素が発生する。この場合、余ったDIV要素は、例えば、スクロール方向の延長上で未だ表示されていない列のセルに割り当てて配置しておけば良い。このようにすることで、実際にさらにスクロール操作が行われて、当該列が表示されることになったとしても、DIV要素を新たに生成する必要がなくなる。あるいは、別の方法として、余剰分の削除列(DIV要素)を変更せずに残すことも考えられる。残った削除列は、次の同方向へのスクロール時に、その時点の削除列の一部として考慮される。この方法によれば、スクロール時点での処理量を必要最小限とし、かつスクロール方向が逆方向に変わった場合の変更量を減らすことができる。
【0052】
<初期表示におけるセル表示要素の生成>
スクロール中にセル表示要素の追加が起こると、そのための処理時間がかかり、スクロールの遅延の原因となる。スプレッドシート生成部121が、初期可視域において、必要な数よりも多めのセル表示要素を予め生成しておけば、このような要素追加が起こる可能性は低くなる。このような要素追加が全く起きないようにするには、スプレッドシート全域にわたってスクロールしたときのそれぞれの場所での可視領域に含まれる行数と列数を判定し、その最大数の行と列をもったセル表示要素を初期表示時に生成し、配置しておけば良い(スプレッドシート生成部121の機能で説明した(ii)の方針)。可視領域に含まれる行数と列数は、実際に競る表示要素を生成することなく、可視領域のサイズと各セルのサイズの情報に基づいて計算される。ただし、スプレッドシートのセルサイズの定義や可視域のサイズが変化しないことが前提となる。
【0053】
図12は、行方向に関して可視領域に含まれる行数の最大値を求めるプログラムのJavaScript言語で書いた擬似コードを示す図である。図には行方向に関するプログラムが記載されているが、列方向についても同様に計算できる。
図示のプログラム例は、1行単位でスクロールを順次進めていき、それぞれの時点で可視域を埋めるのに必要な行数を求め、その最大値を求めるものである。スクロールを行の単位で進める場合は、このプログラムで必要な行数の最大値が求められる。また、スクロールを行の単位よりも小さな単位で行える場合には、可視域を埋める行数の最大値は、このプログラムで計算した最大値よりも高々1大きな値になる。したがって、その場合でもこのプログラムを適用して行数の最大値を決めることができる。
【0054】
このように計算した表示に必要な最大行数、最大列数が大きな数になった場合、初期状態の処理量が多くなり、初期画面の起動遅延時間が大きくなることもあり得る。初期起動時間を優先し、スクロール中で起こるセル表示要素の生成に起因する遅延を選択するか、初期起動時間を犠牲にしてスクロール中の遅延を全くなくすか、その中間の調整をして遅延を初期処理とスクロール時に分散させるかは、設計上の判断となる。
【0055】
<連結セルの取り扱い>
通常、高機能のグリッド表示コンポーネントやスプレッドシートは、連結セルを扱う機能を持つ。連結セルは、複数のセルの集まりを、行の範囲と列の範囲により指定し、これらのセルの大きさをまとめた1つのセルとして表示するものである。連結セル中に表示する情報は、連結前のセルのうちのいずれか1つ(例えば左上隅のセル)と関連付ける。連結セルの範囲として指定したセルを連結要素と呼ぶ。
【0056】
連結セルを含む場合の処理方法は、上述した連結セルを考えない場合の処理を拡張して実現される。初期画面の作成時、またはスクロール時で、それぞれのセル表示要素の幅、高さ、およびセル平面表示要素からの位置を指定する局面を考える。このとき、連結セルを考えない場合は、対応するセルの情報から幅、高さを取得し、また周囲のセルとの位置関係、周囲のセルの大きさにより位置を決定した。
【0057】
これに対し、連結セルを考える場合は、次のように拡張する。まず、上記と同様の局面において、対応するセルが連結要素でなければこれまでと同様の処理を行う。一方、対応するセルが連結要素である場合、そのセル表示要素が代表表示要素かそれ以外の表示要素かを後述する方法で判定する。そして、代表表示要素である場合には、表示の大きさは対応する連結要素を含む連結セルの大きさとする。また、表示の位置はその連結セルに含まれる連結要素のうちの左上隅の要素の左上隅の位置にあわせる。それ以外の表示要素の場合は、表示の大きさはゼロ(もしくは非表示になるような方法であればどのようなものでも良い)にする。ある連結セルに対応する代表表示要素とは、現在の表示要素のなかで対応するセルがその連結セルの連結要素であるもののうち、その位置が左上隅にあるものを指す。
【0058】
所定のセル表示要素が代表表示要素かどうかの判定は次のようにして行う。
(1)もし、そのセル表示要素が現在の全てのセル表示要素の中で左上隅にある場合は、代表表示要素である。
(2)それ以外の場合で、そのセル表示要素が現在の全てのセル表示要素の中で最も左の列にあり、かつ、対応するセルがある連結セルの連結要素のうち最も上の行にある場合は、代表表示要素である。
(3)それ以外の場合で、そのセル表示要素が現在の全てのセル表示要素の中で最も上の行にあり、かつ、対応するセルがある連結セルの連結要素のうち最も左の行にある場合は、代表表示要素である。
(4)それ以外の場合はそのセル表示要素は代表表示要素ではない。
【0059】
スプレッドシート生成部121が初期画面を表示する際は、全てのセル表示要素において、上記の手順で、大きさと位置を指定する。スクロール制御部122が画面のスクロールを行う際は、例えば左から右にスクロールする場合、新しく生成されたセル表示要素および削除列に含まれ位置変更の対象となったセル表示要素について、上記の手順で、大きさと位置を指定する。また、所定の削除列のセル表示要素が移動し、新しく左端となった列に含まれるセル表示要素全てについて、上記の手順で大きさおよび位置を設定し直す。その他の方向にスクロールする場合も、同様の考え方で処理を行う。
【0060】
図13は、セルの定義と表示要素との関係を模式的に表した図である。図13(a)には、大きさなどのセルの情報の位置的な関係と連結セルの定義(情報)が示されており、図13(b)には、これらのセルの定義と表示要素との関係が示されている。
セル表示要素のうち、連結要素と対応がとれ、かつ左上隅に位置するセル表示要素が、代表表示要素である(図において太線で示したDIV要素)。代表表示要素は、スクロールの度に選択され、その大きさと位置が設定される。代表表示要素の大きさと位置は、図において網掛けで示した部分、すなわち連結セルの大きさと位置に相当するものに設定される。また、代表表示要素がスクロールにより代表表示要素でなくなり、かつ依然として連結要素に対応している場合は、大きさがゼロに設定される。
【0061】
<連結セルの取り扱いの具体例>
次に、具体的なスプレッドシートの構成例を挙げて、連結セルの取り扱いについて、さらに詳細に説明する。
図14は、連結セルを含むスプレッドシートの構成例を示す図である。
図14に示すスプレッドシートは、図5に示したスプレッドシートと同様の構成であるが、セルC(1,1)、C(1,2)、C(2,1)、C(2,2)が連結され、この4つのセルの領域を併せたものが1つの連結セルとして扱われる。このような連結情報は、それぞれの連結されるセルに関連してメモリに保持されており、連結されたセルの大きさが計算できるものとする。また、連結セルの表示データやサイズ以外のスタイルに関する情報も、適当な手段でこれらのセルと関連付けて記憶され、スプレッドシート表示の処理において、取得し計算できるものとする。図において網掛けされた部分が可視域を表している。
【0062】
最初の表示がスプレッドシートの最左上の点を基準にするものとする。この場合、まず、第3層のDIV要素として、表示域を埋めるのに必要なセルに対応させてDIV1からDIV9までが生成される。
図15に、各DIV要素の配置の例を示す。
連結セルが画面に含まれているので、連結セルとして扱われるセルに対応するDIV要素の1つ、ここではDIV1を代表表示要素として選ぶ。図において、連結セルを構成するDIV要素は破線で示されており、特に代表表示要素は太い破線で示されている。
【0063】
図15に示すスプレッドシートにおいて、連結セル以外のセルに対応するDIV要素については、通常通りに位置、サイズなどの属性が設定される。
一方、連結セルの代表表示要素については、連結セルの位置、サイズその他の属性が設定される。図示の例では、位置、サイズは、left:0;top:0;width:190;height:100となる。連結セル内のセルに対応していてかつ代表表示要素でない要素DIV2、DIV4、DIV5については、非表示になるように、例えばサイズを0とするように属性が設定される。この結果、連結セルの部分が1つの大きなセルとして表示される。
【0064】
次に、このスプレッドシートが右に1列分スクロールする場合を考える。
図16は、図15の状態から右に1列分スクロールした状態を示す図である。
まず、連結セルを考えずに、通常通り、第1列のDIV1、DIV2、DIV3要素に関して、第4列目を表示するように設定が変えられる。このとき、DIV1は連結セルの表示として使われなくなる。
【0065】
次に、新しく左端の列となった第2列に注目し、この列に連結セルの一部となる要素が含まれているか否かをチェックする。この例では第2列に連結セルが掛かっている。代表表示要素は、連結セルの一部として表示されるセル領域のなかで最左上に対応する要素と決めているので、連結セルの領域に対応しているDIV4、DIV5のうちDIV4が代表表示要素となる。DIV4の位置、サイズは、それぞれleft0;top0;width190;height100となる。DIV5は、非表示になるようにサイズが0に設定される。この結果、スクロール後には、左側が欠けた連結セルが可視域左端に現れることになる。
【0066】
以上の操作では、スクロール後に新しく端になった列(縦方向のスクロールの場合は行)から代表表示要素を選択し、その代表表示要素とその回りの代表表示要素にならなかったDIV要素に対して、適切に位置、サイズを設定する処理が追加された。そして、この追加された処理を除けば、連結セルが無い場合のスクロール処理と同じである。すなわち、連結セルが無い場合のスクロール処理に対して上記の簡単な拡張を行うのみで、連結セルを含む場合のスクロール処理が実現できた。
【0067】
効率上の配慮として、スプレッドシートにおいて、連結セルの指定、もしくは指定解除の時点で、スプレッドシート中の連結セルの有無を記憶しておき、それに応じてスクロール処理方式を切り替えるようにする。これにより、連結セルが1つも無い場合には、上記のような連結セルのための追加処理を行わないような制御を行っても良い。
【0068】
図17は、連結セルが存在する場合のスクロール制御部122による処理の流れを示すフローチャートである。
図17において、ステップ1701〜1703の動作は、図11に示したステップ1101〜1103と同様である。また、削除列の数よりも追加列の数の方が多い場合(ステップ1701でYes)におけるステップ1706〜ステップ1708およびステップ1711の動作は、図11に示したステップ1104〜1107の動作と同様である。
【0069】
本動作例では、ステップ1703においてDIV要素の属性が変更された後、スクロール制御部122は、スクロール前に連結セルを構成していたセルであって、スクロール後の可視域に含まれているセルのDIV要素を検出し、代表表示要素を選択する(ステップ1704)。そして、スクロール後の可視域に含まれる範囲で連結セルを構成する各セルのDIV要素の属性を、連結セルを表す内容に再設定する(ステップ1705)。
【0070】
ステップ1708においてDIV要素の属性が変更された後も、同様に、代表表示要素の選択(ステップ1709)、連結セルを構成する各セルのDIV要素における属性の再設定(ステップ1710)が行われる。なお、図17のフローチャートでは、連結セルに対する処理(ステップ1709、1710)が行われた後に、不足分のDIV要素の生成(ステップ1711)が行われることとしているが、これらの実行順は図示の例に限定されるものではない。
【0071】
以上、本実施形態について説明したが、本発明の技術的範囲は上記実施形態に記載の範囲には限定されない。例えば、上記実施形態では、ウェブ・ブラウザ120上で動作するアプリケーションがスプレッドシートである場合を例として説明したが、この他、グリッド形式の表示を行う種々のアプリケーションに対して、本実施形態を適用することができる。また、本実施形態では、アプリケーションは、ウェブ・サーバからオンラインで提供されることを想定して説明したが、ウェブ・ブラウザ120上で動作するアプリケーションであれば、オンラインで提供されるものに限定されない。その他、上記実施形態に、種々の変更または改良を加えたものも、本発明の技術的範囲に含まれることは、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【0072】
【図1】本実施形態が適用されるシステムを実現するコンピュータのハードウェア構成例を示す図である。
【図2】本実施形態によるアプリケーション実行システムの機能構成を示す図である。
【図3】本実施形態でスプレッドシートを実現するためのDOM構造の例を示す図である。
【図4】本実施形態において、可視領域がスクロールする様子を示す図である。
【図5】本実施形態で用いられるスプレッドシートの構成例を示す図である。
【図6】スプレッドシートにおける可視域のサイズの例を示す図である。
【図7】図5のスプレッドシートの上に図6の可視域を重ね合わせた様子を示す図である。
【図8】図7に示すスプレッドシートにおける各DIV要素の配置の例を示す図である。
【図9】スクロール後の新しい可視域と現在の第3層のDIV要素の位置の関係を示す図である。
【図10】最終的な第1層の可視域、第2層、第3層のDIV要素の位置関係を示す図である。
【図11】本実施形態のスクロール制御部による処理の流れを示すフローチャートである。
【図12】行方向に関して可視領域に含まれる行数の最大値を求めるプログラムのJavaScript言語で書いた擬似コードを示す図である。
【図13】本実施形態におけるセルの定義と表示要素との関係を模式的に表した図である。
【図14】連結セルを含むスプレッドシートの構成例を示す図である。
【図15】図14に示すスプレッドシートにおける各DIV要素の配置の例を示す図である。
【図16】図15の状態から右に1列分スクロールした状態を示す図である。
【図17】連結セルが存在する場合のスクロール制御部による処理の流れを示すフローチャートである。
【符号の説明】
【0073】
100…アプリケーション実行システム、110…オペレーティング・システム(OS)、120…ウェブ・ブラウザ、121…スプレッドシート生成部、122…スクロール制御部、200…ディスプレイ装置
【特許請求の範囲】
【請求項1】
グリッド表示を行うアプリケーションを実行するシステムにおいて、
セルの表示要素の集合で構成される格子状に区切られた画面を生成する画面生成部と、
前記画面生成部により生成された前記画面をディスプレイ装置に表示する表示部と、
前記ディスプレイ装置に表示された前記画面に対するスクロール操作を受け付け、画面のスクロールを制御するスクロール制御部とを備え、
前記スクロール制御部は、
前記スクロール操作によって、前記ディスプレイ装置に表示される可視領域から外れるセルと、新たに可視領域に入るセルとが存在する場合に、前記可視領域から外れるセルの表示に用いられた表示要素における位置情報を含む属性を前記可視領域に入るセルを表す内容に変更することにより、当該可視領域に入るセルを前記ディスプレイ装置に表示させる、システム。
【請求項2】
前記スクロール制御部は、前記可視領域から外れるセルの数よりも前記可視領域に入るセルの数の方が多い場合に、両者の差分の数だけ前記セルの表示要素を生成し、当該表示要素により当該可視領域に入るセルを前記ディスプレイ装置に表示させる、請求項1に記載のシステム。
【請求項3】
前記画面において前記セルが行列をなして整列し、スクロール操作によって、少なくとも1つの列を構成するセルが前記可視領域から外れ、かつ少なくとも1つの列を構成するセルが新たに当該可視領域に入る場合に、前記スクロール制御部は、当該可視領域に入る列における各セルの行方向の位置が当該可視領域から外れた列における当該セルの行方向の位置に対応するように、当該セルの前記表示要素の属性を変更する、請求項1に記載のシステム。
【請求項4】
前記画面において前記セルが行列をなして整列し、スクロール操作によって、少なくとも1つの行を構成するセルが前記可視領域から外れ、かつ少なくとも1つの行を構成するセルが新たに当該可視領域に入る場合に、前記スクロール制御部は、当該可視領域に入る行における各セルの列方向の位置が当該可視領域から外れた行における当該セルの列方向の位置に対応するように、当該セルの前記表示要素の属性を変更する、請求項1に記載のシステム。
【請求項5】
前記画面において複数の前記セルがまとまって1つのセルとして扱われる連結セルを構成する場合、前記スクロール制御部は、セルの前記表示要素の属性を変更した後、スクロール前に連結セルを構成していたセルを検出し、当該セルの表示要素の属性を、当該連結セルにおいてスクロール後に当該画面に表示されている部分を構成する内容に設定し直す、請求項1に記載のシステム。
【請求項6】
前記画面生成部は、前記画面のサイズと前記セルのサイズとに基づいて、当該画面に同時に表示されるセルの数の最大値を算出し、当該最大値に基づいて特定される数の前記表示要素を生成し、当該画面を生成する、請求項1に記載のシステム。
【請求項7】
コンピュータにより、グリッド表示を行うアプリケーションの表示制御を行う方法において、
セルの表示要素の集合で構成される格子状に区切られた画面を生成してディスプレイ装置に表示させるステップと、
前記ディスプレイ装置に表示された前記画面に対するスクロール操作を受け付けてスクロール制御を行い、前記ディスプレイ装置に表示される可視領域から外れるセルと、新たに可視領域に入るセルとが存在する場合に、前記可視領域から外れるセルの表示に用いられた表示要素における位置情報を含む属性を前記可視領域に入るセルを表す内容に変更することにより、当該可視領域に入るセルを前記ディスプレイ装置に表示させるステップと
を含む、方法。
【請求項8】
前記スクロール制御を行うステップでは、前記画面において前記セルが行列をなして整列し、スクロール操作によって、少なくとも1つの列を構成するセルが前記可視領域から外れ、かつ少なくとも1つの列を構成するセルが新たに当該可視領域に入る場合に、当該可視領域に入る列における各セルの行方向の位置が当該可視領域から外れた列における当該セルの行方向の位置に対応するように、当該セルの前記表示要素の属性を変更する、請求項7に記載の方法。
【請求項9】
前記スクロール制御を行うステップでは、前記画面において前記セルが行列をなして整列し、スクロール操作によって、少なくとも1つの行を構成するセルが前記可視領域から外れ、かつ少なくとも1つの行を構成するセルが新たに当該可視領域に入る場合に、当該可視領域に入る行における各セルの列方向の位置が当該可視領域から外れた行における当該セルの列方向の位置に対応するように、当該セルの前記表示要素の属性を変更する、請求項7に記載の方法。
【請求項10】
前記画面において複数の前記セルがまとまって1つのセルとして扱われる連結セルを構成する場合に、セルの前記表示要素の属性を変更した後、スクロール前に連結セルを構成していたセルを検出し、当該セルの表示要素の属性を、当該連結セルにおいてスクロール後に当該画面に表示されている部分を構成する内容に設定し直すステップをさらに含む、請求項7に記載の方法。
【請求項11】
前記画面を生成してディスプレイ装置に表示させるステップは、
前記画面のサイズと前記セルのサイズとに基づいて、当該画面に同時に表示されるセルの数の最大値を算出するステップと、
算出された前記最大値に基づいて特定される数の前記表示要素を生成するステップと
を含む、請求項7に記載の方法。
【請求項12】
コンピュータを、
グリッド表示を行うアプリケーションにおける、セルの表示要素の集合で構成される格子状に区切られた画面を生成する手段と、
生成された前記画面をディスプレイ装置に表示する手段と、
前記ディスプレイ装置に表示された前記画面に対するスクロール操作を受け付け、画面のスクロールを制御する手段として機能させ、
前記スクロールを制御する手段の機能として、前記スクロール操作によって、前記ディスプレイ装置に表示される可視領域から外れるセルと、新たに可視領域に入るセルとが存在する場合に、前記可視領域から外れるセルの表示に用いられた表示要素における位置情報を含む属性を前記可視領域に入るセルを表す内容に変更することにより、当該可視領域に入るセルを前記ディスプレイ装置に表示させる処理を前記コンピュータに実行させる、プログラム。
【請求項13】
前記スクロールを制御する手段の機能として、前記画面において前記セルが行列をなして整列し、スクロール操作によって、少なくとも1つの列を構成するセルが前記可視領域から外れ、かつ少なくとも1つの列を構成するセルが新たに当該可視領域に入る場合に、当該可視領域に入る列における各セルの行方向の位置が当該可視領域から外れた列における当該セルの行方向の位置に対応するように、当該セルの前記表示要素の属性を変更する処理を前記コンピュータに実行させる、請求項12に記載のプログラム。
【請求項14】
前記スクロールを制御する手段の機能として、前記画面において前記セルが行列をなして整列し、スクロール操作によって、少なくとも1つの行を構成するセルが前記可視領域から外れ、かつ少なくとも1つの行を構成するセルが新たに当該可視領域に入る場合に、当該可視領域に入る行における各セルの列方向の位置が当該可視領域から外れた行における当該セルの列方向の位置に対応するように、当該セルの前記表示要素の属性を変更する処理を前記コンピュータに実行させる、請求項12に記載のプログラム。
【請求項15】
前記スクロールを制御する手段の機能として、前記画面において複数の前記セルがまとまって1つのセルとして扱われる連結セルを構成する場合に、セルの前記表示要素の属性を変更した後、スクロール前に連結セルを構成していたセルを検出し、当該セルの表示要素の属性を、当該連結セルにおいてスクロール後に当該画面に表示されている部分を構成する内容に設定し直す処理を前記コンピュータに実行させる、請求項12に記載のプログラム。
【請求項16】
前記画面を生成する手段の機能として、前記画面のサイズと前記セルのサイズとに基づいて、当該画面に同時に表示されるセルの数の最大値を算出し、当該最大値に基づいて特定される数の前記表示要素を生成する処理を前記コンピュータに実行させる、請求項12に記載のプログラム。
【請求項1】
グリッド表示を行うアプリケーションを実行するシステムにおいて、
セルの表示要素の集合で構成される格子状に区切られた画面を生成する画面生成部と、
前記画面生成部により生成された前記画面をディスプレイ装置に表示する表示部と、
前記ディスプレイ装置に表示された前記画面に対するスクロール操作を受け付け、画面のスクロールを制御するスクロール制御部とを備え、
前記スクロール制御部は、
前記スクロール操作によって、前記ディスプレイ装置に表示される可視領域から外れるセルと、新たに可視領域に入るセルとが存在する場合に、前記可視領域から外れるセルの表示に用いられた表示要素における位置情報を含む属性を前記可視領域に入るセルを表す内容に変更することにより、当該可視領域に入るセルを前記ディスプレイ装置に表示させる、システム。
【請求項2】
前記スクロール制御部は、前記可視領域から外れるセルの数よりも前記可視領域に入るセルの数の方が多い場合に、両者の差分の数だけ前記セルの表示要素を生成し、当該表示要素により当該可視領域に入るセルを前記ディスプレイ装置に表示させる、請求項1に記載のシステム。
【請求項3】
前記画面において前記セルが行列をなして整列し、スクロール操作によって、少なくとも1つの列を構成するセルが前記可視領域から外れ、かつ少なくとも1つの列を構成するセルが新たに当該可視領域に入る場合に、前記スクロール制御部は、当該可視領域に入る列における各セルの行方向の位置が当該可視領域から外れた列における当該セルの行方向の位置に対応するように、当該セルの前記表示要素の属性を変更する、請求項1に記載のシステム。
【請求項4】
前記画面において前記セルが行列をなして整列し、スクロール操作によって、少なくとも1つの行を構成するセルが前記可視領域から外れ、かつ少なくとも1つの行を構成するセルが新たに当該可視領域に入る場合に、前記スクロール制御部は、当該可視領域に入る行における各セルの列方向の位置が当該可視領域から外れた行における当該セルの列方向の位置に対応するように、当該セルの前記表示要素の属性を変更する、請求項1に記載のシステム。
【請求項5】
前記画面において複数の前記セルがまとまって1つのセルとして扱われる連結セルを構成する場合、前記スクロール制御部は、セルの前記表示要素の属性を変更した後、スクロール前に連結セルを構成していたセルを検出し、当該セルの表示要素の属性を、当該連結セルにおいてスクロール後に当該画面に表示されている部分を構成する内容に設定し直す、請求項1に記載のシステム。
【請求項6】
前記画面生成部は、前記画面のサイズと前記セルのサイズとに基づいて、当該画面に同時に表示されるセルの数の最大値を算出し、当該最大値に基づいて特定される数の前記表示要素を生成し、当該画面を生成する、請求項1に記載のシステム。
【請求項7】
コンピュータにより、グリッド表示を行うアプリケーションの表示制御を行う方法において、
セルの表示要素の集合で構成される格子状に区切られた画面を生成してディスプレイ装置に表示させるステップと、
前記ディスプレイ装置に表示された前記画面に対するスクロール操作を受け付けてスクロール制御を行い、前記ディスプレイ装置に表示される可視領域から外れるセルと、新たに可視領域に入るセルとが存在する場合に、前記可視領域から外れるセルの表示に用いられた表示要素における位置情報を含む属性を前記可視領域に入るセルを表す内容に変更することにより、当該可視領域に入るセルを前記ディスプレイ装置に表示させるステップと
を含む、方法。
【請求項8】
前記スクロール制御を行うステップでは、前記画面において前記セルが行列をなして整列し、スクロール操作によって、少なくとも1つの列を構成するセルが前記可視領域から外れ、かつ少なくとも1つの列を構成するセルが新たに当該可視領域に入る場合に、当該可視領域に入る列における各セルの行方向の位置が当該可視領域から外れた列における当該セルの行方向の位置に対応するように、当該セルの前記表示要素の属性を変更する、請求項7に記載の方法。
【請求項9】
前記スクロール制御を行うステップでは、前記画面において前記セルが行列をなして整列し、スクロール操作によって、少なくとも1つの行を構成するセルが前記可視領域から外れ、かつ少なくとも1つの行を構成するセルが新たに当該可視領域に入る場合に、当該可視領域に入る行における各セルの列方向の位置が当該可視領域から外れた行における当該セルの列方向の位置に対応するように、当該セルの前記表示要素の属性を変更する、請求項7に記載の方法。
【請求項10】
前記画面において複数の前記セルがまとまって1つのセルとして扱われる連結セルを構成する場合に、セルの前記表示要素の属性を変更した後、スクロール前に連結セルを構成していたセルを検出し、当該セルの表示要素の属性を、当該連結セルにおいてスクロール後に当該画面に表示されている部分を構成する内容に設定し直すステップをさらに含む、請求項7に記載の方法。
【請求項11】
前記画面を生成してディスプレイ装置に表示させるステップは、
前記画面のサイズと前記セルのサイズとに基づいて、当該画面に同時に表示されるセルの数の最大値を算出するステップと、
算出された前記最大値に基づいて特定される数の前記表示要素を生成するステップと
を含む、請求項7に記載の方法。
【請求項12】
コンピュータを、
グリッド表示を行うアプリケーションにおける、セルの表示要素の集合で構成される格子状に区切られた画面を生成する手段と、
生成された前記画面をディスプレイ装置に表示する手段と、
前記ディスプレイ装置に表示された前記画面に対するスクロール操作を受け付け、画面のスクロールを制御する手段として機能させ、
前記スクロールを制御する手段の機能として、前記スクロール操作によって、前記ディスプレイ装置に表示される可視領域から外れるセルと、新たに可視領域に入るセルとが存在する場合に、前記可視領域から外れるセルの表示に用いられた表示要素における位置情報を含む属性を前記可視領域に入るセルを表す内容に変更することにより、当該可視領域に入るセルを前記ディスプレイ装置に表示させる処理を前記コンピュータに実行させる、プログラム。
【請求項13】
前記スクロールを制御する手段の機能として、前記画面において前記セルが行列をなして整列し、スクロール操作によって、少なくとも1つの列を構成するセルが前記可視領域から外れ、かつ少なくとも1つの列を構成するセルが新たに当該可視領域に入る場合に、当該可視領域に入る列における各セルの行方向の位置が当該可視領域から外れた列における当該セルの行方向の位置に対応するように、当該セルの前記表示要素の属性を変更する処理を前記コンピュータに実行させる、請求項12に記載のプログラム。
【請求項14】
前記スクロールを制御する手段の機能として、前記画面において前記セルが行列をなして整列し、スクロール操作によって、少なくとも1つの行を構成するセルが前記可視領域から外れ、かつ少なくとも1つの行を構成するセルが新たに当該可視領域に入る場合に、当該可視領域に入る行における各セルの列方向の位置が当該可視領域から外れた行における当該セルの列方向の位置に対応するように、当該セルの前記表示要素の属性を変更する処理を前記コンピュータに実行させる、請求項12に記載のプログラム。
【請求項15】
前記スクロールを制御する手段の機能として、前記画面において複数の前記セルがまとまって1つのセルとして扱われる連結セルを構成する場合に、セルの前記表示要素の属性を変更した後、スクロール前に連結セルを構成していたセルを検出し、当該セルの表示要素の属性を、当該連結セルにおいてスクロール後に当該画面に表示されている部分を構成する内容に設定し直す処理を前記コンピュータに実行させる、請求項12に記載のプログラム。
【請求項16】
前記画面を生成する手段の機能として、前記画面のサイズと前記セルのサイズとに基づいて、当該画面に同時に表示されるセルの数の最大値を算出し、当該最大値に基づいて特定される数の前記表示要素を生成する処理を前記コンピュータに実行させる、請求項12に記載のプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【公開番号】特開2009−193535(P2009−193535A)
【公開日】平成21年8月27日(2009.8.27)
【国際特許分類】
【出願番号】特願2008−36408(P2008−36408)
【出願日】平成20年2月18日(2008.2.18)
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MASCHINES CORPORATION
【復代理人】
【識別番号】100104880
【弁理士】
【氏名又は名称】古部 次郎
【復代理人】
【識別番号】100118201
【弁理士】
【氏名又は名称】千田 武
【復代理人】
【識別番号】100118108
【弁理士】
【氏名又は名称】久保 洋之
【Fターム(参考)】
【公開日】平成21年8月27日(2009.8.27)
【国際特許分類】
【出願日】平成20年2月18日(2008.2.18)
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MASCHINES CORPORATION
【復代理人】
【識別番号】100104880
【弁理士】
【氏名又は名称】古部 次郎
【復代理人】
【識別番号】100118201
【弁理士】
【氏名又は名称】千田 武
【復代理人】
【識別番号】100118108
【弁理士】
【氏名又は名称】久保 洋之
【Fターム(参考)】
[ Back to top ]