初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2013-10-21 17:44:56

はしもと
Guest

複数のシートがあるエクセルファイルから2つのテーブルにインポートする方法

FM12 win8です。

あるエクセルファイルのデーターをFMで設定している2つのテーブルに一つのスクリプトでインポートしたいのですが、方法をお教えください。


30のエクセルファイルがあります。
エクセルファイルではシートがSheetA,SheetB、SheetC・・・とファイルによりシート数が異なります。
SheetAには、会社名A,会社名B・・・の会社名と担当者、電話番号の基本データーがあります。
SheetB,SheetC・・・には、各会社のシート名で会社ごとの注文部品のデーターとして、部品番号、注文個数のデーターがあります。
30のファイルは、取り扱う部品の分類と会社名が異なります。


FMではテーブルAとテーブルBがあります。テーブルAの会社名でテーブルBと親子のリレーションしております。
テーブルAには、会社名と担当者、電話番号の基本データーを取り込ます。
テーブルBには、注文部品のデーターとして、会社名、部品番号、注文個数のデーターを取り込ます。

これを、ユーザーがスクリプトでエクセルのファイル名とSheetAを選ぶことで、SheetB,SheetC・・・のデーターを取り込みたいのです。

インポートするときに、インポート元とインポート先の設定はインポート順でできるのかなと思いますが、
SheetB、SheetC・・・とする場合は変数で設定しLoopすれば出来そうですが、やり方が全く分かりません。

それぞれのエクセルシートをテーブルA,テーブルBと順番に手入力すればできそうですが、
エクセルSheetBシート名には会社名があるのですが、シート内の列には会社名がなく、手入力が困難です。

説明自体分かりにくいところがあるかもしれませんが、ご教授よろしくお願いいたします。

#2 2013-10-21 18:43:38

yaya
Member

Re: 複数のシートがあるエクセルファイルから2つのテーブルにインポートする方法

シートの選択に変数を使う余地が無いので無理です。

Offline

#3 2013-10-21 19:53:29

wader
Member

Re: 複数のシートがあるエクセルファイルから2つのテーブルにインポートする方法

シート内にデータが入ってないと無理ですよ。(現状はデータの一部がシート名になってる)
エクセルのマクロで、1シート1ファイルに変換したらいいのでは。

Offline

#4 2013-10-21 21:12:43

はしもと
Guest

Re: 複数のシートがあるエクセルファイルから2つのテーブルにインポートする方法

シート名の取得には、先日質問した

[解決] エクセルのシート名を取得 by はしもと
https://fm-aid.com/bbs2/viewtopic.php?id=328

を使ってSheetAに各シートの名前を取得することを考えております(シート名全てを取得可能でした)
各シートの空きスペースにも入力することでシート内にシート名の取得可能ですが、何とかならないでしょうか?

#5 2013-10-21 22:19:47

keima
Member

Re: 複数のシートがあるエクセルファイルから2つのテーブルにインポートする方法

私のおすすめはプラグイン ScriptMakerMS 
https://sites.google.com/site/scriptmak … iptmakerms

ExcelとFileMaker の連携ができる
https://sites.google.com/site/scriptmak … ate_excel2

たとえば
セル:A1 の値を取得  xsl_GetValue_Range("A1")
セル:A1 の値を設定  xsl_SetValue_Range("A1";OpeEx2::argument)

Offline

#6 2013-10-23 00:13:52

qb_dp
Member

Re: 複数のシートがあるエクセルファイルから2つのテーブルにインポートする方法

keimaさん おすすめ!ありがとうございます。作者です。

ExcelとFileMaker の連携ができる
https://sites.google.com/site/scriptmak … ate_excel2

上記を使用する場合は、
フィールド設定 [フィールド; iiil_Eval( "wb.Worksheets(1).name" )]
フィールド設定 [フィールド; iiil_Eval( "wb.Worksheets(2).name" )]
でシート名が取得出来ます。

また、以下の様にすることで、それぞれの Sheet の値を取得出来ます。

Sheet1 の A1 の値を取得
変数を設定 [$er; 値:iiil_Exe( "Set ws=wb.Worksheets(1)" )]
フィールド設定 [フィールド; xsl_GetValue_Range("A1")]

