(57)【要約】      （修正有）【課題】スプレッドシートを用いた業務をウェブアプリケーションに移行する際の、ユーザ作業量を効果的に抑制する。【解決手段】スプレッドシートデータにて非空白セルたるデータ項目を検索し、データ項目の配置と各データ項目の値のデータ型を判定し、テーブル３０８に格納する第１処理と、判定に際し、判定結果の確認用画面を入出力部に出力し、判定結果に対するユーザの確認結果を入出力部で受け付けて、当該確認結果でテーブル３０８を更新する第２処理と、テーブル３０８よりデータ項目の配置およびデータ型の情報を読み出し、データ項目とそのデータ型の情報を、予め保持するプログラムに設定して、データ項目に関してデータ型での入力を受け付ける入力画面をウェブブラウザに表示させ、ウェブブラウザでの入力データをサーバへ送信させる画面コード生成プログラムを生成する第３処理と、を実行するプログラム生成システム３０３を構成する。【選択図】図３
2014074947.tif 000002
【特許請求の範囲】
【請求項１】
外部装置との間のデータ入出力を担う入出力部と、
スプレッドシートデータを格納した記憶部と、
前記スプレッドシートデータにて非空白セルたるデータ項目を検索し、データ項目の配置と各データ項目の値のデータ型を判定し、前記データ項目の配置とデータ型の情報を、記憶部のテーブルに格納する第１処理と、
前記判定に際し、判定結果の確認用画面を入出力部に出力し、前記判定結果に対するユーザの確認結果を入出力部を介して受け付けて、当該確認結果で前記テーブルを更新する第２処理と、
前記テーブルよりデータ項目の配置およびデータ型の情報を読み出し、前記データ項目とそのデータ型の情報を、記憶部に予め保持するプログラムに設定して、前記データ項目に関して前記データ型での入力を受け付ける入力画面をウェブブラウザに表示させ、ウェブブラウザでの入力データをサーバへ送信させる画面コード生成プログラムを生成する第３処理とを実行する演算部と、
を備えることを特徴とするプログラム生成システム。
【請求項２】
前記演算部は、
前記第１処理において、前記スプレッドシートデータから前記データ項目の配置を判定するデータ項目判定処理と、前記データ項目の値のデータ型を判定するデータ型判定処理とを実行するものであり、
前記データ項目判定処理は、
各データ項目の配置に基づいて、１または複数のデータ項目とこれに隣接し包含する上位のデータ項目との関係で規定されるデータ項目間の階層構造を特定する階層構造判定処理と、
前記階層構造のうち最下位に位置するデータ項目群を、該当セルの連続数の大きさと階層構造中での位置が所定条件を満たすものとして判定し、該当データ項目群を最下位ラベルとして特定する最下位ラベル判定処理とを含むものである、
ことを特徴とする請求項１に記載のプログラム生成システム。
【請求項３】
前記演算部は、
前記最下位ラベル判定処理において、
前記スプレッドシートデータの各行または各列において、連続する前記非空白セルの個数の最大値を当該行または列のカウントとして特定し、前記スプレッドシートデータに含まれるすべての行および列の中で、前記カウントが最大である行または列を特定し、当該特定した行または列において最も連続した非空白セルの記入内容を前記最下位ラベルと判定するものである、
ことを特徴とする請求項２に記載のプログラム生成システム。
【請求項４】
前記演算部は、
前記階層構造判定処理において、
前記最下位ラベルの並び方向が行方向である場合、前記最下位ラベルの各々について、前記スプレッドシートデータ上において、該当最下位ラベルのセルから上方向に隣接するセルを参照し、当該隣接セルが空白セルでない場合、当該隣接セルの記入内容を上位階層のラベルと仮判定し、前記最下位ラベルと当該仮判定した上位階層のラベルの情報を階層順に連結して生成した項目名と、前記隣接セルの行位置とを、記憶部の階層構造判定表へ記憶することを繰り返し、
前記最下位ラベルの全てについて、前記階層構造判定表への前記項目名と行位置の記憶が終了した後に、前記階層構造判定表において、全ての最下位ラベルに共通する前記行位置のうち最も上の行位置に対応する項目名を特定し、当該項目名を前記最下位ラベルごとに階層構造の情報として記憶部に格納し、
前記最下位ラベルの並び方向が列方向である場合に、前記最下位ラベルの各々について、前記スプレッドシートデータ上において、該当最下位ラベルのセルから左方向に隣接するセルを参照し、当該隣接セルが空白セルでない場合、当該隣接セルの記入内容を上位階層のラベルと仮判定し、前記最下位ラベルと当該仮判定した上位階層のラベルの情報を階層順に連結して生成した項目名と、前記隣接セルの列位置とを、記憶部の階層構造判定表へ記憶することを繰り返し、
前記最下位ラベルの全てについて、前記階層構造判定表への前記項目名と列位置の記憶が終了した後に、前記階層構造判定表において、全ての最下位ラベルに共通する前記列位置のうち最も左の列位置に対応する項目名を特定し、当該項目名を前記最下位ラベルごとに階層構造の情報として記憶部に格納するものである、
ことを特徴とする請求項２に記載のプログラム生成システム。
【請求項５】
前記記憶部は、
前記最下位ラベルの値とデータ型との対応関係を記述したラベル・型対応リストと、
前記最下位ラベルの末尾文字とデータ型との対応関係を記述した文字・型対応リストとを記憶しており、
前記演算部は、
前記データ型判定処理において、
前記データ項目の各々について、該当データ項目が属する階層構造での最下位ラベルの値を、前記ラベル・型対応リストに照合し、前記最下位ラベルの値に対応するデータ型を特定できた場合、該当データ型を前記データ項目のデータ型と判定し、前記最下位ラベルの値に対応するデータ型を特定できなかった場合、前記最下位ラベルを構成する文字列の末尾の一つまたは複数の文字を、前記文字・型対応リストに照合し、前記最下位ラベルの末尾文字に対応するデータ型を特定できた場合、該当データ型を前記データ項目のデータ型と判定し、前記最下位ラベルの末尾文字に対応するデータ型を特定できなかった場合、デフォルトのデータ型を前記データ項目のデータ型と判定するものである、
ことを特徴とする請求項２に記載のプログラム生成システム。
【請求項６】
前記演算部は、
前記最下位ラベル判定処理において、
前記スプレッドシートデータの各行または各列において、連続する前記非空白セルの個数の最大値を当該行または列のカウントとして特定し、前記スプレッドシートデータに含まれるすべての行の中でカウントが最大の行のカウントと、前記スプレッドシートデータに含まれるすべての列の中でカウントが最大の列のカウントとを比較し、両者のうち小さくないカウントが、他方のカウントに１より大きい値を持つ第１の実定数を乗じた値よりも小さい場合、前記入出力部に、最下位ラベルの並び方向に関する確認要求を出力し、この確認要求に応じたユーザ入力を前記入出力部で受け付け、当該ユーザ入力に応じて最下位ラベルの並び方向を特定し、前記小さくないカウントが、他方のカウントに１より大きい値を持つ第１の実定数を乗じた値よりも小さくない場合、前記スプレッドシートデータに含まれるすべての行の中でカウントが最大の行のカウントと、前記スプレッドシートデータに含まれるすべての列の中でカウントが最大の列のカウントのうち、小さくないほうの方向を最下位ラベルの並び方向と判定する、最下位ラベル並び方向判定処理を実行するものである、
ことを特徴とする請求項２に記載のプログラム生成システム。
【請求項７】
前記演算部は、
前記最下位ラベル判定処理において、最下位ラベル並び方向判定処理と、特定方向最下位ラベル判定処理とを実行するものであり、
前記特定方向最下位ラベル判定処理は、
前記最下位ラベル並び方向判定処理で判定した最下位ラベル並び方向に関して、
当該方向が行方向である場合、前記スプレッドシートデータに含まれるすべての行をカウントの大きい順、または、カウントが同じ行については下の行が先になるようにソートし、当該方向が列方向である場合、前記スプレッドシートデータに含まれるすべての列をカウントの大きい順、または、カウントが同じ列については右の列が先になるようにソートし、
前記ソート結果の１番目の要素のカウントが、前記ソート結果の２番目の要素のカウントに１より大きい値を持つ第２の実定数を乗じた値よりも小さい場合、前記スプレッドシートデータに含まれる全ての非空白セルの記入内容を、最下位ラベルおよび上位階層のラベルの候補として前記入出力部に出力し、前記候補中よりユーザが指定した最下位ラベルおよび上位階層のラベルの情報を前記入出力部にて受け付け、当該受け付けた情報により最下位ラベルおよび上位階層のラベルを特定し、
前記ソート結果の１番目の要素のカウントが、前記ソート結果の２番目の要素のカウントに１より大きい値を持つ第２の実定数を乗じた値よりも小さくない場合、前記ソート結果の１番目の要素に含まれる最も連続した非空白セルの記入内容を前記最下位ラベルと判定するものである、
ことを特徴とする請求項６に記載のプログラム生成システム。
【請求項８】
前記記憶部は、
前記最下位ラベルの値とデータ型との対応関係を記述したラベル・型対応リストと、
前記最下位ラベルの末尾文字とデータ型との対応関係を記述した文字・型対応リストとを記憶しており、
前記演算部は、
前記データ型判定処理において、
前記データ項目の各々について、該当データ項目が属する階層構造での最下位ラベルの値を、前記ラベル・型対応リストに照合し、前記最下位ラベルの値に対応するデータ型を特定できた場合、該当データ型を前記データ項目のデータ型と判定し、前記最下位ラベルの値に対応するデータ型を特定できなかった場合、前記最下位ラベルを構成する文字列の末尾の一つまたは複数の文字を、前記文字・型対応リストに照合し、前記最下位ラベルの末尾文字に対応するデータ型を特定できた場合、該当データ型を前記データ項目のデータ型と判定し、前記最下位ラベルの末尾文字に対応するデータ型を特定できなかった場合、前記データ項目と前記データ項目のデータ型の候補に関する情報を前記入出力部に出力し、前記候補中よりユーザが指定したデータ型の情報を前記入出力部にて受け付け、当該受け付けた情報により、該当データ型を前記データ項目のデータ型と判定するものである、
ことを特徴とする請求項２に記載のプログラム生成システム。
【請求項９】
前記演算部は、
前記特定方向最下位ラベル判定処理において、
前記ソート結果の１番目の要素のカウントが、前記ソート結果の２番目の要素のカウントに１より大きい値を持つ第２の実定数を乗じた値よりも小さい時、
前記最下位ラベルの並び方向が行方向の場合で、前記ソート結果の２番目の行が前記ソート結果の１番目の行に上から隣接する場合か、前記最下位ラベルの並び方向が列方向の場合で、前記ソート結果の２番目の列が前記ソート結果の１番目の列に左から隣接する場合は、前記ソート結果の１番目の要素に含まれる最も連続した非空白セルの記入内容を前記最下位ラベルと判定するものである、
ことを特徴とする請求項７に記載のプログラム生成システム。
【請求項１０】
外部装置との間のデータ入出力を担う入出力部と、スプレッドシートデータを格納した記憶部とを備えたコンピュータが、
前記スプレッドシートデータにて非空白セルたるデータ項目を検索し、データ項目の配置と各データ項目の値のデータ型を判定し、前記データ項目の配置とデータ型の情報を、記憶部のテーブルに格納する第１処理と、
前記判定に際し、判定結果の確認用画面を入出力部に出力し、前記判定結果に対するユーザの確認結果を入出力部で受け付けて、当該確認結果で前記テーブルを更新する第２処理と、
前記テーブルよりデータ項目の配置およびデータ型の情報を読み出し、前記データ項目とそのデータ型の情報を、記憶部に予め保持するプログラムに設定して、前記データ項目に関して前記データ型での入力を受け付ける入力画面をウェブブラウザに表示させ、ウェブブラウザでの入力データをサーバへ送信させる画面コード生成プログラムを生成する第３処理と、
を実行することを特徴とするプログラム生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム生成システムおよびプログラム生成方法に関するものであり、具体的には、スプレッドシートを用いた業務をウェブアプリケーションに移行する際の、ユーザ作業量を効果的に抑制し、ウェブアプリケーションプログラムのコードを効率的に生成する技術に関する。
【背景技術】
【０００２】
従来、業務処理を実施するためのウェブアプリケーションの構成に際しては、クライアントのブラウザからの要求を処理する要求処理プログラム、業務データを記憶するデータベースとのアクセス処理をするデータベースアクセスプログラム、クライアントのブラウザ画面を生成する画面コード生成プログラム、業務ロジックに応じた情報処理プログラム等、複数のプログラムを準備する必要がある。従って、こうしたウェブアプリケーションを適用するシステム規模が大きくなると、その開発や保守作業のユーザ負担が増大していた。
【０００３】
こうした問題に関し、例えば、ウェブアプリケーションの開発を容易に行うことができ、設計開発者の負担を軽減させ、かつ設計開発のスピードアップを図ることができるプログラム生成装置およびプログラム生成方法（特許文献１参照）などが提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４３８６２４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記のようなプログラム生成方法では、ウェブアプリケーションが処理対象とする業務に関する、業務仕様情報、物理仕様情報、業務パターン情報という基本設計情報を入力として与える必要がある。従来のプログラム生成方法を採用する場合、単純でごく小規模な業務に利用するウェブアプリケーションであっても、上述の基本設計情報の準備作業は当然必要であり、対象ウェブアプリケーションの単純さや小規模さに比して、開発作業の煩雑度が相対的に大きくなりがちである。よって、プログラム生成作業が手間やコストに見合わない非効率的なものとなってしまう問題があった。
【０００６】
上述した単純で小規模な業務としては、例えば、スプレッドシートを用いた情報集約業務があげられる。この情報集約業務とは、集約主体が、データ項目を記したスプレッドシートを複数ユーザに提示し、各データ項目に関してユーザが回答を行ったスプレッドシートを回収して、データベース等に集計し集約管理する業務である。このような業務は、ウェブアプリケーションに移行できれば処理効率が改善するが、上述したように、複数のウェブアプリケーションの一つ一つに対して、基本設計情報を準備する必要があり、全体として非効率的な開発作業が必要となってしまう。
【０００７】
そこで本発明の目的は、スプレッドシートを用いた業務をウェブアプリケーションに移行する際の、ユーザ作業量を効果的に抑制し、ウェブアプリケーションプログラムのコードを効率的に生成する技術を提供することにある。
【課題を解決するための手段】
【０００８】
上記課題を解決する本発明のプログラム生成システムは、外部装置との間のデータ入出力を担う入出力部と、スプレッドシートデータを格納した記憶部と、前記スプレッドシートデータにて非空白セルたるデータ項目を検索し、データ項目の配置と各データ項目の値のデータ型を判定し、前記データ項目の配置とデータ型の情報を、記憶部のテーブルに格納する第１処理と、前記判定に際し、判定結果の確認用画面を入出力部に出力し、前記判定結果に対するユーザの確認結果を入出力部を介して受け付けて、当該確認結果で前記テーブルを更新する第２処理と、前記テーブルよりデータ項目の配置およびデータ型の情報を読み出し、前記データ項目とそのデータ型の情報を、記憶部に予め保持するプログラムに設定して、前記データ項目に関して前記データ型での入力を受け付ける入力画面をウェブブラウザに表示させ、ウェブブラウザでの入力データをサーバへ送信させる画面コード生成プログラムを生成する第３処理とを実行する演算部と、を備えることを特徴とする。
【０００９】
また、本発明のプログラム生成方法は、外部装置との間のデータ入出力を担う入出力部と、スプレッドシートデータを格納した記憶部とを備えたコンピュータが、前記スプレッドシートデータにて非空白セルたるデータ項目を検索し、データ項目の配置と各データ項目の値のデータ型を判定し、前記データ項目の配置とデータ型の情報を、記憶部のテーブルに格納する第１処理と、前記判定に際し、判定結果の確認用画面を入出力部に出力し、前記判定結果に対するユーザの確認結果を入出力部で受け付けて、当該確認結果で前記テーブルを更新する第２処理と、前記テーブルよりデータ項目の配置およびデータ型の情報を読み出し、前記データ項目とそのデータ型の情報を、記憶部に予め保持するプログラムに設定して、前記データ項目に関して前記データ型での入力を受け付ける入力画面をウェブブラウザに表示させ、ウェブブラウザでの入力データをサーバへ送信させる画面コード生成プログラムを生成する第３処理と、を実行することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、スプレッドシートを用いた業務をウェブアプリケーションに移行する際の、ユーザ作業量を効果的に抑制し、ウェブアプリケーションプログラムのコードを効率的に生成できる。
【図面の簡単な説明】
【００１１】
【図１】スプレッドシートを用いた情報集約業務を説明する概念図である。
【図２】ウェブアプリケーションを用いた情報集約業務を説明する概念図である。
【図３】第１の実施形態におけるプログラム生成システムの構成を表すブロック図である。
【図４】要求処理プログラム、データベースアクセスプログラム、画面コード生成プログラムからなるウェブアプリケーションシステムの構成例を示す図である。
【図５】プログラム生成システムの機能を実現するコンピュータのハードウェア構成の一例を示す図である。
【図６】第１の実施形態におけるプログラム生成方法の処理手順例１を示すフロー図である。
【図７】第１の実施形態におけるプログラム生成方法の処理手順例２を示すフロー図である。
【図８Ａ】非空白セル連なりの個数カウント方法例１を説明する概念図である。
【図８Ｂ】非空白セル連なりの個数カウント方法例２を説明する概念図である。
【図９】第１の実施形態におけるプログラム生成方法の処理手順例３を示すフロー図である。
【図１０Ａ】データ項目判定処理の概念例を示す図である。
【図１０Ｂ】階層構造判定表の例を示す図である。
【図１１】第１の実施形態におけるプログラム生成方法の処理手順例４を示すフロー図である。
【図１２Ａ】ラベル・型対応リストの構成例を示す図である。
【図１２Ｂ】文字・型対応リストの構成例を示す図である。
【図１３】第１の実施形態におけるプログラム生成方法の処理手順例５を示すフロー図である。
【図１４】第１の実施形態における画面表示例１を示す図である。
【図１５】第１の実施形態における画面表示例２を示す図である。
【図１６Ａ】第１の実施形態における画面表示例３を示す図である。
【図１６Ｂ】第１の実施形態における画面表示例４を示す図である。
【図１７Ａ】第１の実施形態における画面表示例５を示す図である。
【図１７Ｂ】第１の実施形態における画面表示例６を示す図である。
【図１８】第１の実施形態におけるプログラム生成方法の処理手順例６を示すフロー図である。
【図１９】第１の実施形態におけるプログラム生成方法の処理手順例７を示すフロー図である。
【図２０】第２の実施形態におけるプログラム生成方法の処理手順例１を示すフロー図である。
【図２１Ａ】最下位ラベル並び方向判定処理の概念例を示す図である。
【図２１Ｂ】第２の実施形態における画面表示例１を示す図である。
【図２２Ａ】特定方向最下位ラベル判定処理の概念例を示す図である。
【図２２Ｂ】第２の実施形態における画面表示例２を示す図である。
【図２２Ｃ】第２の実施形態における画面表示例３を示す図である。
【図２２Ｄ】第２の実施形態における画面表示例４を示す図である。
【図２３Ａ】第３の実施形態における特定方向最下位ラベル判定の概念例１を示す図である。
【図２３Ｂ】第３の実施形態における特定方向最下位ラベル判定の概念例２を示す図である。
【図２４】第４の実施形態におけるプログラム生成方法の処理手順例１を示すフロー図である。
【図２５】第４の実施形態における画面表示例１を示す図である。
【発明を実施するための形態】
【００１２】
以下に本発明の実施形態について図面を用いて詳細に説明する。まずは、本実施形態のプログラム生成システムが生成するウェブアプリケーションの適用対象である、スプレッドシートを用いた情報集約業務の具体的な概念について例示する。ここでの情報集約業務は、データ収集やその集計を主導する集約主体が、複数のユーザに対して、収集したいデータに対応したデータ項目を提示し、その複数のユーザらから回答を得る業務となる。この場合、複数のユーザの各々は、集約主体が提示したデータ項目に関するデータをスプレッドシートにて入力し、これを集約主体に提示することになる。一方、集約主体は、ユーザらから提示された各データをデータベースに登録する。
【００１３】
図１に、上述したようなスプレッドシートを用いた情報集約業務の概念例を示す。スプレッドシートを用いて情報集約業務を実施する場合、図１に例示するような、データ項目を記したスプレッドシート１０３を表現するデータファイル１０４を用いる。はじめに、集約主体１０１が複数のユーザ１０２に対し、上述のデータファイル１０４を電子メール等で配送する。データファイル１０４を受け取ったユーザ１０２は、それを編集して各データ項目に関してデータ入力をし、編集済みのデータファイル１０４を集約主体へ返送する。集約主体は、ユーザらから返送されたデータファイル１０４より、ユーザによって入力されたデータを抽出し、データベース１０５へ登録する。データファイル１０４の配送、返送においては、電子メールやファイルサーバ等が用いられる。
【００１４】
図１に示すスプレッドシート１０３を利用した情報集約業務では、ユーザ１０２が入力するのは、「申請者、姓」、「申請者、名」、「商品、商品ＩＤ」、「商品、個数」、「補助、負担元」、「補助、額」の合計６つのデータ項目である。
【００１５】
データ項目「申請者、姓」を構成する「申請者」と「姓」の関係のように、値が設定されたセルすなわち非空白セル同士が、あるデータ項目に関して階層をなして結びついた構造がスプレッドシート１０３には存在する。「申請者、姓」というデータ項目は、「申請者」という値が設定された非空白セルを上位階層にし、「姓」という値が設定された非空白セルを下位階層にした階層構造を含んでいる。なお、「申請者」や「姓」といった値が設定された単独の非空白セルのみでデータ項目と認識することもできる。従って広義では、上述した、データ項目「申請者、姓」は、「申請者」というデータ項目と「姓」というデータ項目の階層構造とみることも出来る。
【００１６】
以下の実施形態においては、こうしてデータ項目を階層構造で区切り、階層構造をなす各要素（例：「申請者」、「姓」）をラベルと呼ぶ。すなわち、１つのデータ項目は１つ以上のラベルにより表現される。また、データ項目の階層構造の最下位に相当するラベルを最下位ラベルと呼び、階層を上がるごとに第１上位ラベル、第２上位ラベル、等と呼ぶ。データ項目「申請者、姓」においては、最下位ラベルは「姓」、第１上位ラベルは「申請者」である。
【００１７】
また、スプレッドシートにおいて、上述したラベルはセルに記入されている。データ項目内の階層構造は、ラベルの記入されたセルの大きさと配置で表現される。図１に示すスプレッドシートでは、ラベルである「申請者」、「商品」、「補助」の値が記入されたセルは、それぞれ「姓」と「名」、および「商品ＩＤ」と「個数」、および「負担元」と「額」の各セルの上側に２セル分の幅をもって配置されている。この配置により、「申請者」は「姓」と「名」の、「商品」は「商品ＩＤ」と「個数」の、「補助」は「負担元」と「額」の第１上位ラベルであることが示されている。
【００１８】
また上述した情報集約業務に利用されるスプレッドシートには、データ項目の最下位ラベルを含むセルが、行または列方向に並ぶという特徴がある。図１のスプレッドシート１０３でも、「姓」、「名」、「商品ＩＤ」、「個数」、「負担元」、「額」は最下位ラベルであり、これらは行方向に並んでいる。そして、最下位ラベルの並ぶ方向と階層構造の方向は直交するという特徴もある。図１のスプレッドシート１０３では、最下位ラベルは行方向に並んでいるのに対し、階層構造の方向は列方向であり、上に隣接するセルに記述されたラベルが、下方のセルに記述されたラベルの上位ラベルになっている。
【００１９】
また、情報集約業務に利用されるスプレッドシートでは、１つの上位ラベルはその配下のラベルの集合全体と同等の幅（最下位ラベルが行方向に並ぶ場合）または高さ（最下位ラベルが列方向に並ぶ場合）を持つ。したがって、１つの上位ラベルの幅または高さは、その配下の１つの下位ラベルの幅または高さと等しいか大きい。さらに、１つの階層内のラベルの幅または高さの総和は、同じデータ項目内の階層間で等しいため、上位ラベルでは下位ラベルよりも１つの階層内のラベル個数が少なくなることがほとんどである（上位ラベルと下位ラベルとでセル数が同じ場合のぞく）。図１のスプレッドシート１０３でも、上位ラベルは３つであるのに対し、最下位ラベルは６つである。
【００２０】
なお、情報集約業務に利用されるスプレッドシートでは、図１のスプレッドシ−ト１０３の「ＸＸ集計」や「円」、「個」のように、ラベル以外の要素が記入されるという特徴もある。
【００２１】
図２は、ウェブアプリケーションを用いた情報集約業務の実施を説明する概念図である。この場合、集約主体は、図１に示すスプレッドシート１０３のデータファイル１０４をユーザに配送する代わりに、図２に示すような画面２０３を表示するウェブアプリケーションを作成し、サーバ２０１に配置する。ユーザ２０２はクライアント端末におけるウェブブラウザを用いてサーバ２０１にアクセスし、このウェブアプリケーションを通じて図１に例示したものと同じ６項目のデータを入力することになる。ウェブアプリケーションはユーザ２０２からの入力データを、サーバ２０１ないしサーバ２０１に接続された他装置のデータベースに記憶するように構成されている。
【００２２】
同じ情報集約業務を実施するのであっても、スプレッドシート１０３を利用するよりもウェブアプリケーションを利用するほうが、データベースへの登録が自動化されており、効率が良い。それにもかかわらず、図１のようなスプレッドシート１０３を利用して情報集約業務を実施する理由としては、図２のようなウェブアプリケーションを簡単に作成する方法がないことが挙げられる。したがって、従来スプレッドシート１０３を利用して実施していた情報集約業務を、簡単な手順でウェブアプリケーションに移行することができれば、利便性が高い。そこで、本実施形態のプログラム生成システムにおいては、情報集約業務で利用しているスプレッドシート１０３を入力とし、同様の情報集約業務を実施するためのウェブアプリケーションを生成する。
【００２３】
−−−第１の実施形態−−−
続いて第１の実施形態における、プログラム生成システム３０３の構成について説明する。図３は第１の実施形態におけるプログラム生成システム３０３の構成例を表すブロック図である。プログラム生成システム３０３は、スプレッドシート１０３を用いた業務をウェブアプリケーションに移行する際の、ユーザ作業量を効果的に抑制し、ウェブアプリケーションプログラムのコードを効率的に生成するためのコンピュータシステムである。
【００２４】
このプログラム生成システム３０３には、上述した集約主体等からの指示を受け付けるキーボードやマウス等の入力装置３０１と、処理結果を担当者等に提示するディスプレイ等の表示装置３０２が接続されている。これらの接続は直接接続であっても良いし、または通信回線や他の情報端末を介した接続であっても良い。
【００２５】
プログラム生成システム３０３は、データ項目・型判定部３０４、コード生成部３０５、および画面制御部３０６の各機能部と、記憶部３０７とを備えている。各機能部は、例えばプログラム生成システム３０３が備えるプログラムを実行することで実装されるものと言える。
【００２６】
そのうち、データ項目・型判定部３０４は、上述したスプレッドシート１０３のデータファイル１０４からスプレッドシートデータを読み込み、情報集約業務の対象となるデータ項目の配置とその型を判定し、データ項目・型テーブル３０８として記憶部３０７に格納する機能を備える。
【００２７】
また、コード生成部３０５は、記憶部３０７に格納されたデータ項目・型テーブル３０８から、データ項目とその型に関する情報を読み出し、要求処理プログラムコード３０９、データベースアクセスプログラムコード３１０、画面コード生成プログラムコード３１１を生成して記憶部３０７に格納し、さらにデータベース３１２を構築する機能を備える。
【００２８】
また、画面制御部３０６は、データ項目・型判定部３０４の処理過程において、表示装置３０２へ情報を提示する画面を表示し、さらには入力装置３０１より入力操作を受け付け、入力により生成された情報をデータ項目・型判定部３０４へ渡す機能を備える。
【００２９】
なお、記憶部３０７は、図３のようにプログラム生成システム３０３に含まれる構成としても良いし、プログラム生成システム３０３に外部接続される構成でも良い。
【００３０】
図４はプログラム生成システム３０３が生成する要求処理プログラム４０５、データベースアクセスプログラム４０６、画面コード生成プログラム４０７からなるウェブアプリケーションシステムの構成例を示す図である。
【００３１】
上述したコード生成部３０５によって生成された要求処理プログラムコード３０９、データベースアクセスプログラムコード３１０、画面コード生成プログラムコード３１１は、それぞれ実行可能な状態でサーバ４０２に配置され、それぞれ、要求処理プログラム４０５、データベースアクセスプログラム４０６、画面コード生成プログラム４０７を構成する。また、データベース４０８は情報集約業務の対象となるデータ項目に対応する入力データを格納できるように構成されている。
【００３２】
ウェブアプリケーションシステムは、クライアント４０１のウェブブラウザ４０３から利用される。ウェブブラウザ４０３がサーバ４０２のウェブアプリケーション（情報集約のためのアプリケーション）にアクセスすると、サーバ４０２の画面コード生成プログラム４０７は、上述してきた各データ項目（スプレッドシート１０３由来のもの）の情報を所定の画面データのひな型にはめ込んで画面コード４０４を生成し、ウェブブラウザ４０３に送信する。ウェブブラウザ４０３は、受信した画面コード４０４を画面に表示する。
【００３３】
一方、クライアント４０１のウェブブラウザ４０３から、上述の画面コード４０４に対応した表示画面での入力データを含むリクエストがサーバ４０２へ送信されると、要求処理プログラム４０５が起動される。要求処理プログラム４０５は、ウェブブラウザ４０３のリクエストから入力データを受け取る。さらに要求処理プログラム４０５は、データベースアクセスプログラム４０６を起動し、これに入力データを受け渡して処理の実行を要求する。
【００３４】
データベースアクセスプログラム４０６は、入力データを要求処理プログラム４０５より受け取って、これをデータベース４０８に登録し、その実行結果を要求処理プログラム４０５へ返す。要求処理プログラム４０５は、データベースアクセスプログラム４０６の実行結果を、ウェブブラウザ４０３に対してレスポンスとして返信する。
【００３５】
なお、プログラム生成システム３０３は、一般的なコンピュータ上に実現することが可能である。図５はプログラム生成システム３０３の機能を実現するコンピュータのハードウェア構成例を示す図である。
【００３６】
プログラム生成システム３０３たるコンピュータは、ＣＰＵ（Central Processing Unit）５０２、ＲＡＭ（Random Access Memory）５０３、ＲＯＭ（Read Only Memory）５０４、ＨＤＤ（Hard Disk Drive）５０５、通信インターフェイス（Ｉ／Ｆ）５０６、入出力インターフェイス（Ｉ／Ｆ）５０７、およびメディアインターフェイス（Ｉ／Ｆ）５０８を備える。
【００３７】
ＣＰＵ５０２は、ＲＯＭ５０４またはＨＤＤ５０５に格納されたプログラムに基づいて動作し、各部の制御を行う。ＲＯＭ５０４は、コンピュータの起動時にＣＰＵが実行するブートプログラムや、ハードウェアに依存するプログラム等を格納する。
【００３８】
ＨＤＤ５０５は、ＣＰＵ５０２によって実行されるプログラムおよび当該プログラムに使用されるデータを格納する。通信インターフェイス５０６は、通信媒体５２０を介して他の機器からデータを受信してＣＰＵ５０２へ送るとともに、ＣＰＵ５０２が生成したデータを、通信媒体５２０を介して他の機器へ送信する。
【００３９】
ＣＰＵ５０２は入出力インターフェイス５０７を介して、ディスプレイ等の表示装置３０２およびキーボードやマウス等の入力装置３０１を制御する。すなわちＣＰＵ５０２は、生成したデータを、入出力インターフェイス５０７を介して表示装置３０２へ出力し、また、入出力インターフェイス５０７を介して入力装置３０１からデータを取得する。
【００４０】
メディアインターフェイス５０８は、記録媒体５３０に格納されたプログラムまたはデータを読み取り、ＲＡＭ５０３を介してＣＰＵ５０２に提供する。ＣＰＵ５０２は、当該プログラムを、メディアインターフェイス５０８を介して記録媒体５３０からＲＡＭ５０３上にロードし、ロードしたプログラムを実行する。記録媒体５３０は、例えばＤＶＤ（Digital Versatile Disk）、ＰＤ（Phase change rewritable Disk）等の光学記録媒体、ＭＯ（Magneto-Optical disk）等の光磁気記録媒体、テープ媒体、磁気記録媒体、または半導体メモリ等である。
【００４１】
こうしたコンピュータがプログラム生成システム３０３として機能する場合、ＣＰＵ５０２は、ＲＡＭ５０３上にロードされたプログラムを実行することにより、データ項目・型判定部３０４、コード生成部３０５、画面制御部３０６の各機能を実現する。また、ＲＯＭ５０４またはＨＤＤ５０５には、記憶部３０７内のデータが格納される。コンピュータは、これらのプログラムを、記録媒体５３０から読み取って実行するが、他の例として、他の装置から、通信媒体５２０を介してこれらのプログラムを取得してもよい。通信媒体５２０とは、通信回線、または、当該通信回線を伝搬する搬送波やデジタル信号を指す。
【００４２】
図６は第１の実施形態におけるプログラム生成方法の処理手順例１を示すフロー図であり、具体的には、プログラム生成システム３０３によるウェブアプリケーションの生成の一例を示すフローチャートである。
【００４３】
この場合、プログラム生成システム３０３のデータ項目・型判定部３０４が、スプレッドシート１０３のデータファイル１０４を、記憶部３０７ないし入力装置３０１から読み込むことで、ウェブアプリケーションの生成処理を開始する（Ｓ１０１）。こうした処理の契機は、例えば、プログラム生成システム３０３が、入力装置３０１でユーザ指示を受けた時、或いは、予め決められた所定時刻の到来をクロック機能（コンピュータが一般に備えるもの）で検知した時、または、入力装置３０１からスプレッドシート１０３のデータファイル１０４が入力された時、などが想定できる。
【００４４】
続いてデータ項目・型判定部３０４は、データ項目判定処理を実施する（Ｓ１０２）。データ項目・型判定部３０４は、データ項目判定処理Ｓ１０２において、上述したステップＳ１０１で読み込んだスプレッドシート１０３のデータファイル１０４からスプレッドシートデータを取得し、このスプレッドシートデータを解析し、その階層構造を含めたデータ項目の判定を行う。この処理の詳細については後述する。
【００４５】
また、データ項目・型判定部３０４は、データ型判定処理を実施する（Ｓ１０３）。データ項目・型判定部３０４は、データ型判定処理Ｓ１０３において、上述したデータ項目判定処理Ｓ１０２で判定したデータ項目の最下位ラベルと、後述するラベル・型対応リスト３１３、文字・型対応リスト３１４とを比較することで、該当データ項目のデータ型を判定する。
【００４６】
さらに、データ項目・型判定部３０４は、データ項目・型確認処理を実施する（Ｓ１０４）。データ項目・型判定部３０４は、データ項目・型確認処理Ｓ１０４において、上述したデータ項目判定処理Ｓ１０２およびデータ型判定処理Ｓ１０３で判定したデータ項目とその型を、画面制御部３０６を介して表示装置３０２に表示し、集約主体等のユーザが確認できるようにする。さらにデータ項目・型判定部３０４は、入力装置３０１に対する集約主体等のユーザの操作を、画面制御部３０６を介して受け取り、ユーザの操作内容が示す、データ項目とその型に関する削除、修正、追加等の各種処理を実施する。本処理によりデータ項目・型テーブル３０８に、判定結果であるデータ項目とその型が記憶される。
【００４７】
次に、コード生成部３０５は、コード生成処理を実施する（Ｓ１０５）。コード生成部３０５は、コード生成処理Ｓ１０５において、データ項目・型テーブル３０８よりデータ項目とその型の情報を読み取り、これらの情報を用いて、データベース３１２を構築し、さらに、要求処理プログラムコード３０９、データベースアクセスプログラムコード３１０、画面コード生成プログラムコード３１１を生成する。生成した各プログラムコードは記憶部３０７に格納される。
【００４８】
図７は、第１の実施形態におけるプログラム生成方法の処理手順例２を示すフロー図であり、具体的には、データ項目・型判定部３０４の実施するデータ項目判定処理Ｓ１０２の一例を示すフローチャートである。
【００４９】
この場合、データ項目・型判定部３０４は、スプレッドシート１０３からスプレッドシートデータを読み取り、図８Ａに基づき後述する方法により、行や列ごとの非空白セルの連なりの個数をカウントする（Ｓ２０１）。
【００５０】
次にデータ項目・型判定部３０４は、すべての行、列の中で、カウントが最大のものに含まれる、最も連続した非空白セルすなわち最大連続非空白セルを特定し、その記入内容を最下位ラベルとする（Ｓ２０２）。
【００５１】
最後に、データ項目・型判定部３０４は、階層構造判定処理を実施する（Ｓ２０３）。階層構造判定処理Ｓ２０３は、最下位ラベルの各々について、その上位ラベルをスプレッドシートから判定する処理である。
【００５２】
図８Ａは、非空白セル連なりの個数カウント方法例１を説明する概念図であり、図８Ｂは非空白セル連なりの個数カウント方法例２を説明する概念図である。
【００５３】
スプレッドシート１０３において、罫線に囲まれた矩形領域をセルと呼ぶ。本実施形態では、値が何も記入されていないセルを「空白セル」、空白セルでないセルを「非空白セル」と呼ぶ。すべてのセルは、空白セルか非空白セルのいずれかである。複数のセルを連結して形成された大きいセルも、空白セル、非空白セルのいずれかである。
【００５４】
非空白セル連なりの個数のカウントには、行単位のカウントと列単位のカウントがある。いずれのカウントにおいても、スプレッドシート１０３を構成するセルを、スプレッドシート１０３の端から順に参照し、連続する非空白セルの個数の最大値をカウントとする。カウントする行または列にかかる連結されたセル（複数セルが連結され大型の単体セルとなったもの）は、当該行単位または列単位のカウントの対象とする。そのため、連結されたセルが非空白セルであった場合は、当該連結セルは複数の行単位のカウントの対象、または複数の列単位のカウントの対象となる。
【００５５】
図８Ａのスプレッドシート１０３の行および列の端の矢印の先に、カウントを表す数値を示した。本実施形態では、番号ｎを用いて、第ｎ行を「Ｒｎ」、第ｎ列を「Ｃｎ」と表す。また、行および列のカウントを求める関数を表す記号を「Ｎ」とする。
【００５６】
例えば図８Ａにおいて、行方向のカウントが最大であるのは行「Ｒ４」であり、そのカウントは、Ｎ（Ｒ４）＝６である。また列方向のカウントが最大であるのは列「Ｃ１」と「Ｃ２」であり、そのカウントは、Ｎ（Ｃ１）＝Ｎ（Ｃ２）＝３である。
【００５７】
列「Ｃ５」の列単位のカウントでは、連続する非空白セルが２箇所に分かれていることに注意する。この列「Ｃ５」で連続する非空白セルは「購入品」、「金額」の部分（非空白セルの連続個数は“２”）で、あとは、セル数が１で非連続の「提出ＹＹ」の部分である。これらのうち個数が大きい前者の個数が列「Ｃ５」のカウントとされ、Ｎ（Ｃ５）＝２となる。列「Ｃ６」についても同様にＮ（Ｃ６）＝２である。
【００５８】
図８Ｂにおいても同様にカウントが求められる。図８Ｂは図８Ａに比べ、列方向のカウントが大きい傾向にある例である。図８Ｂにおいて、行方向のカウントが最大であるのは行「Ｒ２」、「Ｒ３」、「Ｒ４」、「Ｒ５」であり、そのカウントは、いずれも「２」である。また列方向のカウントが最大であるのは列「Ｃ３」であり、そのカウントは、Ｎ（Ｃ３）＝５である。
【００５９】
図９は第１の実施形態におけるプログラム生成方法の処理手順例３を示すフロー図であり、具体的には、データ項目・型判定部３０４が実施する階層構造判定処理Ｓ２０３の一例を示すフローチャートである。階層構造判定処理Ｓ２０３の実施時点では、前に実施される処理Ｓ２０２によってスプレッドシートデータに含まれる最下位ラベルの並び方向、および最下位ラベルが特定された状態にある。
【００６０】
データ項目・型判定部３０４が実行する階層構造判定処理Ｓ２０３は、図１０Ｂに示すような階層構造判定表３１５を作成し、最下位ラベルのそれぞれについて、スプレッドシートデータからその上位ラベルを判定する処理である。上位ラベルは、最下位ラベルの位置より上方向かあるいは左方向に探索される。ここに探索の方向を「Ｄ」とし、最下位ラベルの並び方向が行の場合「上」方向、最下位ラベルの並び方向が列の場合「左」方向、と定める。
【００６１】
データ項目・型判定部３０４は、最初の最下位ラベルを仮採用し、最初の最下位ラベルの位置へ探索位置を移動する（Ｓ３０１）。次に、データ項目・型判定部３０４は、最下位ラベル、項目名、Ｄ端位置を、階層構造判定表３１５へ記憶する（Ｓ３０２）。
【００６２】
ここで項目名とは、仮採用したラベルを連結した文字列を表す。ラベルの連結は、仮採用しているうちで最上位のラベルから始まり、階層順に最下位ラベルまでを、例えば、カンマ（「，」）を区切りとして連結する。ただし、Ｓ３０２時点では上位ラベルは仮採用されておらず、項目名は最下位ラベルに一致する。また、Ｄ端位置とは探索位置の行位置（Ｄが「上」の場合）または列位置（Ｄが「左」の場合）を表す。
【００６３】
次にデータ項目・型判定部３０４は、探索位置のＤ方向に非空白セルが隣接するか否かを判定する（Ｓ３０３）。探索位置のＤ方向に非空白セルが隣接する場合（Ｓ３０３：ＹＥＳ）、データ項目・型判定部３０４は、探索位置をＤ方向へ移動し、さらに当該非空白セルに記入されている内容を上位ラベルとして仮採用し、最下位ラベル、項目名、Ｄ端位置を階層構造判定表３１５へ記憶する（Ｓ３０４）。
【００６４】
一方、探索位置のＤ方向に非空白セルが隣接しない場合（Ｓ３０３：ＮＯ）、データ項目・型判定部３０４は、階層構造の判定を実施していない最下位ラベルが残っているか否かを判定する（Ｓ３０５）。階層構造の判定を実施していない最下位ラベルが残っている場合（Ｓ３０５：ＹＥＳ）、データ項目・型判定部３０４は、すべての仮採用を削除し、次の最下位ラベルを仮採用し、さらに探索位置を当該最下位ラベルの位置へ移動する（Ｓ３０６）。そして処理をＳ３０２へ戻す。
【００６５】
他方、階層構造の判定を実施していない最下位ラベルが残っていない場合（Ｓ３０５：ＮＯ）、データ項目・型判定部３０４は、階層構造判定表３１５を探索し、全ての最下位ラベルに共通するＤ端位置のうち、最もＤ位置にある記憶を、最下位ラベルごとに採用し（Ｓ３０７）、階層構造判定処理Ｓ２０３を終了する。
【００６６】
図１０Ａは、データ項目判定処理の概念例を示す図であり、図１０Ｂは階層構造判定表３１５の例を示す図である。ここで、図１０Ａは、プログラム生成システム３０３に読み込まれたスプレッドシート１０３であり、スプレッドシート１０３の行および列の端の矢印の先に非空白セル連なりのカウント結果を表す数値を示している。また、図１０Ｂは、当該スプレッドシート１０３に対するデータ項目判定処理で生成される階層構造判定表３１５である。
【００６７】
データ項目・型判定部３０４は、図１０Ａに示すとおり、スプレッドシート１０３における、行、列ごとの非空白セルの連なりの個数をカウントする。本例では、第４行「Ｒ４」がカウント最大の行／列であるため、第４行「Ｒ４」に含まれる「Ａ」、「Ｂ」、「Ｃ」、「Ｄ」が最下位ラベルであると判定する。
【００６８】
また、データ項目・型判定部３０４は、階層構造判定処理Ｓ２０３を実施する。まず、最下位ラベルの一つ、「Ａ」を仮採用し、探索位置を「Ａ」の位置に設定する。そして、「Ａ」の行位置は「Ｒ４」であるため、最下位ラベル、項目名、上端位置として、「Ａ」、「Ａ」、「Ｒ４」を階層構造判定表３１５へ記憶する。
【００６９】
次にデータ項目・型判定部３０４は、探索位置「Ａ」の上方向の隣接を確認し、非空白セル「Ｅ」を参照する。そして、探索位置を「Ｅ」セルの位置へ移動し、「Ｅ」を上位ラベルに仮採用する。また、データ項目・型判定部３０４は、この「Ｅ」の行位置は「Ｒ３」であるため、最下位ラベル、項目名、上端位置として、「Ａ」、「Ｅ，Ａ」、「Ｒ３」を階層構造判定表３１５へ記憶する。
【００７０】
同様に、データ項目・型判定部３０４は、探索位置「Ｅ」の上方向の隣接を確認し、非空白セル「Ｈ」を参照する。そしてデータ項目・型判定部３０４は、最下位ラベル、項目名、上端位置として、「Ａ」、「Ｈ，Ｅ，Ａ」、「Ｒ２」を階層構造判定表３１５へ記憶する。
【００７１】
図の例では、非空白セル「Ｈ」の上方向には非空白セルは隣接していない。そのため、データ項目・型判定部３０４は、最下位ラベル「Ａ」に対する階層構造判定表３１５への最下位ラベル、項目名、上端位置の各情報の書込みを終了し、すべての仮採用を削除、次の最下位ラベル、例えば「Ｂ」を仮採用、探索位置を「Ｂ」の位置へ設定し、以降、「Ｂ」に対する階層構造判定表３１５の記憶を実施する。
【００７２】
このように、「Ｂ」、「Ｃ」、「Ｄ」に対しても、「Ａ」と同様の手順で階層構造判定表３１５への情報の書込を実施し、データ項目・型判定部３０４は、図１０Ｂに示す階層構造判定表３１５を得る。
【００７３】
そしてデータ項目・型判定部３０４は、完成した階層構造判定表３１５を探索し、全ての最下位ラベルに共通する上端位置を求める。本例では上端位置は、最下位ラベル「Ａ」と「Ｂ」に対しては「Ｒ２」、「Ｒ３」、「Ｒ４」が記憶されており、最下位ラベル「Ｃ」と「Ｄ」に対しては「Ｒ３」と「Ｒ４」が記憶されている。すなわち全ての最下位ラベルに共通する上端位置は「Ｒ３」と「Ｒ４」であり、このうちでもっとも上に位置するのは「Ｒ３」である。したがって、階層構造判定表３１５にある上端位置が「Ｒ３」の記憶を最下位ラベルごとに採用する。よって本例におけるデータ項目判定処理Ｓ１０２の結果は、階層構造を含めたデータ項目として、「Ｅ，Ａ」、「Ｆ，Ｂ」、「Ｇ，Ｃ」、「Ｇ，Ｄ」となる。
【００７４】
図１１は第１の実施形態におけるプログラム生成方法の処理手順例４を示すフロー図であり、具体的には、データ項目・型判定部３０４の実施するデータ型判定処理Ｓ１０３の一例を示すフローチャートである。データ型判定処理Ｓ１０３の実施時点では、前に実施されるデータ項目判定処理Ｓ１０２によって、スプレッドシートデータに含まれるデータ項目が、階層構造まで含めて特定された状態にある。この場合、データ型判定処理Ｓ１０３は、図１２Ａに示すラベル・型対応リスト３１３や、図１２Ｂに示す文字・型対応リスト３１４を利用して、データ項目の値の型を判定する処理となる。２つのリスト３１３、３１４を利用してデータ項目の型を判定できない場合は、あらかじめ定めた型（デフォルトの型、例えばテキスト型）が設定される。
【００７５】
この場合、データ項目・型判定部３０４は、例えば階層構造判定表３１５における、例えば最上段のレコードを最初のデータ項目とし、これに対して型判定処理を開始する（Ｓ４０１）。データ項目・型判定部３０４は、処理対象のデータ項目の最下位ラベルを、ラベル・型対応リスト３１３に照合し、最下位ラベルの値がラベル・型対応リスト３１３に存在するか否かを判定する（Ｓ４０２）。
【００７６】
対象のデータ項目の最下位ラベルがラベル・型対応リスト３１３に存在している場合（Ｓ４０２：ＹＥＳ）、データ項目・型判定部３０４は、対象のデータ項目の型を、ラベル・型対応リスト３１３において最下位ラベルの値と対応付けて記述されている型に決定し（Ｓ４０３）、処理をＳ４０６へ進める。なお、データ項目・型判定部３０４は、決定した型の情報を、階層構造判定表３１５における該当データ項目と対応付けて記憶するものとする（以下同様）。
【００７７】
一方、対象のデータ項目の最下位ラベルがラベル・型対応リスト３１３に存在していない場合（Ｓ４０２：ＮＯ）、データ項目・型判定部３０４は、対象のデータ項目の最下位ラベルを文字・型対応リスト３１４に照合し、型を決定できるか否か判定する（Ｓ４０４）。具体的には、文字・型対応リスト３１４に記述された「文字」の中に、最下位ラベルの末尾文字と一致するものがあるか否かデータ項目・型判定部３０４が判定する。
【００７８】
文字・型対応リスト３１４に掲載された「文字」の中に、最下位ラベルの末尾文字と一致するものがあった場合（Ｓ４０４：ＹＥＳ）、データ項目・型判定部３０４は、対象データ項目の型を、文字・型対応リスト３１４で一致した「文字」に対応する「型」に決定し（Ｓ４０３）、処理をＳ４０６へ進める。他方、一致するものがない場合（Ｓ４０４：ＮＯ）、データ項目・型判定部３０４は、対象データ項目の型をデフォルトの型に決定し（Ｓ４０５）、処理をＳ４０６へ進める。
【００７９】
処理Ｓ４０６において、データ項目・型判定部３０４は、型判定をまだ実施していないデータ項目が階層構造判定表３１５に残っているか否かを判定する。型判定をまだ実施していないデータ項目が残っている場合（Ｓ４０６：ＹＥＳ）、データ項目・型判定部３０４は、次のデータ項目の型判定処理に移り（Ｓ４０７）、処理をＳ４０１へ戻す。階層構造判定表３１５におけるすべてのデータ項目に対して型判定を実施した場合（Ｓ４０６：ＮＯ）、データ項目・型判定部３０４は、型判定処理Ｓ１０３を終了する。
【００８０】
図１３は、第１の実施形態におけるプログラム生成方法の処理手順例５を示すフロー図であり、具体的には、データ項目・型判定部３０４の実施するデータ項目・型確認処理Ｓ１０４の一例を示すフローチャートである。
【００８１】
この場合、データ項目・型判定部３０４は、上述のデータ項目判定処理Ｓ１０２およびデータ型判定処理Ｓ１０３によって決定した、データ項目・型のリストを含んだ確認画面を、画面制御部３０６を介して表示装置３０２に表示する（Ｓ５０１）。この確認画面は、データ項目・型判定部３０４が、例えば図１４のような確認画面１４００の画面フォーマットに対し、上述の処理Ｓ１０２および処理Ｓ１０３で決定した、例えば階層構造判定表３１５に含まれるデータ項目やその型の情報を、予め定めた配置で設定して、画面データを生成したものとなる（他の画面データ生成も同様）。この画面データは、表示装置３０２（或いはクライアント４０１の表示装置。以下同様）に出力され、確認画面１４００となる。これによって、集約主体等のユーザが、現時点で決定しているデータ項目・型が確認できる。
【００８２】
続いてデータ項目・型判定部３０４は、上述の確認画面１４００における、入力装置３０１での集約主体等のユーザ操作を、画面制御部３０６を介して受け取り、データ項目削除（Ｓ５０２）、データ項目修正（Ｓ５０４）、データ項目追加（Ｓ５０７）を指定する操作内容に応じて、各ステップを実施する。
【００８３】
この場合、データ項目・型判定部３０４は、データ項目削除ステップを、図１４の確認画面１４００における削除ボタン１４０１が押下された操作（Ｓ５０２：ＹＥＳ）に従って実行し、確認画面１４００にて選択されたデータ項目、すなわち削除ボタン１４０１が押下されたデータ項目を、階層構造判定表３１５より削除する（Ｓ５０３）。そしてデータ項目・型判定部３０４は、この階層構造判定表３１５に基づいて、図１５のように該当データ項目が減少した確認画面１４１０を表示装置３０２に表示する（Ｓ５０１）。
【００８４】
また、データ項目・型判定部３０４は、データ項目修正ステップを、図１４の確認画面１４００における修正ボタン１４０２が押下されたる操作（Ｓ５０４：ＹＥＳ）に従って実行し、確認画面１４００にて選択されたデータ項目、すなわち修正ボタン１４０２が押下されたデータ項目を修正する処理を開始する。この場合、データ項目・型判定部３０４は、図１６Ａに示すような、最下位ラベル、型の修正画面１６００を表示装置３０２に表示する（Ｓ５０５）。
【００８５】
この修正画面１６００では、初期状態において、確認画面１４００で修正対象としてユーザ選択されたデータ項目の最下位ラベルと型が表示されており、それらは入力装置３０１の操作によって修正ができる状態になっている。この修正画面１６００において、最下位ラベルと型の修正操作と、決定ボタン１６０１の押下操作を受け付けることによって、データ項目・型判定部３０４はさらに、図１６Ｂに示すような上位ラベルの修正画面１６１０を表示装置３０２に表示する（Ｓ５０６）。
【００８６】
上位ラベル修正画面１６１０では初期状態において、上述の修正画面１６００で修正対象として選択されたデータ項目の上位ラベルが表示されており、入力装置３０１の操作によって、修正ができる状態になっている。この上位ラベル修正画面１６１０において、上位ラベルの修正操作と決定ボタン１６０２の押下操作を受け付けることによって、データ項目・型判定部３０４は、階層構造判定表３１５での該当データ項目の修正を実行し、修正されたデータ項目を反映したデータ項目・型のリストを、画面制御部３０６を介して表示装置３０２に表示する（Ｓ５０１）。
【００８７】
また、データ項目・型判定部３０４は、データ項目追加ステップを、図１４の確認画面１４００における追加ボタン１４０３が押下された操作（Ｓ５０７：ＹＥＳ）に従って実行し、図１７Ａに示すような、最下位ラベル、型の追加画面１７００を表示装置３０２に表示する（Ｓ５０８）。この最下位ラベル、型追加画面１７００では、新たな最下位ラベルと型を入力装置３０１の操作によって入力ができる状態になっている。この最下位ラベル、型追加画面１７００において、最下位ラベルと型の入力操作と決定ボタン１７０１の押下操作を受け付けることによって、データ項目・型判定部３０４はさらに、図１７Ｂに示すような上位ラベルの追加画面１７１０を表示装置３０２に表示する（Ｓ５０９）。上位ラベル追加画面１７００では、該当データ項目の新たな上位ラベルが、入力装置３０１の操作によって、入力ができる状態になっている。この上位ラベル追加画面１７１０において、上位ラベルの入力操作し決定ボタン１７０２の押下操作を受け付けることによって、データ項目・型判定部３０４は、階層構造判定表３１５におけるデータ項目の追加を実行し、追加されたデータ項目を反映したデータ項目・型のリストを、画面制御部３０６を介して表示装置３０２に表示する（Ｓ５０１）。
【００８８】
さらにデータ項目・型判定部３０４は、図１４の決定ボタン１４０４を押下する操作に従って、階層構造判定表３１５に対応付けておいたデータ項目とそのデータ型の情報を、データ項目・型テーブル３０８に記憶し（Ｓ５１０）、データ項目・型確認処理Ｓ１０４を終了する。
【００８９】
図１８は、第１の実施形態におけるプログラム生成方法の処理手順例６を示すフロー図であり、具体的には、コード生成部３０５の実施するコード生成処理Ｓ１０５の一例を示すフローチャートである。
【００９０】
この場合、まずコード生成部３０５は、上述したデータ項目・型テーブル３０８に記憶された各データ項目およびその型の情報を読み出し、該当データ項目に対するユーザ入力データを記憶するためのデータベースを記憶部３０７に構築する（Ｓ６０１）。例えば、コード生成部３０５は、データ項目を表す列と該当データ項目に関するユーザ入力データを格納する列（この列に入る値は、該当データ項目の型となる）とを対応付けたテーブルをデータベースに作成するための命令文（ＳＱＬ文など）を生成し、データベースに実行させる。コード生成部３０５は、こうした命令文を生成するため、所定の構造を備える関係データベースの作成命令に対応したコードのひな形を保持しており、このひな形における所定箇所に上述のデータ項目と型の情報を設定し、命令文を生成する。
【００９１】
次に、コード生成部３０５は、上述のように構築したデータベースに対するアクセスを行うデータベースアクセスプログラムを、データ項目・型テーブル３０８より読み出したデータ項目およびその型をもとに生成する（Ｓ６０２）。この場合、コード生成部３０５は、例えば、データ項目に対応する入力データを要求処理プログラム（後述）より受け取るコード、入力データをデータベースに登録するための命令文を生成するコード、命令文をデータベースに実行させ、その実行結果を要求処理プログラムへ返すコードを、データベースアクセスプログラムとして生成する。いずれにしても、コード生成部３０５は、こうしたプログラムを生成するため、所定の構造を備えるプログラムのひな形を保持しており、このひな形における所定箇所に上述のデータ項目と型の情報を設定し、プログラムを生成する。
【００９２】
次に、コード生成部３０５は、ウェブブラウザからの入力データの受信とウェブブラウザへの応答の返信を行う要求処理プログラムを、データ項目・型テーブル３０８より読み出したデータ項目およびその型をもとに生成する（Ｓ６０３）。例えば、コード生成部３０５は、ウェブブラウザからの入力データを受け取るコード、データベースアクセスプログラムを起動し入力データを受け渡して処理を実行させるコード、データベースアクセスプログラムの実行結果を受け取り、それをウェブブラウザに返信するコードを、要求処理プログラムとして生成する。この場合もコード生成部３０５は、こうしたコードを生成するため、所定の構造を備えるコードのひな形を保持しており、このひな形における所定箇所に上述のデータ項目と型の情報を設定し、上述のコードを生成する。
【００９３】
そしてコード生成部３０５は、画面コード生成プログラム生成処理を実行する（Ｓ６０４）。画面コード生成プログラム生成処理Ｓ６０４では、ウェブブラウザの画面の表示や動作を制御する画面コード生成プログラムを、データ項目・型テーブル３０８より読み出したデータ項目およびその型をもとに生成する。例えば、コード生成部３０５は、図１９に示すフローチャートにしたがって画面コード生成プログラムを生成する。この処理の詳細については後述する。
【００９４】
最後に、コード生成部３０５は上述までのステップで生成したコードを記憶部３０７に格納し（Ｓ６０５）、コード生成処理Ｓ１０５を終了する。
【００９５】
図１９は、第１の実施形態におけるプログラム生成方法の処理手順例７を示すフロー図であり、具体的には、コード生成部３０５の実施する画面コード生成プログラム生成処理Ｓ６０４の一例を示すフローチャートである。本処理は、例えば、図２のウェブブラウザ画面２０３を生成するコードを生成する処理である。
【００９６】
まず、コード生成部３０５は、画面コード生成プログラムとなるファイルを生成する（Ｓ７０１）。この状態では、画面コード生成プログラムは、白紙の画面を表現する画面コードを生成する機能しか持っていない。
【００９７】
次に、コード生成部３０５は、上述のステップＳ６０３までで処理対象としていたデータ項目のデータ項目名と、当該データ項目に対応するデータ入力エリアとを画面に表示するコードを生成し、上述のファイルに追加する（Ｓ７０２）。また、コード生成部３０５は、さらに「登録」、「中止」ボタンを画面に表示するコードを生成し、ファイルに追加する（Ｓ７０３）。いずれの画面表示用のコードも、コード生成部３０５が予め保持するコードのひな形に、上述のデータ項目に関する各種情報を設定して生成できる。こうした処理により、図２のウェブブラウザ画面２０３のような外観の画面データが生成される。
【００９８】
そして、コード生成部３０５は、画面において「登録」ボタン押下操作時にデータ入力エリアに入力された情報を、要求処理プログラムへ送信するコードを生成し、上述のファイルに追加する（Ｓ７０４）。コード生成部３０５は、さらに「中止」ボタン押下操作時に画面を閉じるコードを生成し、上述のファイルに追加する（Ｓ７０５）。これにより、図２のウェブブラウザ画面２０３における各ボタン（「登録」、「中止」の各ボタン）に対応する機能が追加される。こうして上述のファイルすなわち画面コード生成プログラムが生成される。
【００９９】
−−−第２の実施形態−−−
続いて第２の実施形態について説明する。この実施形態では、上述したデータ項目判定処理Ｓ１０２において、最下位ラベルの並び方向を判定する最下位ラベル並び方向判定、および最下位ラベルを判定する特定方向最下位ラベル判定を実施する場合の例について述べる。これらの判定では、スプレッドシート１０３の行、列ごとの非空白セルの連なりの個数カウントに対して所定の条件を評価し、この評価結果に応じて、判定対象をデータ項目・型判定部３０４がそのまま判定するか、あるいは、画面制御部３０６を介して表示装置３０２に判定の候補を表示し、入力装置３０１に対する集約主体等のユーザの操作内容を受け付け、その操作に応じて判定するか、を決定する。
【０１００】
ここで、画面制御部３０６を介して、表示装置３０２に、ある判定に関する情報を表示し、入力装置３０１に対する集約主体等のユーザの操作内容を受け付け、その操作に応じて判定を実施する一連の処理のことを、「対話」と呼ぶ。
【０１０１】
図２０は、第２の実施形態におけるプログラム生成方法の処理手順例１を示すフロー図であり、具体的には、データ項目・型判定部３０４の実施するデータ項目判定処理Ｓ１０２の一例を示すフローチャートである。
【０１０２】
この場合、データ項目・型判定部３０４は、スプレッドシート１０３を読み取り、第１の実施形態と同様に、行や列ごとの非空白セルの連なりの個数をカウントする（Ｓ８０１）。
【０１０３】
次にデータ項目・型判定部３０４は、最下位ラベル並び方向判定を実施する（Ｓ８０２）。最下位ラベル並び方向判定Ｓ８０２において、データ項目・型判定部３０４は、カウント最大の行、カウント最大の列の２つのうち、カウントが小さくないほうをＭ、他方をｍとし（カウント最大の行および列が複数存在する場合はカウント最大の行および列のいずれをＭまたはｍとしてもよい）、パラメータＫを用い、以下の数式で表される条件（以下、条件Ｋ）を評価する。  
Ｎ（Ｍ）＜Ｎ（ｍ）×Ｋ−−−（式１）
【０１０４】
ここで、パラメータＫはあらかじめ定められた、１より大きい実数とする。式１が示す条件Ｋが成立する場合、データ項目・型判定部３０４は、並び方向に関するユーザとの「対話」を「要」と判定する（Ｓ８０３：ＹＥＳ）。一方、上述の条件Ｋが成立しない場合、データ項目・型判定部３０４は並び方向対話を「不要」とする（Ｓ８０３：ＮＯ）。
【０１０５】
データ項目・型判定部３０４は、並び方向対話が「要」である場合（Ｓ８０３：ＹＥＳ）、画面制御部３０６を介し、表示装置３０２、入力装置３０１と情報を受け渡し、図２１Ｂのような画面２１００によって並び方向に対するユーザとの対話を実施する（Ｓ８０４）。
【０１０６】
データ項目・型判定部３０４は、この画面２１００における並び方向対話では、入力装置３０１に対する集約主体等のユーザの操作内容に応じ、最下位ラベルの並び方向（行または列）の選択、あるいは、データ項目手動選択の実行の選択、を受け付ける。
【０１０７】
ここでデータ項目・型判定部３０４は、画面２１００を介した並び方向対話で、データ項目手動選択がユーザにより選択されたか否かを判定する（Ｓ８０５）。
【０１０８】
他方、並び方向対話が「不要」である場合（Ｓ８０３：ＮＯ）、データ項目・型判定部３０４は、最下位のラベル並び方向を、上述した「Ｍ」の方向に決定する（Ｓ８０６）。すなわち、「Ｍ」がいずれかの行の場合、最下位ラベルの並び方向を行方向とし、「Ｍ」がいずれかの列の場合、最下位ラベルの並び方向を列方向とする。そして、Ｓ８０７に処理を進める。
【０１０９】
最下位ラベルの並び方向がＳ８０６によって決定、あるいは、並び方向対話による選択によって決定される（Ｓ８０５：ＮＯ）と、次にデータ項目・型判定部３０４は、特定方向最下位ラベル判定を実施する（Ｓ８０７）。この特定方向最下位ラベル判定Ｓ８０７において、データ項目・型判定部３０４は、カウントに基づいた行または列のソートを行う。決定された最下位ラベル並び方向が行方向の場合、データ項目・型判定部３０４は、行をカウントの大きい順，カウントが同じ行については下の行が先になるようにソートする。決定された最下位ラベル並び方向が列方向の場合、データ項目・型判定部３０４は、列をカウントの大きい順，カウントが同じ列については右の列が先になるようにソートする。そしてデータ項目・型判定部３０４は、上述したソート順で１番および２番の要素（行または列）をそれぞれ「Ｓ１」、「Ｓ２」とし、パラメータ「Ｌ」を用い、以下の数式で表される条件（以下、条件Ｌ）を評価する。  
Ｎ（Ｓ１）＜Ｎ（Ｓ２）×Ｌ−−−−（式２）
【０１１０】
ここで、パラメータＬはあらかじめ定められた、１より大きい実数とする。式２が示す条件Ｌが成立する場合、データ項目・型判定部３０４は、データ項目対話を「要」とする（Ｓ８０８：ＹＥＳ）。一方、式２が示す条件Ｌが成立しない場合、データ項目・型判定部３０４はデータ項目対話を「不要」とする（Ｓ８０８：ＮＯ）。
【０１１１】
次にデータ項目・型判定部３０４は、データ項目対話が「要」である場合（Ｓ８０８：ＹＥＳ）、あるいは並び方向対話でデータ項目手動選択が選択された場合（Ｓ８０５：ＹＥＳ）、画面制御部３０６を介し表示装置３０２、入力装置３０１と情報を受け渡し、図２２Ｂ、図２２Ｃ、図２２Ｄのような画面によってデータ項目に対する対話を実施する（Ｓ８０９）。
【０１１２】
このデータ項目対話では、データ項目・型判定部３０４は、スプレッドシート１０３に含まれるすべての非空白セルの内容を取得し、それらを図２２Ｂのような画面２２００で表示装置３０２に表示する。データ項目・型判定部３０４は、この画面２２００において、ユーザによる、最下位ラベルの選択操作と決定ボタン２２０１の押下操作を受け付けることによって、選択された最下位ラベルの各々に対する第１上位ラベルの選択画面２３００（図２２Ｃ）を表示装置３０２に表示する。
【０１１３】
そして、データ項目・型判定部３０４は、上述した画面２３００において、各々の最下位ラベルに対する第１上位ラベルの選択操作と決定ボタン２２０２の押下操作を受け付けることによって、第１上位ラベルが選択されたデータ項目の各々に対する第２上位ラベルの選択画面２４００（図２２Ｄ）を表示装置３０２に表示する。
【０１１４】
以下、データ項目・型判定部３０４は、すべてのデータ項目に対して上位ラベルの選択が「なし」になるまで同様に、画面表示と入力操作の受け付けを実施する。すべてのデータ項目に対して上位ラベルの選択が終わったところで、データ項目・型判定部３０４は、階層構造まで含めたデータ項目を決定し、データ項目判定処理Ｓ１０２を終了する。
【０１１５】
一方、データ項目対話が「不要」である場合（Ｓ８０８：ＮＯ）、データ項目・型判定部３０４は、前述の「Ｓ１」に含まれる最大連続非空白セルを参照し、その記入内容を最下位ラベルとし（Ｓ８１０）、階層構造判定処理を実施する（Ｓ８１１）。本実施形態における階層構造判定処理Ｓ８１１は、第１の実施形態の階層構造判定処理Ｓ２０３と同様の処理である。階層構造判定処理Ｓ８１１の終了により、データ項目・型判定部３０４は階層構造まで含めたデータ項目を決定し、データ項目判定処理Ｓ１０２を終了する。
【０１１６】
図２１Ａは、最下位ラベル並び方向判定処理の概念例を示す図であり、具体的には、データ項目・型判定部３０４が読み込んだスプレッドシート１０３のデータを示す概念図であって、最下位ラベル並び方向判定Ｓ８０２および並び方向対話Ｓ８０４の一例を説明する概念図である。本例では、最下位ラベル並び方向判定Ｓ８０２に関するパラメータＫを「２」として説明する。また、スプレッドシート１０３の行および列の端の矢印の先に、カウントを表す数値を示している。
【０１１７】
この場合、最下位ラベル並び方向判定Ｓ８０２では、カウント最大の行、カウント最大の列の２つのうち、カウントが小さくないほうをＭ、他方をｍとするので、本例では、Ｍは「Ｒ４」、ｍは「Ｃ１」となる（ｍはＣ２としても同じ）。
【０１１８】
また、パラメータＫを「２」とすると、条件Ｋの左辺はＮ（Ｍ）＝Ｎ（Ｒ４）＝６であり、右辺はＮ（ｍ）×Ｋ＝Ｎ（Ｃ１）×Ｋ＝４×２＝８となる。従って、条件Ｋの（左辺）＜（右辺）を満たすから、並び方向対話が「要」となる。データ項目・型判定部３０４は、上述したように、図２１Ｂのような画面２１００によって並び方向対話Ｓ８０４を実施する。
【０１１９】
図２２Ａは、本発明の第２実施形態の、特定方向最下位ラベル判定Ｓ８０７およびデータ項目対話Ｓ８０９の一例を説明する概念図である。本例では、特定方向最下位ラベル判定Ｓ８０７に関するパラメータＬを「２」として説明する。
【０１２０】
図２２Ａは、データ項目・型判定部３０４が読み込んだスプレッドシートデータを示す概念図である。スプレッドシート１０３の行および列の端の矢印の先に、カウントを表す数値を示す。本例のスプレッドシート１０３では最下位ラベル並び方向判定Ｓ８０２で、Ｋ≦４／３の場合、条件Ｌの判定において並び方向対話「不要」となり、最下位ラベルの並び方向を行方向と判定する。Ｋ＞４／３の場合も、並び方向対話Ｓ８０４の結果、最下位ラベルの並び方向が行方向とされたものとする。
【０１２１】
特定方向最下位ラベル判定Ｓ８０７では、行をカウントの大きい順，カウントが同じ行については下の行が先になるようにソートするので、本例では、ソート結果は｛Ｒ３，Ｒ５，Ｒ２，…｝となる。ソート順で１番、２番の行をそれぞれ「Ｓ１」、「Ｓ２」とするので、本例では、「Ｓ１」は「Ｒ３」、「Ｓ２」は「Ｒ５」となる。
【０１２２】
パラメータＬを「２」とすると、条件Ｌの左辺はＮ（Ｓ１）＝Ｎ（Ｒ３）＝４であり、右辺はＮ（Ｓ２）×Ｌ＝Ｎ（Ｒ５）×Ｌ＝３×２＝６となる。従って、条件Ｌの（左辺）＜（右辺）を満たすため、データ項目対話が「要」となる。データ項目・型判定部３０４は、上述したように、図２２Ｂ、図２２Ｃ、図２２Ｄのような画面によってデータ項目対話Ｓ８０９を実施する。
【０１２３】
−−−第３の実施形態−−−
次に第３の実施形態について説明する。本実施形態では、第２の実施形態と同様に、データ項目判定処理Ｓ１０２において、２つの判定（最下位ラベル並び方向判定Ｓ８０２、特定方向最下位ラベル判定Ｓ８０７）と、判定結果に応じて２つの対話（並び方向対話Ｓ８０４、データ項目対話Ｓ８０９）を実施する。第２の実施形態との違いは、特定方向最下位ラベル判定Ｓ８０７において評価する条件Ｌの内容である。
【０１２４】
図２３Ａは、本発明の第３実施形態の、特定方向最下位ラベル判定Ｓ８０７の一例を説明する概念図である。本実施形態における特定方向最下位ラベル判定Ｓ８０７で、データ項目・型判定部３０４は、カウントに基づいて行または列のソートを行い、ソート順で１番、２番の要素（最下位ラベル並び方向が行方向の場合は行、最下位ラベル並び方向が列方向の場合は列）をそれぞれＳ１、Ｓ２とする点は第２の実施形態と同様である。
【０１２５】
一方、本実施形態では、まずパラメータＬ１を用い、以下の数式で表される条件Ｌ１を評価する。  
Ｎ（Ｓ１）＜Ｎ（Ｓ２）×Ｌ１−−−（式３）
【０１２６】
ここで、パラメータＬ１はあらかじめ定められた、１より大きい実数とする。さらに本実施例において、データ項目・型判定部３０４は、条件Ｌ２として、最下位ラベル並び方向が行方向の場合「Ｓ２がＳ１に上から隣接しない」、最下位ラベル並び方向が列方向の場合「Ｓ２がＳ１に左から隣接しない」を評価する。
【０１２７】
また、上述した条件Ｌを「条件Ｌ１かつ条件Ｌ２」とおき、データ項目・型判定部３０４はデータ項目対話の要、不要を判定する。すなわち、条件Ｌ１および条件Ｌ２の成立、不成立に応じて、データ項目・型判定部３０４は、図２３Ａの表に示すようにデータ項目対話の要、不要を判定する。
【０１２８】
図２３Ｂは、本発明の第３実施形態の、データ項目・型判定部３０４が読み込んだスプレッドシート１０３のデータを示す概念図である。スプレッドシート１０３の行および列の端の矢印の先に、カウントを表す数値を示す。本例では、特定方向最下位ラベル判定Ｓ８０７に関するパラメータＬ１を「２」として説明する。
【０１２９】
本例のスプレッドシート１０３では最下位ラベル並び方向判定Ｓ８０２で、Ｋ≦５／２の場合、条件Ｋの判定において並び方向対話「不要」となり、最下位ラベルの並び方向を行方向と判定する。Ｋ＞５／２の場合も、並び方向対話Ｓ８０４の結果、最下位ラベルの並び方向が行方向とされたものとする。
【０１３０】
特定方向最下位ラベル判定Ｓ８０７では、行をカウントの大きい順，カウントが同じ行については下の行が先になるようにソートするので、本例では、ソート結果は｛Ｒ３，Ｒ２，Ｒ５，…｝となる。ソート順で１番、２番の行をそれぞれＳ１、Ｓ２とするので、本例では、Ｓ１はＲ３、Ｓ２はＲ２となる。
【０１３１】
パラメータＬ１を２とすると、条件Ｌ１の左辺はＮ（Ｓ１）＝Ｎ（Ｒ３）＝５であり、右辺はＮ（Ｓ２）×Ｌ１＝Ｎ（Ｒ２）×Ｌ１＝３×２＝６となる。従って、条件Ｌ１の（左辺）＜（右辺）は成立する。
【０１３２】
ところが、条件Ｌ２「Ｓ２がＳ１に上から隣接しない」は、Ｓ２であるＲ２がＳ１であるＲ３の上から隣接しているため、不成立である。従って、図２３Ａの表より、データ項目対話「不要」となり、Ｓ８１０により、Ｒ３に含まれる最大連続非空白セルの記入内容、すなわち「Ａ」、「Ｂ」、「Ｃ」、「Ｄ」、「Ｅ」を最下位ラベルとする。
【０１３３】
本実施形態は、特定方向最下位ラベル判定Ｓ８０７の条件において、第１上位ラベルの個数が最下位ラベルの個数と大差ないくらい多くなる場合があることを鑑みて設定された、条件Ｌ２に特徴を持つ。条件Ｌ２を設定することによって、集約主体等のユーザが画面制御部３０６を介して実施するデータ項目対話が不必要に発生することを抑える。
【０１３４】
−−−第４の実施形態−−−
次に第４の実施形態について説明する。本実施形態では、データ型判定処理Ｓ１０３において、すでに図１２Ａに示したラベル・型対応リスト３１３や、図１２Ｂに示した文字・型対応リスト３１４を利用してデータ項目に対応する型を判定できない場合、第１の実施形態のように、あらかじめ定めたデフォルトの型に決定するのではなく、型対話を実施することによりデータ型を判定する。
【０１３５】
図２４は、第４の実施形態におけるプログラム生成方法の処理手順例１を示すフロー図であり、具体的には、データ項目・型判定部３０４の実施するデータ型判定処理Ｓ１０３の一例を示すフローチャートである。この場合、最下位ラベルがラベル・型対応リスト３１３に掲載されているか否かの判定（Ｓ９０２）や、最下位ラベルと文字・型対応リスト３１４によって型を決定できるか否かの判定（Ｓ９０４）については、本実施形態は、第１実施形態と同様である。
【０１３６】
本実施形態では、第１の実施形態のデータ型判定処理Ｓ１０３のＳ４０５に代わり、データ項目・型判定部３０４はＳ９０５を実施する。Ｓ９０５は、２つのリストによって型が判定できなかった場合に実行されるステップであり、データ項目・型判定部３０４は、判定対象のデータ項目を型不定データ項目リストに登録する。
【０１３７】
また、データ項目・型判定部３０４は、すべてのデータ項目について、データ型を決定する、或いは、型不定データ項目リストへ登録する、のいずれかを実施した後（Ｓ９０６：ＮＯ）に、型不定データ項目リストに登録されたデータ項目があるか否を判定する（Ｓ９０８）。
【０１３８】
型不定データ項目リストに登録されたデータ項目がある場合（Ｓ９０８：ＹＥＳ）、データ項目・型判定部３０４は、画面制御部３０６を介し表示装置３０２、入力装置３０１と情報を受け渡し、図２５のような画面２５００によって、型不定データ項目の型に対する対話（型対話）を実施する（Ｓ９０９）。型対話において、データ項目・型判定部３０４は、入力装置３０１に対する集約主体等のユーザの操作内容に応じ、型不定データ項目リストに登録されたデータ項目の型の選択を受け付ける。そして、データ項目・型判定部３０４は、受け付けたデータ項目の最下位ラベルと型の対応を、ラベル・型対応リスト３１３に追記し（Ｓ９１０）、型判定処理Ｓ１０３を終了する。一方、型不定データ項目リストに登録されたデータ項目がない場合（Ｓ９０８：ＮＯ）、データ項目・型判定部３０４は型判定処理Ｓ１０３を終了する。
【０１３９】
以上、本発明を実施するための最良の形態などについて具体的に説明したが、本発明はこれに限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。
【０１４０】
こうした本実施形態によれば、スプレッドシートを用いた業務をウェブアプリケーションに移行する際の、ユーザ作業量を効果的に抑制し、ウェブアプリケーションプログラムのコードを効率的に生成できる。
【０１４１】
本明細書の記載により、少なくとも次のことが明らかにされる。すなわち、本実施形態のプログラム生成システムにおいて、演算部は、第１処理において、スプレッドシートデータから前記データ項目の配置を判定するデータ項目判定処理と、前記データ項目の値のデータ型を判定するデータ型判定処理とを実行するものであり、データ項目判定処理は、各データ項目の配置に基づいて、１または複数のデータ項目とこれに隣接し包含する上位のデータ項目との関係で規定されるデータ項目間の階層構造を特定する階層構造判定処理と、階層構造のうち最下位に位置するデータ項目群を、該当セルの連続数の大きさと階層構造中での位置が所定条件を満たすものとして判定し、該当データ項目群を最下位ラベルとして特定する最下位ラベル判定処理とを含むものである、としてもよい。
【０１４２】
また、本実施形態のプログラム生成システムにおいて、演算部は、最下位ラベル判定処理において、スプレッドシートデータの各行または各列において、連続する前記非空白セルの個数の最大値を当該行または列のカウントとして特定し、スプレッドシートデータに含まれるすべての行および列の中で、カウントが最大である行または列を特定し、当該特定した行または列において最も連続した非空白セルの記入内容を最下位ラベルと判定するものである、としてもよい。
【０１４３】
また、本実施形態のプログラム生成システムにおいて、演算部は、階層構造判定処理において、最下位ラベルの並び方向が行方向である場合、最下位ラベルの各々について、スプレッドシートデータ上において、該当最下位ラベルのセルから上方向に隣接するセルを参照し、当該隣接セルが空白セルでない場合、当該隣接セルの記入内容を上位階層のラベルと仮判定し、最下位ラベルと当該仮判定した上位階層のラベルの情報を階層順に連結して生成した項目名と、隣接セルの行位置とを、記憶部の階層構造判定表へ記憶することを繰り返し、最下位ラベルの全てについて、階層構造判定表への項目名と行位置の記憶が終了した後に、階層構造判定表において、全ての最下位ラベルに共通する行位置のうち最も上の行位置に対応する項目名を特定し、当該項目名を最下位ラベルごとに階層構造の情報として記憶部に格納し、最下位ラベルの並び方向が列方向である場合に、最下位ラベルの各々について、スプレッドシートデータ上において、該当最下位ラベルのセルから左方向に隣接するセルを参照し、当該隣接セルが空白セルでない場合、当該隣接セルの記入内容を上位階層のラベルと仮判定し、最下位ラベルと当該仮判定した上位階層のラベルの情報を階層順に連結して生成した項目名と、隣接セルの列位置とを、記憶部の階層構造判定表へ記憶することを繰り返し、最下位ラベルの全てについて、階層構造判定表への項目名と列位置の記憶が終了した後に、階層構造判定表において、全ての最下位ラベルに共通する列位置のうち最も左の列位置に対応する項目名を特定し、当該項目名を最下位ラベルごとに階層構造の情報として記憶部に格納するものである、としてもよい。
【０１４４】
また、本実施形態のプログラム生成システムにおいて、記憶部は、最下位ラベルの値とデータ型との対応関係を記述したラベル・型対応リストと、最下位ラベルの末尾文字とデータ型との対応関係を記述した文字・型対応リストとを記憶しており、演算部は、データ型判定処理において、データ項目の各々について、該当データ項目が属する階層構造での最下位ラベルの値を、ラベル・型対応リストに照合し、最下位ラベルの値に対応するデータ型を特定できた場合、該当データ型をデータ項目のデータ型と判定し、最下位ラベルの値に対応するデータ型を特定できなかった場合、最下位ラベルを構成する文字列の末尾の一つまたは複数の文字を、文字・型対応リストに照合し、最下位ラベルの末尾文字に対応するデータ型を特定できた場合、該当データ型をデータ項目のデータ型と判定し、最下位ラベルの末尾文字に対応するデータ型を特定できなかった場合、デフォルトのデータ型をデータ項目のデータ型と判定するものである、としてもよい。
【０１４５】
また、本実施形態のプログラム生成システムにおいて、演算部は、最下位ラベル判定処理において、スプレッドシートデータの各行または各列において、連続する非空白セルの個数の最大値を当該行または列のカウントとして特定し、スプレッドシートデータに含まれるすべての行の中でカウントが最大の行のカウントと、スプレッドシートデータに含まれるすべての列の中でカウントが最大の列のカウントとを比較し、両者のうち小さくないカウントが、他方のカウントに１より大きい値を持つ第１の実定数を乗じた値よりも小さい場合、入出力部に、最下位ラベルの並び方向に関する確認要求を出力し、この確認要求に応じたユーザ入力を入出力部で受け付け、当該ユーザ入力に応じて最下位ラベルの並び方向を特定し、小さくないカウントが、他方のカウントに１より大きい値を持つ第１の実定数を乗じた値よりも小さくない場合、スプレッドシートデータに含まれるすべての行の中でカウントが最大の行のカウントと、スプレッドシートデータに含まれるすべての列の中でカウントが最大の列のカウントのうち、小さくないほうの方向を最下位ラベルの並び方向と判定する、最下位ラベル並び方向判定処理を実行するものであるとしてもよい。
【０１４６】
また、本実施形態のプログラム生成システムにおいて、演算部は、最下位ラベル判定処理において、最下位ラベル並び方向判定処理と、特定方向最下位ラベル判定処理とを実行するものであり、特定方向最下位ラベル判定処理は、最下位ラベル並び方向判定処理で判定した最下位ラベル並び方向に関して、当該方向が行方向である場合、スプレッドシートデータに含まれるすべての行をカウントの大きい順、または、カウントが同じ行については下の行が先になるようにソートし、当該方向が列方向である場合、スプレッドシートデータに含まれるすべての列をカウントの大きい順、または、カウントが同じ列については右の列が先になるようにソートし、ソート結果の１番目の要素のカウントが、ソート結果の２番目の要素のカウントに１より大きい値を持つ第２の実定数を乗じた値よりも小さい場合、スプレッドシートデータに含まれる全ての非空白セルの記入内容を、最下位ラベルおよび上位階層のラベルの候補として入出力部に出力し、候補中よりユーザが指定した最下位ラベルおよび上位階層のラベルの情報を入出力部にて受け付け、当該受け付けた情報により最下位ラベルおよび上位階層のラベルを特定し、ソート結果の１番目の要素のカウントが、ソート結果の２番目の要素のカウントに１より大きい値を持つ第２の実定数を乗じた値よりも小さくない場合、ソート結果の１番目の要素に含まれる最も連続した非空白セルの記入内容を最下位ラベルと判定するものである、としてもよい。
【０１４７】
また、本実施形態のプログラム生成システムにおいて、記憶部は、最下位ラベルの値とデータ型との対応関係を記述したラベル・型対応リストと、最下位ラベルの末尾文字とデータ型との対応関係を記述した文字・型対応リストとを記憶しており、演算部は、データ型判定処理において、データ項目の各々について、該当データ項目が属する階層構造での最下位ラベルの値を、ラベル・型対応リストに照合し、最下位ラベルの値に対応するデータ型を特定できた場合、該当データ型をデータ項目のデータ型と判定し、最下位ラベルの値に対応するデータ型を特定できなかった場合、最下位ラベルを構成する文字列の末尾の一つまたは複数の文字を、文字・型対応リストに照合し、最下位ラベルの末尾文字に対応するデータ型を特定できた場合、該当データ型をデータ項目のデータ型と判定し、最下位ラベルの末尾文字に対応するデータ型を特定できなかった場合、データ項目とデータ項目のデータ型の候補に関する情報を入出力部に出力し、候補中よりユーザが指定したデータ型の情報を入出力部にて受け付け、当該受け付けた情報により、該当データ型をデータ項目のデータ型と判定するものである、としてもよい。
【０１４８】
また、本実施形態のプログラム生成システムにおいて、演算部は、特定方向最下位ラベル判定処理において、ソート結果の１番目の要素のカウントが、ソート結果の２番目の要素のカウントに１より大きい値を持つ第２の実定数を乗じた値よりも小さい時、最下位ラベルの並び方向が行方向の場合で、ソート結果の２番目の行がソート結果の１番目の行に上から隣接する場合か、最下位ラベルの並び方向が列方向の場合で、ソート結果の２番目の列がソート結果の１番目の列に左から隣接する場合は、ソート結果の１番目の要素に含まれる最も連続した非空白セルの記入内容を最下位ラベルと判定するものである、としてもよい。
【符号の説明】
【０１４９】
１０３  スプレッドシート
１０４  データファイル（スプレッドシートデータ）
１５０  データベース
３０１  入力装置
３０２  出力装置
３０３  プログラム生成システム
３０４  データ項目・型判定部
３０５  コード生成部
３０６  画面制御部
３０７  記憶部
３０８  データ項目・型テーブル（テーブル）
３０９  要求処理プログラムコード
３１０  データベースアクセスプログラムコード
３１１  画面コード生成プログラムコード
３１２  データベース
３１３  ラベル・型対応リスト
３１４  文字・型対応リスト
３１５  階層構造判定表
４０１  クライアント
４０３  ウェブブラウザ
４０２  サーバ
４０５  要求処理プログラム
４０６  データベースアクセスプログラム
４０７  画面コード生成プログラム
４０８  データベース
５０２  ＣＰＵ（演算部）
５０３  ＲＡＭ
５０４  ＲＯＭ
５０５  ＨＤＤ（記憶部）
５０６  通信Ｉ／Ｆ
５０７  入出力ｃ（入出力部）
５０８  メディア通信Ｉ／Ｆ
【図１】
2014074947.tif 000003
【図２】
2014074947.tif 000004
【図３】
2014074947.tif 000005
【図４】
2014074947.tif 000006
【図５】
2014074947.tif 000007
【図６】
2014074947.tif 000008
【図７】
2014074947.tif 000009
【図８Ａ】
2014074947.tif 000010
【図８Ｂ】
2014074947.tif 000011
【図９】
2014074947.tif 000012
【図１０Ａ】
2014074947.tif 000013
【図１０Ｂ】
2014074947.tif 000014
【図１１】
2014074947.tif 000015
【図１２Ａ】
2014074947.tif 000016
【図１２Ｂ】
2014074947.tif 000017
【図１３】
2014074947.tif 000018
【図１４】
2014074947.tif 000019
【図１５】
2014074947.tif 000020
【図１６Ａ】
2014074947.tif 000021
【図１６Ｂ】
2014074947.tif 000022
【図１７Ａ】
2014074947.tif 000023
【図１７Ｂ】
2014074947.tif 000024
【図１８】
2014074947.tif 000025
【図１９】
2014074947.tif 000026
【図２０】
2014074947.tif 000027
【図２１Ａ】
2014074947.tif 000028
【図２１Ｂ】
2014074947.tif 000029
【図２２Ａ】
2014074947.tif 000030
【図２２Ｂ】
2014074947.tif 000031
【図２２Ｃ】
2014074947.tif 000032
【図２２Ｄ】
2014074947.tif 000033
【図２３Ａ】
2014074947.tif 000034
【図２３Ｂ】
2014074947.tif 000035
【図２４】
2014074947.tif 000036
【図２５】
2014074947.tif 000037