みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
win8 ver11です。
スクリプトでExcelファイルを取込む流れを自動化しているのですが、実はこのファイルは事情があってweb形式で保存されているからなのか
ファイルメーカーに取込めないため(エラーが起きます)一旦、Excelで開いて2003ブック形式(.xls)に保存し直してから作業...と余計な
作業を1つしなければなりません。
何か回避策などありましたら、ご指導ください。
よろしくお願いします。
Offline
サポートしている形式しかインポートできません。
Excel側でマクロを作るとか、標準はxls形式にしておき必要なときにweb形式で保存するとか、では。
Offline
その html ファイルを解析すれば良いかも。
欲しいテーブル内のデータは、<table> タグの中に保存してあるはずですので、それをスタイルシートを書いて読み込むか、テキスト解析してデータを取り込む様な事をしても良いと思いますよ。<table> タグの中は、タグのついた単純なデータの羅列ですので、中間テーブルを作れば、そんなに難しく無いです。
Offline
以下のPowerShellを実行すれば、
「一旦、Excelで開いて2003ブック形式(.xls)に保存」この作業を自動で行なえます。
$F = 'ファイルパス\Book1.mht'
$C = 'ファイルパス\Book1.xlsx'
$E = New-Object -ComObject Excel.Application
$E.Workbooks.open($F)
$E.DisplayAlerts = $false
$W = $E.Worksheets.Item(1)
$W.SaveAs($C,51)
$E.Workbooks.Close()
$E.Quit()
#.xlsx=51,.xls=56
参考:
https://susumushibata.wordpress.com/201 … %E6%8F%9B/
https://excwlvba.blogspot.jp/2013/04/xlfileformat.html
Offline
qb_dpさん、ありがとうございます。
PowerShellはどのPCにも入っているのでしょうか。
使ったことがないので、もう少し詳しく手順をご説明頂けると
たすかります。
よろしくお願いいたします。
Offline
PowerShellは、Windows 7 以降、標準搭載です。
FileMakerから実行するには、
$F = 'ファイルパス\Book1.mht';
$C = 'ファイルパス\Book1.xlsx';
$E = New-Object -ComObject Excel.Application;
$E.Workbooks.open($F);
$E.DisplayAlerts = $false;
$W = $E.Worksheets.Item(1);
$W.SaveAs($C,51);
$E.Workbooks.Close();
$E.Quit();
上記スクリプトを、フィールド名:Script に記述して、以下の様なスクリプトで実行。
変数を設定 [$Script; 値:Quote ( Substitute (フィールド名Script ; ¶ ; "" ) )]
Event を送信 [「aevt」; 「odoc」; "powershell -Command " & $Script ]
Offline
qb_dpさん、大変遅くなりましたが、検証してみました。
結果、躓いています。
引き続きご指導願えればと存じます。
>上記スクリプトを、フィールド名:Script に記述して、
ファイルパスを事前に取得する必要がありますので、ここはスクリプトのフィールド設定で
"$F = '" & $InptFNamePath & "';¶" &
"$C = '" & $InptFNamePath & "';¶" &
"$E = New-Object -ComObject Excel.Application;¶" &
"$E.Workbooks.open($F);¶" &
"$E.DisplayAlerts = $false;¶" &
"$W = $E.Worksheets.Item(1);¶" &
"$W.SaveAs($C,56);¶" &
"$E.Workbooks.Close();¶" &
"$E.Quit();"
とした上で、
変数を設定 [$Script; 値:Quote ( Substitute (フィールド名Script ; ¶ ; "" ) )]
Event を送信 [「aevt」; 「odoc」; "powershell -Command " & $Script ]
としていますが、当該ファイルはまだweb形式のまま。
Excelファイルは拡張子は.xlsですが、中身がweb形式で保存されたもののようで、
.mhtのファイルではないこと、また、$F、$Cが同じファイル名というのが気になりますが
いかがでしょうか。
また、取込むファイルがxlsxとxlsとバラバラなのでこの辺りの分岐も必要に
なりそうです。
よろしくお願いします。
Offline
いろいろと調整しているうちに、動くようになりました。おそらく単なる誤入力です。
お騒がせしました、また、ありがとうございました。
ただ、Event を送信後、powershellが動作しているうちに、FMでは次のステップに進んでしまうので
時間差があります。当方の環境ですと3秒位なのでスクリプトの一時停止で何とかなりそうですが、
環境が変わった場合でも対応できるように、Event の送信の完了を待つことはできなのでしょうか。
Offline
FileMaker 12 以降の場合は、fmpプロトコル を使用して、待つような事が出来ますが、
http://qbxxdp.blogspot.jp/2017/04/filem … e-dir.html
FileMaker 11では、使えません。
プラグインを使用すれば、PowerShellの実行を待つことが出来ます。
ScriptMakerPS | FileMaker Plugin for Windows :
https://sites.google.com/site/scriptmakerps/home
上記プラグインで
変数を設定 [$er; 値:SMPS_Exe( PowerShell Script )]
とすれば、PowerShellの処理が待てます。
Offline
qb_dpさん、ありがとうございます。
Event を送信後の処理は当該ファイルの取込みですので、Loop で取込み続け 対象レコード>0 で抜けるという荒業で
しのげるかな、と思っていますがちょっと強引すぎるでしょうか。
Offline
Pages: 1
[ Generated in 0.009 seconds, 9 queries executed - Memory usage: 522.22 KiB (Peak: 527.13 KiB) ]