Sheet2 の A1 の値を取得
変数を設定 [$er; 値:iiil_Exe( "Set ws=wb.Worksheets(2)" )]
フィールド設定 [フィールド; xsl_GetValue_Range("A1")]

Offline

#7 2013-10-24 11:06:39

はしもと
Guest

Re: 複数のシートがあるエクセルファイルから2つのテーブルにインポートする方法

回答ありがとうございます。

最初の質問で、シート名が所得出来ればSheetB,SheetCのデーター取得できるでしょうか?

ご教授、よろしくお願いいたします

#8 2013-10-24 18:44:03

keima
Member

Re: 複数のシートがあるエクセルファイルから2つのテーブルにインポートする方法

めんどうなようでも、シート名の列を作り、データを入れておいたほうが後の処理が楽です。
EXCELのデータの右側に1行目(たとえばP列ならP1)に「シート名」2行目(P列ならP2)に下の式を入力。
セルの右下でポイントし マウスポインタが + になったらダブルクリック。さらに適当なところまでドラッグでその計算式をコピーします。
この式ではA行が3セル連続で空白になるとシート名が非表示になります。

EXCELの2行目専用のシート名の式
=IF(AND(A2="",A3="",A4=""),"",RIGHT(CELL("filename",$A$1),LEN(CELL("filename",$A$1))-FIND("]",CELL("filename",$A$1))))

データの取り込みはインポートとプラグインを使う方法があります。シート名が不変ならスクリプトをループでまわせばできます。

Offline

#9 2013-10-24 19:24:19

qb_dp
Member

Re: 複数のシートがあるエクセルファイルから2つのテーブルにインポートする方法

プラグイン使用時のサンプルスクリプトです。データが多い場合は、向きません。

xsl_OperateExcel ( "true" )

xsl_OperateExcel ( "false" )
にするとExcelの表示は、無くなります。



#シート2を対象にする
変数を設定 [$f1; 値:iiil_Exe( "Set ws=wb.Worksheets(2)" )]
#シート2の名前を取得
変数を設定 [$社名; 値:iiil_Eval( "wb.Worksheets(2).name" )]

wb.Worksheets(2)

wb.Worksheets(3) とか wb.Worksheets(4) とかに変更してそれぞれのシートのデータを取得します。


サンプルスクリプト

ウインドウの固定
#新しくExcelを起動。
変数を設定 [$er; 値:xsl_OperateExcel ( "true" )]
#ファイルを開く
変数を設定 [$path; 値:"D:\TEST01.xlsx"]
変数を設定 [$er; 値:xsl_Open ( $path )]
#シート2を対象にする
変数を設定 [$f1; 値:iiil_Exe( "Set ws=wb.Worksheets(2)" )]
#シート2の名前を取得
変数を設定 [$社名; 値:iiil_Eval( "wb.Worksheets(2).name" )]
#セルの値を取得
変数を設定 [$RowIndex; 値:1]
Loop
変数を設定 [$f1; 値:xsl_GetValue_Cells ( $RowIndex ; 1)]
変数を設定 [$f2; 値:xsl_GetValue_Cells ( $RowIndex ; 2)]
変数を設定 [$f3; 値:xsl_GetValue_Cells ( $RowIndex ; 3)]
Exit Loop If [IsEmpty ( $f1 & $f2 & $f3 )]
新規レコード/検索条件
フィールド設定 [sample::会社名; $社名]
フィールド設定 [sample::f1; $f1]
フィールド設定 [sample::f2; $f2]
フィールド設定 [sample::f3; $f3]
変数を設定 [$RowIndex; 値:$RowIndex+1]
End Loop
#WorkBookを閉じる。
変数を設定 [$er; 値:xsl_Close_NoSaved]
#Excelを終了。
変数を設定 [$er; 値:xsl_QuitExcel]

Operate_Excel2
https://sites.google.com/site/scriptmak … 2/download

FileMaker Pro Advancedの場合:
インポート、または、コピー&ペーストで別のファイルでもカスタム関数が利用可能です。

FileMaker Pro の場合:
カスタム関数入のファイル「Operate_Excel2.fmp12(.fp7)」を元にすれば、カスタム関数の利用が可能です。テーブルやスクリプトを削除し、ファイル名もお好きな名前に変更して下さい。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 550.16 KiB (Peak: 571.07 KiB) ]