ある方から、こんな質問を頂きました
- FileMaker で、書式の混じっているデータなんですが
- 書式設定でフォント・サイズが指定されています。
- このフォントやサイズが統一されず見辛いです。
- 書式を消し去るスクリプトを組まないといけないのでしょうか?
- 書式は引き継ぎたいのですか?それとも、書式はすべて取り除きたいのですか?
- Excelから取り込もうとしたのですが、
- フォントやサイズがバラバラのものが出てきたからなんです。
恐らく、こういうことなのでしょうね。(名前や電話番号はダミーデータです)
Claris FileMaker では書式を取り除く関数は幾つかあります。
TextColorRemove
指定したテキストのすべての文字色、または RGB 関数で指定された文字色を取り除きます。
TextFontRemove
指定されたテキストからすべてのフォントまたは削除対象フォントを取り除きます。
TextSizeRemove
テキストのすべてのフォントサイズ、または削除対象サイズで指定されたフォントサイズを取り除きます。
TextStyleRemove
1 回の操作で指定されたスタイルをテキストから取り除きます。
これらの関数はフォント・文字色・フォントサイズ・指定したスタイルを個別で指定しなくてはいけませんね。一気にすべてのスタイルを取り除くならば次の関数を使います
TextFormatRemove
1回の操作で、すべてのテキスト書式をテキストから削除します。
この関数を「データベースの管理」から「フィールドオプション」として「入力値自動化」に「計算式」を組み込む方法で実装すれば、追加されるレコードのスタイル(書式)はすべて削除されます
ただ、この方法ではフィールドごとに設定する必要があるのと、すでにレコード追加されたフィールドには有効ではないためスクリプトを実装します
変数を設定 [ $フィールドリスト ; FiledNames( Get(ファイル名); Get(レイアウト名) ) ] 変数を設定 [ $フィールド数 ; ValueCount( $フィールドリスト ) ] 全レコードを表示 レコード / 検索条件 / ページへ移動 [ 最初の ] Loop 変数を設定 [ $カウント ; 1 ] Loop フィールドを名前で設定 [ Get(レイアウトテーブル名) & "::" & GetValue( $フィールドリスト; $カウント ); TextFormatRemove( GetField( Get(レイアウトテーブル名) & "::" & GetValue( $フィールドリスト;$カウント ))) ] 変数を設定 [ $カウント ; $カウント + 1 ] Exit Loop If [ $カウント > $フィールド数 ] End Loop レコード / 検索条件 / ページへ移動 [ 次の; 最後まで来たら終了: オン ] End Loop
[ 解説 ]
1行目 :
変数を設定 [ $フィールドリスト ; FiledNames( Get(ファイル名); Get(レイアウト名) ) ]
変数 $フィールドリスト に 「ファイル名のレイアウト名にあるすべてのフィールドの名前の一覧」を設定します。関数で返される結果一覧は改行で区切られています。
Get(ファイル名) や Get(レイアウト名) としているのはレイアウトやファイルが変わっても対応できるようにするためです。FiledNames関数で取得できるのはレイアウト上に存在するものだけです。レイアウト上にないフィールドは対象にならない点に注意が必要です。
2行目 :
変数を設定 [ $フィールド数 ; ValueCount( $フィールドリスト ) ]
変数 フィールド数に $フィールドリストの値の数を設定します。 ValueCountは指定したテキスト内の改行区切りの値の合計数を返す関数です。
4〜6行目、15・16行目 :
全レコードを表示
レコード / 検索条件 / ページへ移動 [ 最初の ]
Loop
…
レコード / 検索条件 / ページへ移動 [ 次の; 最後まで来たら終了: オン ]
End Loop
Claris FileMaker で定番といっても良いスクリプトステップの流れです。内容は、一旦全てのレコードをアクティブ(絞り込み解除)して、レコードの先頭行へ戻り、1レコードずつ最後のレコードまで進む。最後のレコードに来たら終了という内容です。
7・8行目、11〜13行目 :
変数を設定 [ $カウント ; 1 ]
Loop
…
変数を設定 [ $カウント ; $カウント + 1 ]
Exit Loop If [ $カウント > $フィールド数 ]
End Loop
こちらもよく使われるループ処理(特定の処理を繰り返す)のスクリプトです。
変数 $カウント に、値「1」を追加し、ループ(繰り返し)処理を開始します。ループの中で $カウントは 1ずつ足され、$カウントの値が$フィールド数(前述、$フィールドリストの値の数)を上回ったらループを終了します。次のレコードでは再度、変数 $カウントに値「1」を設定して同じ処理をします。
10行目 :
フィールドを名前で設定 [ Get(レイアウトテーブル名) & “::” & GetValue( $フィールドリスト; $カウント ); TextFormatRemove( GetField( Get(レイアウトテーブル名) & “::” & GetValue( $フィールドリスト;$カウント ))) ]
このスクリプトで実行したい本当の目的はこの行です。
「フィールドを名前で設定」は現在のレコードの指定された計算フィールドの内容全体を計算値で置き換えます。この関数は「設定したいフィールド( 指定された計算フィールド )」と「計算式( 設定したい計算式 )」を引数として与えます。分解してみましょう。
「設定したいフィールド」は Get(レイアウトテーブル名) & “::” & GetValue( $フィールドリスト; $カウント )で、これは現在表示しているレイアウトで使われるテーブル(テーブルオカレンス)名を設定します。また GetValue( $フィールドリスト; $カウント )は、複数行あるフィールドのリストを設定した変数 $フィールドリスト から $カウント番目を取得する getvalue関数という意味です。これらの結果を「::(コロン記号2つ)」で繋いでいます。これはレイアウト上のフィールドを示しています。
フィールドを指定したら、続いて 計算式 です。難解で分かりづらいかもしれませんが、何度も読んで少しずつ理解してゆきましょう。
Get(レイアウトテーブル名) & “::” & Getvalue( $フィールドリスト; $カウント) は先に示したフィールドを指します。このフィールドをもとに GetField関数でフィールドに設定された内容を取得します。ネストと呼ばれる方法で、関数を関数で挟んでいます。
さらに textformatremoveで挟むことで冒頭で説明したスタイルを一気に取り除く処理をします。
[ 例を見ながら説明 ]
上の画像はとあるデータベースのレイアウトです。このレイアウト上には「ID」「名前」「ふりがな」「電話番号」と4つのフィールド、10件のレコードが表示されています。
先のスクリプトではまず、変数 $フィールドリストにFieldNames関数で「ID」「名前」「ふりがな」「電話番号」を設定します。このステップで
ID 名前 ふりがな 電話番号のようになります。
続いて、ValueCount関数でこの行数「4」を 変数$フィールド数に設定します
あとは、ループ処理の中で先頭レコードから最後のレコードまで、各レコードごとにフィールドの内容を順番に処理します
ループ処理
ループ処理
$カウント = 1 (フィールドリストの1番目は「ID」)
IDフィールドの内容を、そのままIDフィールドに設定(このとき書式をリセット)
$カウントの値に1を追加して、
$カウント = 2(フィールドリストの2番目は「名前」)
名前フィールドの内容を、そのまま名前フィールドに設定
(このとき書式をリセット)
$カウントの値に1を追加して、
$カウント = 3(フィールドリストの3番目は「ふりがな」)
ふりがなフィールドの内容を、そのままふりがなフィールドに設定
(このとき書式をリセット)
$カウントの値に1を追加して、
$カウント = 4(フィールドリストの4番目は「電話番号」)
電話番号フィールドの内容を、
そのまま電話番号フィールドに設定(このとき書式をリセット)
$カウントの値が4を超えたらループ処理終了。
ループ処理終了
[ 次のレコードへ / 最後のレコードまで進んだら終了 ]
ループ処理終了
書式を取り除いた状態