OpenOffice.org Baseデータベースにおけるデータのインポート/エクスポート
まずはもっとも簡単なケースを考えてみよう。Calcスプレッドシートの中にデータがあって、そのデータをBaseデータベースの中の新規の表にインポートしたいという場合だ。まず作業を始める前に、スプレッドシートの最初の行に列のラベルが含まれていることを確認しておこう。そうしておくとそれらのラベルがデータベースのフィールド名として使用されるので、インポート作業の際にデータの管理が楽になる。
それではキーボードショートカットのCtrl-AとCtrl-C(あるいはEdit(編集)→Select All(すべて選択)とEdit(編集)→Copy(コピー))を使用してスプレッドシート内の全データをコピーしよう。次にデータベースのTables(表)セクションに移動して、Tables(表)枠の中で右クリックして、Paste(貼り付け)を選択する。するとインポート作業を手助けするためのウィザードが開く。ここでは新規の表にデータをインポートしようとしているので、表に分かりやすい名前を付けて、Definition and data(定義とデータ)オプションを選択しよう。
次に、新しい表のための主キーを作成する必要がある。そのためにはCreate primary key(主キーの作成)のチェックボックスをチェックする。なおデフォルトの「ID」という名称を使用したくない場合にはフィールドに適切な名前を入力すれば良い。その後Next(次)をクリックして、Apply Columns(列の選択)画面に移動する。この画面では表に追加したい列を選択することができる。表示されているボタンを使用して追加したい列を指定することができたらNext(次)を押そう。インポート用ウィザードでは各列のデータ型が通常は問題なく推測されるのだが、推測結果を修正する必要がある場合には、Type formatting(データ型の設定)画面で変更することができる。またこの画面では列の名前や各フィールドの長さを変更することもできる。最後にDone(終了)ボタンを押せば、表にデータがインポートされる。
データを既存の表にインポートすることも同じくらい簡単に行うことができる。スプレッドシートの中でデータを選択してコピーしてから、データベースのTables(表)枠の中で右クリックしてPaste(貼り付け)を選択する。そして使用したい表の名前をTable name(表の名前)フィールドに入力する。この時、必ず既存の表の名前に合致する名前を入力するように気を付けよう。そうしなければ既存の表を使用するのではなく新規の表が作成されてしまう。そして次にAppend data(データの追加)オプションを選択する。なおCreate primary key(主キーの作成)チェックボックスはそのままにしておこう。そしてNext(次)ボタンを押したら、Assign columns(列の割り当て)画面の中の矢印ボタンを使用して、データの追加元と追加先の各フィールドの位置を合わせる。最後にCreate(作成)を押せば、表にデータが挿入される。
Calcを経由させれば、ウェブページ内のHTMLの表のデータをBaseデータベースにインポートすることもできる。例として、不規則活用をする英語の動詞の活用表を既存のHTMLの表から、データベースの表にインポートしたいとしよう。その場合、まずはHTMLの表の中のデータを選択してコピーする。次に新規のスプレッドシートを作成してEdit(編集)→Paste(貼り付け)を選択する。Calcは、クリップボード内のデータがHTMLの表であることを認識することができるので、データをそれぞれ別の列に挿入することができる。Calcが適切に各列を埋めることができない場合には、Edit(編集)→Paste Special(特殊な貼り付け)コマンドを使用して、Unformatted text(整形されていないテキスト)オプションを選択すれば良い。これによりText Import(テキストのインポート)ダイアログが開いて、データを適切にインポートするのに役立ついくつかのツールを使用することができる。スプレッドシート内にデータを挿入することができてしまえば、あとは上述の方法でデータベースにインポートすれば良い。
エクスポート
OpenOffice.org Baseでは、データベースからデータを取り出すことに関してもいくつかの方法を使うことができる。例えば一つのレコードから全レコードまでWriter文書の中に挿入することもできるし、手動またはOpenOffice.orgのBasicマクロ経由でデータをCalcスプレッドシートにエクスポートすることもできる。
レコードをWriter文書の中に挿入することは、OpenOffice.orgにそのためのData to Text(データをテキストにする)機能があるので簡単に行うことができる。この機能を使用するためには、データベースをデータソースとして登録して、OpenOffice.orgのすべてのアプリケーションからアクセス可能にしておく必要がある。そのためにはTools(ツール)→Options(オプション)→OpenOffice.org Base→Databases(データベース)を選択してNew(新規)ボタンを押そう。その後データベースを選択して名前を付けてOKを押す。これでData Sources(データソース)枠経由でデータベースの中の表にアクセスすることができるようになる。なおData Sources(データソース)枠は、キーボードからF4を入力するかView(ビュー)→Data Sources(データソース)を選択すれば表示することができる。
次に、カーソルをデータの挿入先のWriter文書に移動しておいて、表枠内の目的のレコードを選択して、Data to Text(データをテキストにする)ボタンを押す。するとInsert Database Columns(データベースの列を挿入)ダイアログウィンドウが開いて、選択したレコードを文書に挿入するための3通りの形式(表/テキスト/フィールド)が提示される。
整形した表としてレコードを挿入するためにはInsert data as(データを挿入する形式)セクションの中のTable(表)オプションを選択して、左のDatabase columns(データベースの列)から右のTable columns(表の列)ウィンドウに目的の列を移動すれば良い。Properties(設定)ボタンを使用すれば表についての設定情報を指定することができるし、あるいはAutoFormat(自動整形)ボタンを使用して既定の表のレイアウトを選択しても良い。OKボタンを押せば、文書内に表が挿入される。
一方、選択したレコードをテキストとして挿入したい場合には、Text(テキスト)オプションを選択して、挿入したいフィールドを指定すれば良い。Paragraph Style(段落形式)ドロップダウンリストから好みの形式を選択すれば、挿入したデータに段落整形を適用することもできる。最後に、Fields(フィールド)オプションを指定した場合には、動的に更新することのできるプレースホルダとしてレコードを挿入することができる。つまり例えば、住所をフィールドとして挿入しておけば、データベース内の元のレコードを変更した場合、データベースの表の中の変更したレコードを選択してData to Fields(データをフィールドに反映)ボタンを押せば、挿入したデータを更新することができる。
データベースの表からCalcスプレッドシートにデータを移すのは、これ以上ないというほど簡単に行うことができる。データベースのTables(表)セクションで、目的の表の中で右クリックしてCopy(コピー)を選択する。後は、スプレッドシートでEdit(編集)→Paste(貼り付け)を選択するだけで終りだ。
さらに、データを移動するためのOpenOffice.org Basic用の簡単なマクロを作成することもできる。Calcでデータベースのデータを使うことの多い人はマクロを使用すれば時間を大きく節約することができるだろう。以下に示すマクロは、TasksDBという名前のデータベースに接続して、「tasks」という表の中のTaskフィールド、Dateフィールド、Doneフィールドの内容をSQLクエリを使用して取得する。その後、Calcスプレッドシートを新規に作成して、取得したデータを挿入する。
Sub TasksToCalc() Dim RowSetObj As Object, ConnectToDatabase As Object DBContext=createUnoService("com.sun.star.sdb.DatabaseContext") DataSource=DBContext.getByName("TasksDB") ConnectToDatabase=DataSource.GetConnection ("","") oURL="private:factory/scalc" oDoc=StarDesktop.loadComponentFromURL(oURL, "_blank", 0, Array()) oSheet=oDoc.Sheets(0) oSheet.Name="Tasks" SQLQuery= "SELECT ""Task"", ""Date"", ""Done"" FROM ""tasks"" ORDER BY ""Date"" ASC" SQLStatement=ConnectToDatabase.createStatement RowSetObj=SQLStatement.executeQuery (SQLQuery) While RowSetObj.Next i=i+1 oCell=oSheet.getCellByPosition(0,i) oCell.String=RowSetObj.getString(1) oCell=oSheet.getCellByPosition(1,i) oCell.String=RowSetObj.getString(2) oCell=oSheet.getCellByPosition(2,i) oCell.String=RowSetObj.getString(3) Wend Database.close Database.dispose() End Sub
Dmitri Popovは、ロシア、イギリス、アメリカ、ドイツ、デンマークのコンピュータ雑誌で活躍するフリーランスのライター。