Qlik Community

Qlik Japan

Qlik Communityの日本語のグループです。 Qlik製品に関する日本語資料のダウンロードや質問を日本語で投稿することができます。質問に関する回答は基本的に日本語で行われます。 日本語資料はグループにJoinしなくてもダウンロード可能ですが、 質問を投稿したい場合は、CommunityへのログインをしてグループにJoin Requestを行って下さい。 承認を受けた後に質問を投稿することが可能になります。 ログインはQlikIDを登録してください。

yumy1945
New Contributor II

Qlikviewに取り込んだエクセルファイルのシート名取得について

お世話になります。

Qlikviewでエクセルファイルを取り込み、ファイル名とシート名を項目として取得をしたいです。

ファイル名はFilename()でいけるのですが、シート名の取得方法がわかりません。

ご教授頂ければと思います。

よろしくお願いします。

Tags (1)
6 Replies
Employee
Employee

Re: Qlikviewに取り込んだエクセルファイルのシート名取得について

kentaroWakamatsu
Contributor

Re: Qlikviewに取り込んだエクセルファイルのシート名取得について

QV内の関数のみで取得する場合は、取り込みタイミング等、限定される状況がありそうですが、以下のような方法をとれば取得可能なケースはあります。

 

//サンプル:::::::::::::::::::::::::::
//テーブル名は記述せずに取得します。これによりQV側が自動的にシート名をテーブル名にします。
NoConcatenate
LOAD 項目A,
項目B
FROM
[サンプルファイル.xlsx]
(ooxml, embedded labels, table is テーブルA);
//NoOfTables関数で取得した取得済みテーブル数を使って、最後に取得したテーブル名を取得します。
LET V_TableName = chr(91)&TableName(NoOfTables()-1)&chr(93);
//変数に入れたテーブル名をJOINします。
Left Join ($(V_TableName))
LOAD '$(V_TableName)' as シート名A
AutoGenerate(1);

 

添付ファイルでは、テーブルA、テーブルB、テーブルC、テーブルDを読み込んで、同一レイアウトのテーブルB、CやResident句で再読込したときにきちんと動作するか確認してみたのですが、本来テーブルDとなるはずのテーブル名が正しく取得できていませんでした。

以上のように、スクリプトの配置箇所によっては問題が発生する可能性があるので、ご注意下さい。

 

 

kentaroWakamatsu
Contributor

Re: Qlikviewに取り込んだエクセルファイルのシート名取得について

該当ファイル取り込み前にODBC接続してSQLTABLESステートメントでシート名を取り出しておいて、このシート名を利用してデータを取り込むようにすれば、シート名とひもづける事ができました。

//サンプル  ::::::::::::::::::::::::::::::::::::::::::::::::::

ODBC CONNECT32 TO [Excel Files;DBQ=C:\Users\............\サンプルファイル.xls]; //ファイルのフルパスを入れてください

TEMP:
SQLTABLES;

LET V_Rows = NoOfRows('TEMP');

FOR i = 1 to $(V_Rows)
LET V_SheetName = Peek('TABLE_NAME',$(i)-1,'TEMP');
LET V_TableName = chr(91)&PurgeChar('$(V_SheetName)','$')&chr(93);

$(V_TableName):
LOAD *,
TextBetween('$(V_TableName)',chr(91),chr(93)) as シート名
FROM
[C:\Users\...............\サンプルファイル.xls] //ファイルのフルパスを入れてください
(biff, embedded labels, table is '$(V_SheetName)');
NEXT

DROP Fields DATA_SOURCE, REMARKS, TABLE_CAT, TABLE_NAME, TABLE_SCHEM, TABLE_TYPE;

 

//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

'TEMP:' と 'SQLTABLES;' の記述行にエラーのラインが表示されますが、これは気にしなくても大丈夫です。

yumy1945
New Contributor II

Re: Qlikviewに取り込んだエクセルファイルのシート名取得について

情報ありがとうございました。
やはりODBC接続する手法しかないようですね。
yumy1945
New Contributor II

Re: Qlikviewに取り込んだエクセルファイルのシート名取得について

ありがとうございました。
シートが大量にあるため、頂いた手法では取得したい状況とは異なる結果が出てしまいました。
ただ今後も使えそうな構文のため参考にさせて頂きます。
Highlighted
yumy1945
New Contributor II

Re: Qlikviewに取り込んだエクセルファイルのシート名取得について

ありがとうございました。
エクセルをODBC接続で全シートをループさせてシート名を取得するという方法をとっていたのですが、若干時間が掛かるためなんとか関数のみでできないかと考えておりました。
やはりODBC接続する手法しかないようですね。