みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
FM12,Go12。
ファイル登録(オブジェクトフィールド)
ファイルパス =Get As Text(ファイル登録)
を作成しました。
ファイル登録にファイルをドラックしましたが、ファイルパスには「仕様書.xlsx」だけ表示しパスがないです。
1.ファイルパスは Get As Text では取得出来ないのでしょうか。
2.最終的にはボタンを押すとファイルを登録しているフォルダーを見ることができるようにしたいと思っています。
こちらを検索すると取得したファイルパスを加工してフォルダーを見ると書かれてましたので、ご相談します。
ドラッグではファイルの実体が挿入されて元のファイルとは無関係になるので、ファイル名しか存在しません。
ファイルを挿入で「参照のみ」にすれば取得できますが。。。
ドラッグではファイルの実体が挿入されて元のファイルとは無関係になるので、ファイル名しか存在しません。
ファイルを挿入で「参照のみ」にすれば取得できますが。。。
有難う御座います。
ファイル挿入のためスクリプトを作りました。
指定フィールドへ移動 ファイル登録
格納オプション 参照
表示 ファイル名付きのアイコン
ファイル登録フィールドにパスが二つも表示するようになりました。
file:../../仕様書/A仕様書.xlsx
filewin:/C:/Users/12345/Desktop/仕様書/A仕様書.xlsx
フォルダーを見るために、
filewin:/C:/Users/12345/Desktop/仕様書
を使って「ボタンを押す」とフォルダーを開く方法をご指導願います。
「URLを開く」ステップで指定パスは
file://C:/Users/12345/Desktop/仕様書/
Offline
URLを開く
で
> filewin:/C:/Users/12345/Desktop/仕様書/A仕様書.xlsx
このパスを
file://C:/Users/12345/Desktop/仕様書
こう変えれば、
そのファイルが入っていたフォルダが開くと思いますよ。
変えるのはテキスト関数で計算出来ますね。
Offline
後塵を拝した!!
気取ってみたけどダメか^^;;;
Offline
ちぽ様
はじめまして、横入りすみません。
おべんきょうのために教えてくださいませ。
>URLを開く
>で
>> filewin:/C:/Users/12345/Desktop/仕様書/A仕様書.xlsx
>このパスを
>file://C:/Users/12345/Desktop/仕様書
>こう変えれば、
>そのファイルが入っていたフォルダが開くと思いますよ。
で、私なりにやってみたのですが、
Let([
#szPath=GetAsText ( オブジェクト ); /*相対パスと絶対パス2行表示*/
#zPath=GetValue ( #szPath ; 2 ); /*絶対パスの選択*/
#hPath=Replace ( #zPath ; 1 ; 8 ; "file:" ) /*うぃんの場合、filewin→file*/
];
LeftWords ( #hPath ; 6 ) & "/" /*階層増えたらめんどくさいな*/
)
私のやり方ですと、フォルダ階層が増えたら都度LeftWordsの数字を変更しなくては
いけなくなるので、常に「A仕様書.xlsx」の右から2単語数を引くような感じに
出来るのでしょうか。
Position(テキスト;検索テキスト;先頭文字位置;回数)関数の負の回数利用で、
フォルダ階層数に係らず有効な式、
Let([
#path=GetValue(GetAsText(オブジェクト);2); /*絶対ファイルパスの抽出*/
#pos=Position(#path;"/";Length(#path); -1); /*逆から数えて1つ目の"/"の位置*/
#path=Left(#path;#pos); /*絶対フォルダパスの抽出*/
#path=Substitute(#path; ["filewin";"file"];["filemac";"file"]) /*fileスキーム変換*/
];
#path
)
【タイポミス修正報告】
・#pos=Position(#path;"/";1; -1);
↓
・#pos=Position(#path;"/";Length(#path); -1);
Last edited by Hiro (2017-01-28 23:58:38)
Offline
うわーすごい
Hiroさん、ありがとうございました。
私の頭ではPosition関数の負の回数は出てきませんでした(笑)
そっかぁ、Length関数かぁ・・・。
これが出来たら、
以前Hiroさんが作られたHTAプログラムで
今回のPath階層に新たに任意のフォルダ名を置くことが出来ちゃうのですね。
(https://fm-aid.com/bbs2/viewtopic.php?id=1327)
白地図のようなFile管理で原本と更新フォルダをわけるときに
使えれば・・と思いました。
パスさん、横入りすみませんでした。
> #path=Substitute(#path; ["filewin";"file"];["filemac";"file"])
filewin:/ → file://
filemac:/ → file://
ですね。
Offline
URLを開く
で
> filewin:/C:/Users/12345/Desktop/仕様書/A仕様書.xlsx
このパスを
file://C:/Users/12345/Desktop/仕様書
こう変えれば、
そのファイルが入っていたフォルダが開くと思いますよ。変えるのはテキスト関数で計算出来ますね。
Middle ( フォルダまでのパス ; Position ( フォルダまでのパス ; "filewin" ; 1 ;1 ) ; 50 )
で filewin:/C:/Users/12345/Desktop/仕様書/A仕様書.xlsx までできましたが、
file://C:/Users/12345/Desktop/仕様書 にする方法が分からず困っています・
尚、 Desktop/仕様書 の部分はファイルにより異なります。
又、容量が多くなりそうなので外付HDを購入し、まとめることも検討しています。
外付HDでもファイルパスによるフォルダーを見ることは可能でしょうか。
以上2件、宜しくお願いします。
Hiroさんとチポさんのを組み合わせると
Let([
#path=GetValue(GetAsText(オブジェクトフィールド);2);
#pos=Position(#path;"/";Length(#path); -1);
#path=Left(#path;#pos);
#path=Substitute(#path; ["filewin:";"file:/"];["filemac:";"file:/"])
];
#path
)
かな?
外付けディスクの場合は
file:///Volumes/HD名/フォルダ名/
の形に変換するといいはず。
Offline
外部保存にしたほうがいいかも知れませんね。
drag&dropもできますし。
Offline
外部保存にしたほうがいいかも知れませんね。
drag&dropもできますし。
大変有難う御座います。
先ほどの計算式でフォルダーまでのパスが取得できました。
スクリプト(URLを開く)でフォルダーを開くことも確認できました。
現在はスクリプト(ファイルを挿入)でオブジェクトフィールドにファイルを保存しています。
デスクトップにファイルがある場合はオブジェクトフィールドにdrag&dropしてもダメですが、外付HDであればこのまま出来るのでしょうか。
外付HDが無いために検証できないので。
外部保存というのは外付HDに保存という意味ではありません。
オブジェクトフィールドのデータの格納オプション項目のことです。
ドラグでの挿入は実体保存なので元ファイルとの関係が切れます。
外部保存はFMが指定された場所(外部格納フォルダ)に実体保存しますが
その場所はFMには分かっているのでリンクは切れません。
でも
>尚、 Desktop/仕様書 の部分はファイルにより異なります。
ということですから、外部保存では無い方がいいのかな?
(外部格納フォルダ内が複数のフォルダや階層構成になっていたら外部保存は
逆に面倒と思うので)
でもでも
GOは全く分かりません!が、現在の参照保存だとGOからはフォルダも仕様書も開けないのでは?
また、今のままの場合でもGOからそのフォルダが開けるのかどうかも私には分かりません。
Offline
外部保存というのは外付HDに保存という意味ではありません。
オブジェクトフィールドのデータの格納オプション項目のことです。ドラグでの挿入は実体保存なので元ファイルとの関係が切れます。
外部保存はFMが指定された場所(外部格納フォルダ)に実体保存しますが
その場所はFMには分かっているのでリンクは切れません。
でも
>尚、 Desktop/仕様書 の部分はファイルにより異なります。
ということですから、外部保存では無い方がいいのかな?
(外部格納フォルダ内が複数のフォルダや階層構成になっていたら外部保存は
逆に面倒と思うので)
でもでも
GOは全く分かりません!が、現在の参照保存だとGOからはフォルダも仕様書も開けないのでは?
また、今のままの場合でもGOからそのフォルダが開けるのかどうかも私には分かりません。
外部保存では無い方が良いかも知れません。
フォルダは2階層の予定です。
一番上は「ユーザ情報」で、ファイル(EXCEL、PDF、写真など)はその下のフォルダ「A社170120など」に収納します。
年月と共にフォルダが増えていきますが、やりたい事はボタンを押すとフォルダ「A社170120」が開くことで変わりはありません。
データが多いと外付けHDになるかも知れませんし、将来はサーバを導入すると思います。
であれば、パスはユーザ情報までと、A社170120の二つに分ける。
ボタンを押してフォルダ「A社170120」を開くパスは二つのパスを計算式でつなぐ。
この方法であればフォルダ保存先が変更になっても「ユーザ情報」までのパス変更で済みそうです。
この方法は如何でしょうか。
ユーザ情報・・・・・A社170120
A社170121
B社170120
参照保存ですから、画像ファイルを入れているフォルダを動かすと
リンクが切れて、オブジェクトフィールドは「見つからないファイル」
になって表示されなくなります。
Offline
参照保存ですから、画像ファイルを入れているフォルダを動かすと
リンクが切れて、オブジェクトフィールドは「見つからないファイル」
になって表示されなくなります。
リンクが切れるとのことなのでURLを開くまでのパスを二つに分けて作るのは如何でしょうか。
「URLを開く」フォルダまでのパスを作成するために
file://C:/Users/12345/Desktop/ユーザ情報/A社170120/
ファイル「A仕様書.xlsx」を使って取得したパス
file:../../../ユーザ情報/A社170120/A仕様書.xlsx
filewin:/C:/Users/12345/Desktop/ユーザ情報/A社170120/A仕様書.xlsx
を元に
フォルダまでのパスAとBを作成し
フォルダまでのパスAは入力値の自動化で入力 「file://C:/Users/12345/Desktop/」
フォルダまでのパスBはファイルまでのパスを使って計算式で入力 「ユーザ情報/A社170120/」
フォルダまでのパスA と フォルダまでのパスB を足して 「URLを開く」フォルダまでのパス を作成
この方法であれば外付HDやサーバに移動しても、フォルダまでのパスAの入力値の自動化で入力の値を変更する方法は如何でしょうか。
外付HDやサーバも無いので検証できないのですが。
他方法があれば合わせてご指導願います。
別のいい方法は思い付きませんけど、それでいいのかも。
(仕事でちょっと疲れて・・・)
.xlsxですから画像は元々見えないし関係無いのか。。
Offline
「URLを開く」でフォルダを開く方法で進めたいと思います。
下記パスを元に、一番後ろの/と後ろから二つ目の/の間の「A社170120」を取得するスクリプトを教えて下さい。
色々試しましたが、出来ませんでした。
何度も申し訳ありませんが、お願い致します。
ファイル「A仕様書.xlsx」を使って取得したパス
file:../../../ユーザ情報/A社170120/A仕様書.xlsx
filewin:/C:/Users/12345/Desktop/ユーザ情報/A社170120/A仕様書.xlsx
計算フィールドにして
=Let ( 変数= Substitute ( パス ;"/" ; ¶ ) ; GetValue ( 変数 ; PatternCount ( 変数 ; ¶ ) ) )
Offline
計算フィールドにして
=Let ( 変数= Substitute ( パス ;"/" ; ¶ ) ; GetValue ( 変数 ; PatternCount ( 変数 ; ¶ ) ) )
お蔭様で「A社170120」を取得することができました。
これでフォルダまでのパスを設定することができます。
それにしてもフォルダまでのパスを取得する関数があればこの様な回りくどいことをしなくてもと思うのですが。
有難う御座いました。
Pages: 1
[ Generated in 0.008 seconds, 8 queries executed - Memory usage: 573.38 KiB (Peak: 609.92 KiB) ]