スクリーンショット_2020-02-15_10

FileMaker テキストのみペーストを⌘+Vで

マスタデータへのコピペで発生するテキストの余分なスタイル。今回はシンプルな方法で解決します。

Webから情報をデータベースにコピーペーストすることはよくありますね。例えば、新規のお客様の住所を間違いなく入力したいときなど。間違えて入力したくないですからね。FileMakerの場合はそんなときに、あれ、なんかフォントが変、ということがあります。書式毎データとして保存されるからですね。慣れていれば⌘+zで書式を削除できます。しかし、慣れないと入力が正しくできないというのはどうでしょう。それにまいっか、と流されてしまったら。


おことわり

2020/2/15に開催されたFM-Tokyoオフラインミーティングhttps://web.fmtokyo.jp/2020/02/07/announce-49/ のLTした内容です。やり方をすぐに知りたいという方はページ最後のサンプルファイルを確認してみてください。
スクリプトとカスタムメニューを見れば5分で理解できるとおもいます。

検証はFileMaker Pro 18 Advanced / macOS 10.15環境だけです。

ことの発端

今回、お客様からFileMakerのシステムからラベル印刷するとフォントがまちまちになることがある、というご相談を受けました。真っ先に思い浮かんだのがWebサイトからコピーして、システムにペーストしていないかということでした。
ヒアリングすると、そのケースはあるとのこと。

いつくかの方法

一つ目の解決策としては、ペーストしたあとに、⌘+zで書式を削除してもらうか、最初から「テキストのみペースト」を選択してもらう
これはそれなりに自由度が高いのですが、しかし、操作そのものを忘れられたら一巻の終わり。
こういうマスタ系についてはどのレコードにもそのような外れがないようにしておく必要があるので、おすすめできないです。
誰それさんの担当分はいつも書式ついたまま、みたいなことがおきそうです。

次に思いついたのがフィールド定義の計算値の自動入力を利用して全ての書式を削除してしまう。
 TextFormatRemove( self )
のような計算式を設定してあげると、入力や編集のたびに書式を全て削除してくれます。
(具体的なフィールド名のかわりにselfを使うと使い回しができて便利ですね。)
やったね、解決!

課題追加

しかし、ここでお客様から「手作業で文字を小さくしたり、書式をつけられるようにしてほしい。」とのリクエストがありました。TextFormatRemove( self )は全て削除してしまうので、仕様に合致しません。
それに後から追加されたフィールドなどは設定が漏れてしまう可能性も。(なにりより面倒くさい)
誤解なきように書いておきますが、FileMakerにはスタイルを指定して削除する関数も用意されてますし、ネストすれば色々可能です。

試行錯誤

それで、しばらく考えた結果思いついたのが「ショートカット」を変更して、⌘+vに⌘+Shift+Option+vの機能を割り当てるというものでした。
これはOSの縛りでうまくいかなかったので、次にカスタムメニューで考えました。
FileMakerにはファイルごとにメニューをカスタマイズする機能が用意されてます。これを使えばいけるんではないかと。
性懲りもなく、編集メニューの「テキストのみペースト」のショートカットを⌘+vに編集して、「ペースト」のほうは利用できなくしました。
しかーし、ショートカット全般が使えなくなるというダメダメ状態に。

うーん、どうしろというんだ、と頭抱えたわけですが、抱えた頭の片隅に、そういえば「テキストのみペースト」というようなスクリプトステップがなかったっけ?と。
確認すると、ありました。
正確には、「貼り付け」というスクリプトステップに「スタイルなしの貼り付け」というオプションでした。
スクリプトを一個つくり、カスタムメニューに割り当てたところ、思ったように動作してくれました。

注意点は、同じレイアウト上でドラッグ&ドロップすると書式がついてしまいます。

最後に

設定の手順を知りたかったというかた、すみません、頑張ってみてください。

サンプルファイルはFileMakerのテンプレート機能から作成しました。パスワードはデフォルトのままです。カスタムメニューを編集したい場合、FileMakerの環境設定で高度なツールを使えるようにしてください。

2023/11/17追記


Windowsでは改行が違う文字コードに変換されてしまうとのこと。
@miyabi_ryuji さんから単純にTextFormatRemove(Get(アクティブフィールド内容))を利用すれば?と言う指摘受けたので、追記しときます。
Twitterのスレッド


この記事が気に入ったらサポートをしてみませんか?