説明

テーブルの列幅自動調整方法

【課題】明示的にテーブルの列幅を指定していない状態であっても自動的に列幅をテーブルの縦幅がほぼ最小となるようにすることができるテーブル表示時における最適化された列幅自動調整方法を提供することを目的とする。
【解決手段】テーブルの各列ごとのデータのデータ長の和を求め、テーブル全体のデータのデータ長を求め、該テーブル全体のデータ長に対する各列のデータ長の割合を求めて、全体横幅に対する各列幅の割合の初期値とする。所定行内の各列のセルのうち、最大列幅のセルの改行数と改行数が最大の列の当該改行数とを比較し、最大列幅のセルの改行数より改行数が最大の列の当該改行数の方が大きい場合は、前記最大列幅の列の列幅を所定量減らし前記改行数が最大の列の列幅を前記減らした所定量増やすことにより列幅を調整する処理を、前記最大列幅のセルの改行数が前記改行数が最大の列の当該改行数以上になるまで繰り返す。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、Webブラウザでテーブル(表)を表示するときなどに、自動的にテーブルの縦幅を調整することにより、所定の横幅内にテーブルを収め、かつ、テーブルの構造自体を見やすい形に調整する列幅自動調整方法に関するものである。
【背景技術】
【0002】
インターネットの普及に伴い、Webページの閲覧はごく当たり前のものとなってきている。中でも集計データなどを見やすく表示させるためにテーブル構造がよく使用されている。
【0003】
通常、Web上においてテーブル構造を表示させるためには、例えば図4に示すようにHTML(HyperText Markup Language)言語のtableタグを用いる。図4のHTMLを基にしてブラウザ(Webページを閲覧する際に利用されるソフトウェアの総称)上に表示されるテーブル構造の具体例が図2である。図4中の41〜44に示すtdタグで囲まれた文字列が、図2中の21〜24に示す1マスにそれぞれ対応し、さらにそれらをtrタグで囲み1行の区切りとし、テーブル構造が形成される。
【0004】
このようにしてテーブル構造を表示させる際、表示領域がブラウザ等の画面幅に収まらない場合がある。この不便さを解消するため、幾つかの技術が提案されている。例えば、特許文献1には、閲覧画面からはみ出す画像や表に関して、画像の縮小や縦横方向の入れ換えなどによりファクシミリ端末の解像度内に納まるようにするファクシミリ端末出力用の画像変換技術が開示されている。特許文献2には、ホームページ上の入力フィールドが画面の幅を超えないように調整することにより、横スクロールを必要としないブラウザを提供する技術が開示されている。特許文献3には、画像の表示サイズが表示画面のサイズを超えたとき、その画像を代替の画像に置換して表示し、その画像が選択されたときサーバからダウンロードして表示する技術が開示されている。特許文献4には、ポータル画面を表示する際に、各ポートレット表示領域が画面内に入るように表示内容を調節して表示する技術が開示されている。
【特許文献1】特開平11−15749号公報
【特許文献2】特開2002−63016号公報
【特許文献3】特開2002−91849号公報
【特許文献4】特開2004−252688号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
ところで、上記の特許文献1〜4に記載の技術は、何れも、画面がスクロールしないように調整したり、決まった横幅内にテーブルが収まるように調整するというものであり、テーブルの構造自体を見やすい形に補正するという類のものではない。例えば、これらの従来技術を用いてテーブルに何も列幅を指定せずに表示させた場合、データ量に関わらず均等な幅に調整され、テーブル全体の縦幅が非常に長くなってしまい、視覚的にテーブル全体を捉えにくいという問題がある。列幅を手動で調整することによりこの問題は解決できるが、それを行うためにはどうしても手間がかかる。
【0006】
本発明の目的は、明示的にテーブルの列幅を指定していない状態であっても自動的に列幅をテーブルの縦幅がほぼ最小となるようにすることができるテーブル表示時における最適化された列幅自動調整方法を提供することにある。
【課題を解決するための手段】
【0007】
上記目的を達成するために、本発明は、コンピュータを用いてテーブルを表示または印刷する際に該テーブルの各列幅を自動調整するテーブルの列幅自動調整方法であって、コンピュータが備えるデータ長解析手段が、テーブルの各列ごとのデータのデータ長の和を求めるステップと、コンピュータが備える列幅仮定手段が、前記各列のデータ長の和をさらに合計してテーブル全体のデータのデータ長を求めるとともに、該テーブル全体のデータ長に対する各列のデータ長の割合を求め、該各列のデータ長の割合を、テーブル全体の横幅に対する各列幅の割合の初期値として設定するステップと、コンピュータが備える最終列幅確定手段が、所定行内の各列のセルのうち、最大列幅のセルの改行数と改行数が最大の列の当該改行数とを比較し、前記最大列幅のセルの改行数より前記改行数が最大の列の当該改行数の方が大きい場合は、前記最大列幅の列の列幅を所定量減らし前記改行数が最大の列の列幅を前記減らした所定量増やすことにより列幅を調整する処理を、前記最大列幅のセルの改行数が前記改行数が最大の列の当該改行数以上になるまで繰り返すステップとを備えることを特徴とする。
【発明の効果】
【0008】
本発明によれば、最大列幅のセルの改行数と改行数が最大の列の当該改行数とを比較し、最大列幅のセルの改行数より改行数が最大の列の当該改行数の方が大きい場合は、それらの列の間で列幅を調整するので、明示的にテーブルの列幅を指定していない状態であっても自動的に列幅をテーブル全体の縦幅をより小さく、ほぼ最小となるようにすることができる。
【発明を実施するための最良の形態】
【0009】
以下、本発明を適用したテーブル表示時における最適化された列幅自動調整方法の一実施の形態について説明する。
【0010】
図1は、本発明の実施の形態に係る列幅自動調整方法の適用対象であるシステムのハードウェア構成図である。11はデータを入力するキーボード及びマウス等の入力部を表す。12はデータを処理する中央処理装置及び主記憶装置等をまとめたデータ処理部を表す。13はハードディスク等の外部記憶装置を表す。14はディスプレイ等の表示部を表す。データ処理部12では、Webブラウザが動作しており、不図示のネットワーク経由でイントラネットやインターネット上のWebページを閲覧できる。このような構成は、汎用のコンピュータにWebブラウザなどのソフトウェアをインストールすることで実現できる。特に、本発明に係るテーブル表示の列幅自動調整方法を実現するためのプログラムは、例えばプラグインソフトの形でWebブラウザに組み込まれて動作するものである。
【0011】
図2は、本実施形態による列幅自動調整を施す前のテーブルの表示例を示す。データ量が最も多い列22に対して列幅が適切に割り当てられていないため、表全体の縦幅が間延びしている。このサンプルの状態では全体を一目で見渡せるためまだ見難いことはないが、これが何ページにも渡っていると非常に見難いテーブルになってしまう。
【0012】
図3は、本実施形態による列幅自動調整を施した後のテーブルの表示例である。一番データ量の多い列32に対して最大の列幅を割り当ててあり、他の列に関してもデータ量に応じて各列幅が最適化されているため、表全体の縦幅が縮小され、データ的に見やすい状態になっていることが分かる。
【0013】
図4は、図2のテーブルのHTML表現である。図2のテーブルにおけるデータ21が、図4における表現41に対応する。同様に、図2の22が図4の42、図2の23が図4の43、図2の24が図4の44に、それぞれ対応する。表現41から44までをtrタグで囲む。trタグの一まとまりが、テーブルの1行に対応する。以降の行も同様に定義される。
【0014】
図5は、図3のテーブルのHTML表現である。図3におけるデータ31が、図5における表現51に対応する。同様に、図3の32が図5の52、図3の33が図5の53、図3の34が図5の54に、それぞれ対応する。図4との違いは、表現51〜54のそれぞれのtdタグ内において列幅の指定を行っている点である。列51では20%、列52では50%、列53では15%、列54では15%と、それぞれ百分率で指定し、テーブル全体の横幅の何%を割り当てるか指定している。
【0015】
本実施形態の図1のシステムでブラウザ上に所定のWebページを表示する際、そのWebページ中にテーブル構造が含まれている場合には、データ処理部12により、以下の図6のデータ長解析ステップ、図7の列幅の仮定ステップ、及び図8の最終列幅確定ステップを順に実行し、列幅の自動調整を行う。これにより、例えば図2及び図4のようなテーブルが図3及び図5のように自動調整される。
【0016】
図6は、データ長解析ステップを示すフローチャートである。最初に、テーブルデータをn×mの配列に格納する(ステップ62)。以降では、テーブルの行数の最大値をnとし、行数に対するループのカウンタとしてiを用いる。同様に、テーブルの列数の最大値をmとし、列数に対するループのカウンタとしてjを用いる。例えば、図2及び図4のテーブルであれば、n=5,m=4である。iは0,1,…,n-1をとり、j=0,1,…,m-1をとる。
【0017】
次に、テーブルの行数分ループさせるために行数カウンタiに0をセットする(ステップ63)。iの値がnより小さい間は以降の処理を繰り返す(ステップ64)。最初はテーブルの1行目(iの値は0)に対して各列に対する処理を行う。
【0018】
次に、テーブルの列数分ループさせるために列数カウンタjに0をセットする(ステップ65)。jの値がmより小さい間は以降の処理を繰り返す(ステップ66)。配列a[j]は、列jにおけるデータ長の総和を格納するための領域である。各列に対してデータ長(行iかつ列jのセル(テーブルの1つのマス目に相当する)に表示するデータのデータ長)をバイト単位でこの配列に加えていくものとする(ステップ67)。また、配列a[j]には、図6の処理の開始時点で初期値として0が格納されているものとする。カウンタjの値を1増やし、j<mの条件を満たす限りステップ67及びステップ68の処理を繰り返す。
【0019】
j<mの条件が満たされなくなったときjのループを抜け、次の行の処理を行うためiの値を1増やし(ステップ69)、ステップ64の判定前まで戻る。
【0020】
以上の処理により、テーブル全体に対する各列のデータ長の総和を取得する。以上の処理が終了したとき、配列a[j]には各列jのデータ長の総和が設定されていることになる。図6の処理の後、図7の処理を行う。
【0021】
図7は、列幅の仮定ステップを示すフローチャートである。ここでの目的は、図6のデータ長解析ステップで作成した配列aを用いてさらに各列のデータ長を合計し、各列に対しテーブル全体の横幅の何%を割り当てればよいか仮定する最初の指標を作成することにある。
【0022】
まず、テーブルの列数分ループさせるために列数カウンタjに0を、テーブル内の全データ長を合計するための変数totalに0を、それぞれセットする(ステップ72)。jの値がmより小さい間は以降の処理を繰り返す(ステップ73)。列毎の合計値をさらに全列に対して合計することにより、テーブル全体のデータ長の合計値を求める(ステップ74)。カウンタjの値を1増やし(ステップ75)、j<mの条件を満たす限りステップ74及びステップ75の処理を繰り返す。
【0023】
j<mの条件が満たされなくなったときjのループを抜け(ステップ73)、再度テーブルの列数分ループさせるために列数カウンタjに0をセットする(ステップ76)。jの値がmより小さい間は以降の処理を繰り返す(ステップ77)。列毎にテーブル全体の幅の何%を割り当てるかを配列bに格納する(ステップ78)。計算式は、「(各列のデータ長の総和a[j]/テーブルの全データ長total)×100(小数点第一位を四捨五入)」で求める。カウンタjの値を1増やし(ステップ79)、j<mの条件を満たす限りステップ78及びステップ79の処理を繰り返す。
【0024】
以上の処理により、テーブル全体に対する列毎の最初の割り当て値を取得する。すなわち、ここまでの処理で、配列b[j]には、テーブル全体の幅を100%としたときの各列jの列幅の割合(%値)が設定されたことになる。図7の処理の後、図8の処理を行う。
【0025】
図8は、最終列幅確定ステップを示すフローチャートである。まず、システム側(具体的にはブラウザ等)からテーブル全体の横幅の値を取得しT_WIDに設定する(ステップ82)。この横幅値は、予め決められた所定の単位で表現されているものとする。例えば、ミリメートルやインチなどで表現した値、表示画面上のドット数、あるいは予め決められたフォントにより数えた文字数などである。
【0026】
次に、テーブルの行数分ループさせるために行数カウンタiに0をセットする(ステップ83)。iの値がnより小さい間は以降の処理を繰り返す(ステップ84)。ここで、現在処理中の行iにおいて最適化が完了したことを判定するためのフラグflgにtrueをセットする(ステップ85)。flgがtrueの間は、最適化処理を続行し続ける(ステップ86)。
【0027】
次に、行iの各列における列幅の具体値を特定する(ステップ87)。配列b[j]に取得した値は割合であるため、ステップ82で取得したテーブル全体の横幅(T_WID)と配列b[j]の値を用いて具体的な各列の列幅の値を特定し、配列c[j]に格納するものとする。この処理はカウンタjを用いたループ処理でテーブルの各列に対して行うものとし、その際、列幅が最大となる列を示すカウンタ値jをmax_l_jに保持しておく。
【0028】
次に、行iの各列における改行数を特定する(ステップ88)。この処理は、ステップ87で作成した各列の列幅の具体値を持つ配列c[j]と各列のデータ(行i列jのセルに表示するデータ)から、当該行i列jのセルで何行に渡って改行が起きているかを計算し、配列d[j]に格納するものである。この処理では、表示フォントの大きさや書式を考慮して実際に表示したときに何行に渡るかを求めるものとする。またこの処理はカウンタjを用いたループ処理で各列に対して行うものとし、その際、改行数が最大となる列を示すカウンタ値jをmax_c_jに保持しておく。
【0029】
次に、改行数が一番大きい列(max_c_jの列)の当該改行数が最大列幅の列(max_l_jの列)の改行数より大きいかどうかの判定を行う(ステップ89)。ここで、ステップ89の判定結果が偽になった場合は、flgにfalseをセットし(ステップ8c)、ステップ86の判定を経て、ステップ8dでiの値を1増加させ、テーブルの次の行の処理に移る。ステップ89の判定結果が真になった場合は、列幅が最適化されていない状態であると判断し、最大列幅の列の列幅b[max_l_j]の値から1マイナスし(ステップ8a)、最大改行数の列の列幅b[max_c_j]の値に1プラスする(ステップ8b)。その後、ステップ86の処理に戻り、再度列幅の最適化が行われているかどうかの判定処理を行い、flgがfalseになるまで処理を繰り返す。ステップ89,8a,8bは、要するに、改行数が一番大きいセルにおける当該改行数と最大列幅のセルの改行数とを比較し、前者の方が大きい場合に、後者の列幅を1%減らし前者の列幅を1%増やして列幅を調整する処理である。なお、ここでは1%ずつ増減させているが、増減させる量は任意である。
【0030】
以上の処理を全行に渡って施すことにより、テーブルの縦幅がほぼ最小となるように小さくでき、且つ各列幅のデータ量に応じて横幅が調整された最適化されたテーブルが完成する。最終的に、配列b[j]に各列jの百分率表現での列幅の割合が設定されているので、これを元に図5の51〜54に示すような各列の列幅指定を行えばよい。
【0031】
図9は、本発明の一実施の形態例を施す前後、すなわち図2と図3をまとめた説明図である。これは本発明の適用イメージを分かりやすく示したものである。
【0032】
なお、上記実施形態ではブラウザでテーブルを表示する場合の適用例を説明したが、これに限らず、本発明はテーブルを表示あるいは印刷する各種のケースで適用可能である。
【図面の簡単な説明】
【0033】
【図1】本発明の一実施の形態例を施すハードウェア構成図である。
【図2】本発明の一実施の形態例を施す前のテーブル表示例を示す図である。
【図3】本発明の一実施の形態例を施した後のテーブル表示例を示す図である。
【図4】図2のHTML表現である。
【図5】図3のHTML表現である。
【図6】データ長解析ステップを示すフローチャートである。
【図7】列幅の仮定ステップを示すフローチャートである。
【図8】最終列幅確定ステップを示すフローチャートである。
【図9】本発明の一実施の形態例を施す前後をまとめた説明図である。
【符号の説明】
【0034】
11…入力部、12…データ処理部、13…外部記憶装置、14…表示部。

