SenseTalkにおけるExcelの操作
SenseTalkを使用して、Microsoft Excel(.xlsx)形式で格納されているデータにアクセスすることができます。本セクションの情報を利用してSenseTalkを構成することで、データベースレコード形式のスプレッドシートからデータを読み取ることが可能になります。本セクションに示す情報は、ほとんどのSenseTalkのデータベース機能に対応します。
Excelファイルからのデータの読み取り、またはExcelファイルへのデータの書き込みを直接行うSenseTalkに関連するExcelのより限定的な使用方法については、Excelファイルとのやり取りを参照してください。
データベースとしてのExcelの利用
データベースとしてExcelファイルを使用する場合は、データベースの操作に示す情報と類似する方法でSenseTalkを利用できます。
SenseTalkを構成してExcelをデータベースとして利用するには、Excelファイル のパスと名前を含む以下のコマンドを実行します。
set myExcelDB to (type: "excel", file: "/<Path>/<MYExcelFile>.xlsx") -- 参照先のExcelファイルの中身を格納するよう指定の変数myExcelDBを設定し、SenseTalk接続を確立します。
データベースとしてExcelファイルを使用する場合は、SenseTalkはファイル内の各ワークシートをデータベーステーブルとして扱います。
ワークシートの1行目は、テーブル内の列の名前を特定するヘッダー行として扱われます。SenseTalkはその後のすべての行をテーブル内のデータベースレコードとして扱い、空の行は無視します。
次のExcelファイルの例を考察してみましょう。
州 | 州都 | 人口 | 面積 |
---|---|---|---|
California | Sacramento | 39,100,000 | 164,000 |
Colorado | Denver | 5,300,000 | 104,000 |
New York | New York | 194,000,000 | 54,600 |
本ファイルには、4列と6行から成るワークシートが1つ含まれています。最後の2行は空白行となっています。
本ファイルのパスが~/Desktop/States.xlsxの場合は、本データベースアプローチを利用してコンテンツ全体を読み取る以下のようなコマンドが必要となります。
set myExcelDB to (type:"excel", file:"~/Desktop/States.xlsx") -- 参照先のExcelファイルの中身を格納するよう指定の変数myExcelDBを設定します
put the records of myExcelDB into states -- 変数myExcelDBからすべてのレコードをフェッチし、それらを変数statesの中に入れます
put states joined by return -- 変数statesからデータを取り出し、1行につき1レコードずつ示します
上記のコマンドを実行すると、以下のデータが返されます。
(area:164000, capitol:Sacramento, population:39100000, state:California)
(area:104000, capitol:Denver, population:5300000, state:Colorado)
(area:54600, capitol:New York, population:19400000, state:New York)
各レコードのプロパティ名として1行目の列ラベルが使用され、プロパティリストとして3つのレコードが読み取られたことを確認してください。
Excelファイルデータベース接続の構成
その他のタイプのデータベース接続とは違い、Excelデータベースはデフォルトで書き込み可能ではありません。この書き込み制限は、SenseTalkはメモリ内で加えられた変更を更新するものの、Excelファイルにこれらの変更は書き込まないことを意味します。add recordコマンドおよびdelete recordコマンドを利用してSenseTalkにExcelファイルを更新させたい場合は、以下の例のようにWritable: Yesプロパティを指定して、データベース接続を書き込み可能にする必要があります。
set myExcelDB to (type:"excel", file:"~/Desktop/States.xlsx", writable: Yes) -- 参照先のExcelファイルの中身を格納するよう指定の変数myExcelDBを設定し、書き込み可能なSenseTalk接続を確立します
Excel接続がWritableである場合は、フェッチされたレコードには_pkey_ propertyプロパティ値が含まれます。SenseTalkは本プロパティ値を利用して、変更がありファイルに書き込む必要のある各レコードを一意的に特定します。
ワークシートをテーブルとして指定する
上述したように、データベースとしてExcelファイルを使用する場合は、SenseTalkはファイル内の各ワークシートをデータベーステーブルとして扱います。以下の例に、ワークシートを1つだけ含む場合や、ファイル内の最初のワークシートのみが必要な場合のExcelファイル内の情報へのアクセス方法を示します。
特定のワークシートを指定するには、以下に示す例のようにNameプロパティを使用し、希望するワークシートの名前か番号(1、2、...)のいずれかを設定します。
set myExcelDB to (type:"excel", file:"~/Desktop/States.xlsx", name:"Counties") -- 参照先のExcelファイルの中身を格納するよう指定の変数myExcelDBを設定し、SenseTalk接続を確立します。名前が「Counties」のワークシートを指定します
以下の例に示すように、別のアプローチとして、テーブル構文を利用して希望するワークシートを指定する方法があります。
set myExcelDB to table ("Counties") of (type:"excel", file:"~/Desktop/States.xlsx") -- 参照先のExcelファイルの中身を格納するよう指定の変数myExcelDBを設定し、SenseTalk接続を確立します。名前が「Counties」のデータベーステーブルを指定します
set myExcelDB to table (2) of (type:"excel", file:"~/Desktop/States.xlsx") -- 参照先のExcelファイルの中身を格納するよう指定の変数myExcelDBを設定し、SenseTalk接続を確立します。データベーステーブルを番号で指定します