みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
初心者ですので基本的な事を質問してしまったり、
記載すべき事項が抜けていたりするかもしれませんが、どうかご教示頂けますでしょうか。
既に情報が登録されているデータを使用しています。
【環境】
File Maker pro 11
windows7
【希望】
複数のフィールド名を繋げたファイル名にして、レコードごと切り分けたPDFで書き出したい。
この時、3つ目のフィールド名は「」に入れたい。
【例】
フィールド1→県:千葉県
フィールド2→市:千葉市
フィールド3→店名:千葉店
PDFファイル名:千葉県千葉市「千葉店」.pdf
------
「レコードを PDF として保存」を使用した時、複数のページがまとめて1つのPDFとして書き出されてしまうので
1ページを1ファイルごとのPDFで保存される様にしたいです。
※この時の1ページは、レイアウト表示した際の1レコード(1ページ)です。
全1000ページ程あるデータが複数あるので、ページ切り分け、ファイル名付けまで自動化出来ないものかと試行錯誤しております。
皆様、どうかよろしくお願い致します。
フィールド名
と書いているけれど、
フィールドの値ですよね。
その値は
フィールド1→県:千葉県
「県:千葉県」
が値なんですか?
それとも
「千葉県」
が値?
いずれにせよ、
それらのフィールド値を加工・連結して、変数にし、
スクリプトステップ
レコードをPDFとして保存
のパス欄に書き込みます。
また、
そのオプションで
現在のレコード
を選択できます。
Offline
ページとレコードの使い方が変。
>全1000ページ程あるデータが複数あるので、
ページがレコードという意味なら、全1000レコードあるデータが複数ってどういうことかな。
チポ様
Traveller様
早速のご返答ありがとうございます。
まだFilemakerの概念を理解しきれておらず、お恥ずかしいです。
-----
変数を設定 [$$title; 値:BD::カタログNO & BD::アーティスト名 & "「" & BD::タイトル名 & "」"]
レコードをPDFとして保存 [記憶する;「$$title.pdf」;現在のレコード]
-----
※[レコードをPDFとして保存]の出力ファイルの設定→file:pdftest/$$title.pdf
ご回答頂いた説明を見ながら、上記の様にスクリプトステップを設定したのですが
結果は指定したフォルダ内に「$$title.pdf」という1レコード(現在のレコード)のみのPDFが作成されました。
当方スクリプトの知識が無く、変数設定の仕方も半信半疑なまま試している状態です。
【改善したい点】
・PDFファイル名に希望する変数名を付けたい。
・「現在のレコード保存」を続けて次のレコードにも作用される様にし、全てのレコードを保存したい。
フィールド1→県:千葉県
失礼しました。
県というフィールドの値が千葉県という意味で記載しています。
ページとレコードの使い方が変。
レコードとページの使い方が合わさってしまったみたいですみません。
Filemakerのレコード=PDFで保存された際のページ という認識です。
1000程のレコードが登録されたファイルが複数あります。
#1で挙げた例に沿うと、1つのレコードに1つの店舗情報が入っている場合
1000程の店舗情報がまとめられたファイルが複数という事です。
引き続き、ご回答頂けますと大変助かります。
デスクトップに保存する例
変数を設定 $p 値"file:" & Get ( デスクトップパス ) & テーブル::県 & テーブル::市 & "「" & テーブル::店名 & "」.pdf"
PDFとして保存 $p 現在のレコード
そのスクリプトを
最初のレコードから、対象レコード全部にLoopでまわせばいいでしょう。
最初に試されるときは、
Loopの中に
スクリプト一時停止
を入れるなどして、動きを一つずつ確認することをお勧めしますよ。
1000個のファイルを作ることですからね、
慎重に。。
あれ?
1000程の店舗情報がまとめられたファイルが複数という事です
FMファイルが複数有るということ?
Offline
ご回答ありがとうございます。
変数設定のオプションで
---
変数を設定 $p 値"file:" & Get ( デスクトップパス ) & テーブル::県 & テーブル::市 & "「" & テーブル::店名 & "」.pdf"
---
と入れると問題無いのですが、「デスクトップパス」を下記文言に差し替えるとエラーが出ました。
---
pdftest/
---
---
filewin:/C:/ユーザー名/Desktop/pdftest/
---
※2パターン試しました。
※出現エラー「この引数はCet関数の無効な引数です。」
※デスクトップにあるFMファイルから、デスクトップにある「pdftest」フォルダ内に保存したいです。
本当に初歩的な質問で恐縮ですが、パスの記し方をお教え頂けますでしょうか。
FMファイルが複数有るということ?
FMファイルが複数ありますが、今回はスクリプトをFMファイルごとに実行しようと考えています。
引き続きご回答頂けますと助かります。
フォルダパスをそのまま使うのならGet()は使わないのですよ。
"filewin:/C:/ユーザー名/Desktop/pdftest/ " & テーブル::県 & テーブル::市 & "「" & テーブル::店名 & "」.pdf"
ユーザー名を埋め込むと他に変わった場合に使えなくなるので、そういう場合のためにGet()関数がある。
試しに= Get ( デスクトップパス ) 結果はテキスト
という計算フィールドを作って結果を見てみたほうがいいですよ。
Get ( デスクトップパス )
このカッコ内の引数を実際のパスにしたんでしょう。
それはダメです。
取得関数はそのすべてが定義されたものでいじっては行けません。
ヘルプの参照を
http://www.filemaker.co.jp/11help/html/ … tml#752221
パスとするなら
"file:" & Get ( デスクトップパス ) & "/フォルダ名/" &ファイル名
こうなるかな。
Offline
スクリプトは半角英数じゃないといけないという固定概念からか、
そのまま試せばいいものを勝手に差し替えてしまっていました。
Filemakerは奥が深いですね。。
そして皆さまに助けられながら、少しずつ前進している気がします!
---
変数を設定[$title; 値:"pdftest/" & BD::県 & BD::市 & "「" & BD::店名 & "」.pdf"]
Loop
レコードをPDFとして保存 [記憶する;「$$title.pdf」;対象のレコード]
レコード/検索条件/ページへ移動/[次の; 最後まできたら終了]
END Loop
---
上記スクリプトで試した結果、開いていた一つのレコードのみ書きだされました。
また、店名のフィールド値のテキストに改行が入っている場合、ファイル名が途中で途切れてしまっていました。
【例】
県:千葉県 市:千葉市 店名:千葉店 ⇒ 千葉県千葉市「千葉店」.pdf ⇒ 成功!
県:東京都 市:港区
店名:○○○
●●●店 ⇒ 東京都港区「○○○ ⇒ 改行前までのファイルが書き出されます。
【改善したい点】
・フィールドの値テキストが改行されている場合も、値全てを含めてファイル名に付けたい。
・ループを正常に作動させたい。
度々恐縮ですが、アドバイスを頂けますでしょうか。
改行付きのファイル名は無いのでSubstituteで改行を取る必要があるでしょう。
1レコードを1PDFですから対象レコードではなく現在のレコードのPDF保存をLoopです。
「レコードへ移動/最初の」ステップも必要でしょう。
もちろん保存したい全レコードが対象レコードになっている必要があります。
皆さまに質問してばかりなので、アドバイスを頂いた後はなるべく自分の力で解決しようと試行錯誤しておりますが、
うまくいかず時間ばかり過ぎてしまうので、またお力を貸して頂けますでしょうか。
---
全レコードを表示
変数を設定[$title; 値:"pdftest/" & BD::県 & BD::市 & "「" & BD::店名 & "」.pdf"]レコード/検索条件/ページへ移動/[最初の]
Loop
レコードをPDFとして保存 [記憶する;「$$title.pdf」;現在のレコード]
レコード/検索条件/ページへ移動/[次の; 最後まできたら終了]
End Loop
---
上記スクリプトを実行したところ、作成されたPDFは1つのみ。
タイトルは「最初のレコード」、
PDFの内容は「最後のレコード」という結果になってしまいました。
※ファイル名に改行が入る問題は、メニューの「レコード」▶「フィールド内容の全置換」から、
「計算結果で置換える」指定にSubstitute関数を入れ解決しました。
【改善したい点】
・1ページずつ、PDFに書き出しループさせたい。
・可能であれば、Substitute関数をスクリプト内に組み込みたい。
よろしくお願い致します。
↑改行がおかしいですが、実行したスクリプト正しくはこちらです。
---
全レコードを表示
変数を設定[$title; 値:"pdftest/" & BD::県 & BD::市 & "「" & BD::店名 & "」.pdf"]
レコード/検索条件/ページへ移動/[最初の]
Loop
レコードをPDFとして保存 [記憶する;「$$title.pdf」;現在のレコード]
レコード/検索条件/ページへ移動/[次の; 最後まできたら終了]
End Loop
---
---
全レコードを表示
フィールド内容の全置換[ダイアログなし; BD::タイトル名; Substitute ( BD::店名; "¶" ; " " )]
レコード/検索条件/ページへ移動/[最初の]
Loop
変数を設定[$title; 値:"pdftest/" & BD::県 & BD::市 & "「" & BD::店名 & "」.pdf"]
レコードをPDFとして保存 [記憶する;追加;ダイアログなし;「$title.pdf」;現在のレコード]
レコード/検索条件/ページへ移動 [次の; 最後まできたら終了]
End Loop
---
上記スクリプトで目的通りの挙動が実行されました!
皆さま、ありがとうございます!
ただ「BD」というファイル名のFMファイルにて、実行できたのですが
別のファイル名のFMファイルにて実行しようとした時、下記エラーが出てしまいました。
---
必要なテーブルが見つからないため、この操作は実行できません。
---
おそらくスクリプトにファイル名をそのまま使用しているからだと思うのですが、
ここをどう記載すればいいのでしょうか。
また、別FMファイルを開いた時に前のFMファイルで作成したスクリプトを共有する方法はありますでしょうか。
↑また記載間違いです。申し訳ありません。実行成功したスクリプト正しくはこちらです。
---
全レコードを表示
フィールド内容の全置換[ダイアログなし; BD::店名; Substitute ( BD::店名; "¶" ; " " )]
レコード/検索条件/ページへ移動/[最初の]
Loop
変数を設定[$title; 値:"pdftest/" & BD::県 & BD::市 & "「" & BD::店名 & "」.pdf"]
レコードをPDFとして保存 [記憶する;追加;ダイアログなし;「$title.pdf」;現在のレコード]
レコード/検索条件/ページへ移動 [次の; 最後まできたら終了]
End Loop
---
目的がわかってないけど、PDF保存が「追加」になってるということは、他のファイルにも
同じ千葉県千葉市「千葉店」のデータがあるということですか?
そして別ファイルはいくつもあるのですか。ひとつのファイルに統合できないのですか。
フィールド内容の全置換[ダイアログなし; BD::店名; Substitute ( BD::店名; "¶" ; " " )]
これしちゃっていいのかな。
もう実行しちゃったのなら戻せないけれど、
まだでしたら、もう一度検討した方がいいのでは。
改行を取るのは変数を設定するところでできますよ。
スクリプトはそれぞれのテーブルで作らなければダメでしょう。
Offline
目的がわかってないけど、PDF保存が「追加」になってるということは、他のファイルにも
同じ千葉県千葉市「千葉店」のデータがあるということですか?
そして別ファイルはいくつもあるのですか。ひとつのファイルに統合できないのですか。
基本的には1ページずつ書き出すのですが、中には情報量が多く「千葉店」の情報が2ページに渡っている場合があり、「追加」を設定しました。
別ファイルは複数あり、それぞれ種類に分けているので全てを一つのファイルにする事は出来ませんが
幾つかを1つにまとめて書き出す事は出来ます。
その場合、データのインポートをすればいいのでしょうか。
もう実行しちゃったのなら戻せないけれど、
まだでしたら、もう一度検討した方がいいのでは。
元データのバックアップをとり試しているので、戻る事は可能です。
できれば元あるデータの内容は変えたくないと思っています。
自動化を試していくとやりたい事が増えていきますね。
繰り返しフィールド内の英数字を半角にし、「*」のみ全角に戻したいと思い、
下記の様にスクリプトを設定しましたがファイルによってテーブル名を書き換えなくてはならないため数が多く手間がかかります。
何かいい方法は無いでしょうか。
---
全レコードを表示
フィールド内容の全置換[ダイアログなし; BD::詳細; RomanHankaku (BD::詳細 )]
フィールド内容の全置換[ダイアログなし; BD::詳細[2]; RomanHankaku (BD::詳細 )]
~
フィールド内容の全置換[ダイアログなし; BD::詳細[20]; RomanHankaku (BD::詳細 )]
フィールド内容の全置換[ダイアログなし; BD::詳細; Substitute ( BD::詳細; "*" ; "*" )]
フィールド内容の全置換[ダイアログなし; BD::詳細[2]; Substitute ( BD::詳細; "*" ; "*" )]
~
フィールド内容の全置換[ダイアログなし; BD::詳細[20]; Substitute ( BD::詳細; "*" ; "*" )]
レコード/検索条件/ページへ移動/[最初の]
Loop
変数を設定[$title; 値:"pdftest/" & BD::県 & BD::市 & "「" & Substitute ( BD::店名; "¶" ; " " ) & "」.pdf"]
レコードをPDFとして保存 [記憶する;追加;ダイアログなし;「$title.pdf」;現在のレコード]
レコード/検索条件/ページへ移動 [次の; 最後まできたら終了]
End Loop
---
※「~」の部分は、2から20まで続いている記載を省略しています。
【改善したい点】
・複数のファイルを一つにまとめたい。
・繰り返しフィールドの置換の指定を、なるべくまとめたい。
可能であれば、「フィールド内容の全置換」を使用せず、書き出すPDF内にのみ適用させたい。
複数ファイルと
繰り返しフィールド
の意味合いが分りませんが。
PDF保存の前に、
DBのあり方として、とても疑問を感じます。
まず、
データベースの正規化
から考え直した方がいいと思いますよ。
それとは別に、
計算式の考え方
Substitute ( RomanHankaku ( BD::詳細 ) ; "*" ; "*" )
こういうのが可能です。
Offline
Traveller wrote:目的がわかってないけど、PDF保存が「追加」になってるということは、他のファイルにも
同じ千葉県千葉市「千葉店」のデータがあるということですか?
そして別ファイルはいくつもあるのですか。ひとつのファイルに統合できないのですか。基本的には1ページずつ書き出すのですが、中には情報量が多く「千葉店」の情報が2ページに渡っている場合があり、「追加」を設定しました。
ページの指定はできません。レコードです。
「追加」にしないでも、1つのステップで「現在の(1)レコード」を保存するんで、それのページ数が何ページでも1つのPDFができます。
「追加」にすると、同じファイル名になるレコードが複数ある場合に、それも1つのPDFになります。
保存先を空にしないで実行すると、同じ内容を何回も「追加」してしまうこともあり得る...
Pages: 1
[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 582.49 KiB (Peak: 619.4 KiB) ]