【特許請求の範囲】
【請求項1】
コンピュータを用いてテーブルを表示または印刷する際に該テーブルの各列幅を自動調整するテーブルの列幅自動調整方法であって、
コンピュータが備えるデータ長解析手段が、テーブルの各列ごとのデータのデータ長の和を求めるステップと、
コンピュータが備える列幅仮定手段が、前記各列のデータ長の和をさらに合計してテーブル全体のデータのデータ長を求めるとともに、該テーブル全体のデータ長に対する各列のデータ長の割合を求め、該各列のデータ長の割合を、テーブル全体の横幅に対する各列幅の割合の初期値として設定するステップと、
コンピュータが備える最終列幅確定手段が、所定行内の各列のセルのうち、最大列幅のセルの改行数と改行数が最大の列の当該改行数とを比較し、前記最大列幅のセルの改行数より前記改行数が最大の列の当該改行数の方が大きい場合は、前記最大列幅の列の列幅を所定量減らし前記改行数が最大の列の列幅を前記減らした所定量増やすことにより列幅を調整する処理を、前記最大列幅のセルの改行数が前記改行数が最大の列の当該改行数以上になるまで繰り返すステップと
を備えることを特徴とするテーブルの列幅自動調整方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2007−115024(P2007−115024A)
【公開日】平成19年5月10日(2007.5.10)
【国際特許分類】
【出願番号】特願2005−305834(P2005−305834)
【出願日】平成17年10月20日(2005.10.20)
【出願人】(000233055)日立ソフトウエアエンジニアリング株式会社 (1,610)
【Fターム(参考)】