みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
FM18、Windows10
データをエクスポートしてエクセルで保存したく、例えば2024年1月14日21時15分20秒でしたら、
ファイル名を「20140104211520完了データ」にしたいと考えており、
下記のように設定しました。
出力ファイルパス:$タイムスタンプ
変数を設定
名前:$タイムスタンプ
値:"file:" & Filter ( Get ( タイムスタンプ ) ; "0123456789" ) & " 完了データ .xlsx"
この結果、次のエラー表示が出ました。
→「$日付」をこのディスク上に作成できませんでした。ファイル名を変更、ディスクの空き容量を増加、ロック解除、または他のディスクを使用してください。
ディスクの空き容量やロック解除には問題がないと思いますので、ファイル名に問題があるとは思いますが、
どのように修正したらよいか、教えていただけないでしょうか。
お忙しいところ恐縮ですが、よろしくお願いいたします。
$タイムスタンプ 変数の中身を見てみましょう。データビューワーを使い、デバッガーでステップ動作させるか、一時的にグローバル変数などに保存してみるといいです。
Offline
Shin様
ありがとうございます。
①データビューワーを使ってみました。
式に「"file:" & Filter ( Get ( タイムスタンプ ) ; "0123456789" ) & " 完了データ .xlsx"」を入力したところ、
結果は「file:20240114211520 完了データ .xlsx」となりました。(時間は当初の例のとおりとしております。)
②グローバル変数としてみました。
変数を設定の 名前:$タイムスタンプ を $$タイムスタンプ へ変更しましたが、同じく次のエラー表示が出ました。
→「$タイムスタンプ」をこのディスク上に作成できませんでした。ファイル名を変更、ディスクの空き容量を増加、ロック解除、または他のディスクを使用してください。
データビューワーを使用するのも初めてであり、私の知識ではどこに問題があるか分かりかねます。
お手数ですが、ご教授いただけますと幸いです
Shin様
ありがとうございます。
パスタイプは「相対パス」で、ファイルパスは「file」という理解ですが…
ヘルプも何度も読みましたが、どこに問題があるか全く分からず、困り果てています。
なお、スクリプトは次のようになっております。
1 レコードのエクスポート[ダイアログあり:オフ;フォルダー作成:オフ;「$タイムスタンプ」;Unicode16(UTF-16)]
2 変数を設定[タイムスタンプ;値:"file:" & Filter ( Get ( タイムスタンプ ) ; "0123456789" ) & " 完了データ .xlsx"]
また、念のため、下記を試してみました。
①出力ファイルパスを「file:完了データ.xlsx」とした場合は、完了データという名称のエクセルファイルが予想通り出力されます。
②出力ファイルパスを「$タイムスタンプ」として、変数の設定の 名前:「$タイムスタンプ」 値:「”file:完了データ.xlsx”」とした場合は、上記と同様のエラー表示となります。(・・・ファイル名を変更、・・・)
本当にお忙しいところ申し訳ありませんが、ご教授いただけますと幸いです。
スクリプトの順が逆です。
まず、
変数を設定して、
その変数を使ってファイルパスを作製
この手順ですよ。
Offline
先に変数を設定しましょう。
また、相対パスで指定すると、現在のデータベースを同じディレクトリーへ保存されるので、スタンドアロンで検証しているときにはいいのですが、実運用になると同じディレクトリーにデータベースの実体ファイルがあるとなにかと危険かと思います。できれば、デスクトップとか書類フォルダーとかに保存される方がいいのでは。
Offline
チポ様、Shin様
スクリプトの1と2を逆にしたら、出来ました。
本当にありがとうございました。
確かに考えると逆ですよね。思い込みは怖いですね。
再開してすみません。
当初は、ファイルメーカー本体と同じ場所に保管しようと考えていたのですが、やはり見にくくなるため、保管場所を変更したいと思いました。
保管したい場所は次のとおりです。
C:\Users\ユーザー名\Desktop\FM\完了データ\年月
(ユーザー名は半角英字で複数のパソコン利用、年月は202401等エクスポート時点の年月)
そこで、下記のように設定しましたが、次のエラー表示が出ました。
→「20240114211520 完了データ .xlsx」をこのディスク上に作成できませんでした。ファイル名を変更、ディスクの空き容量を増加、ロック解除、または他のディスクを使用してください。
名前:$タイムスタンプ
値:"file:" & Get ( デスクトップパス ) & "/FM/完了データ/" & Left ( Filter(Get(タイムスタンプ);(1234567890));6) & "/" & Filter(Get(タイムスタンプ);(1234567890)) & "完了データ.xlsx"
お忙しいところ恐縮ですが、教えていただけないでしょうか。
よろしくお願いいたします。
$タイムスタンプ 変数の中身を見てみましょう。
Offline
Shin様
ありがとうございます。
データビューワーを使い、見てみました。
式:"file:" & Get ( デスクトップパス ) & "FM/完了データ/" & Left ( Filter(Get(タイムスタンプ);(1234567890));6) & "/" & Filter(Get(タイムスタンプ);(1234567890)) & "完了データ.xlsx"
値:file:/C:/Users/ユーザー名/Desktop/FM/完了データ/202401/20240114211520完了データ.xlsx
となりました。どこが問題か分かりませんでした。
比較のため、ファイル名について、計算式を使わず次のとおり 202401 としたら、202401フォルダーの中に無事エクスポートされました。
式:"file:" & Get ( デスクトップパス ) & "FM/完了データ/202401/" & Filter(Get(タイムスタンプ);(1234567890)) & "完了データ.xlsx"
データビューワーで見ると、値は上記と同じでした。
このような結果でしたので、何が問題か分からず困っています。
お手数ですが、ご教授いただけないでしょうか。
質問を見ただけで、検証していません。
間違っていましたらご容赦を。
file:
から始まるのは相対パスで、
それ以降を絶対パスを書いていますよね。
それかも。。
エクスポート先に仮の
.xlsx
を置いておいて、
エクスポートのパス指定でそのファイルを指定すると、
そのパスが分かりますよ。
Offline
今日のタイムスタンプになってないのは変では?
計算式をコピペして実行してみましたが、問題なくエクスポートされました。
「フォルダを作成」のオプションは指定してますか?
フォルダを固定値にしただけでエラーが出ないということは、フォルダのアクセス許可がないとかでもないし、謎ですね。
himadenee様
ありがとうございます。
「フォルダを作成」がオフになっておりまして、オンにしましたら無事エクスポートされました。
なお、今日のタイムスタンプになっていないのは、上の質問の時に例を記載して、その例を引き継いでいるため、再度注意書きをするとややこしくなると思い、敢えて省略しています。
分かりにくくてすみません。
チポ様
ありがとうございます。
そのようなパスの調べ方もあるのですね。勉強になりました。
皆様、お忙しいところご丁寧に教えていただき、本当に感謝しております。
??解決したならいいですが、
>比較のため、ファイル名について、計算式を使わず次のとおり 202401 としたら、202401フォルダーの中に無事エクスポートされました。
この時点でフォルダができてるので、その後で実行すれば「フォルダの作成」オプションは関係ないはずですが...
OSの環境設定によっては、フォルダが202411とかになる可能性はあるのかな。(01月でなく1月)
私のとこでは月には0がついてますが時は09時でなく9時になってました。
相対パス、絶対パス
は関係なかったですね-_-
日付、時刻
のデータとしての値はOSの設定に依存します。
OSによって
01月
1月
と変わることがありますね。
ですから、複数のOSで使う場合は、例えば
Year ( 日付 ) * 10000 + Month ( 日付 ) *100 + Day ( 日付 )
のようにしたほうがいいでしょう。
Offline
チポ様、himadanee様
ありがとうございます。
エラーが出ると困るので、チポ様に教えていただいた方法を検討しました。
また、himadenee様と同様、時間は09時ではなく9時になってしまい、解決方法が見つからず悩んでいたところでした。
そこで、お二人のアドバイスをもとに次のとおり考えましたら、問題なくエクスポートされました。
Year ( Get(日付) ) * 10000000000 + Month ( Get(日付) ) * 100000000 + Day ( Get(日付) ) * 1000000 + Hour ( Get ( 時刻 ) ) * 10000 + Minute ( Get(時刻) ) * 100 + Seconds ( Get(時刻) )
これでよいかと思っていますが、もっとシンプルな方法があれば教えていただけますと幸いです。
Pages: 1
[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 559.39 KiB (Peak: 580.3 KiB) ]