Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

データを取り込む行を指定する方法について

Excelで下記の様なファイルが100個あります。

行列番号ABC
1123
2品名個数日付
3ペットボトル12011/7/25
4紙パック12011/7/25
5.........


1行目は不要データなので、2行目の「品名」「個数」「日付」を項目名として、3行目以降のデータをロードしたいのですが、

ロードスクリプトはどのように記述したら良いでしょうか。

Labels (1)
1 Solution

Accepted Solutions
Not applicable
Author

ご返信ありがとうございます。

シート名のところですが、色々と調べたところ、Tableを記述しないと自動的に一番左側のシートのみロードされる

様です。

【参考】

http://qlikviewmaven.blogspot.com/2009_06_01_archive.html

なので、下記のスクリプトで一応シート1枚は読み込めている様なのですが、

Excelの行数とロードスクリプトのログに表示される取得行が異なるので、さらに

検証してみたいと思います。

スクリプト:

     LOAD * FROM C:\QV_test_cep\*.xlsx

     (ooxml, embedded labels, header is 1 lines);

・項目名は全角漢字なので、もし読み込めなかった場合は[]を試してみます。

・デバッグモードの存在は知りませんでした。試してみます。

とても参考になりました。

ありがとうございました。

View solution in original post

4 Replies
qhogehoge
Contributor II
Contributor II

添付のように、Excelから取り込む際のファイルウィザードでヘッダーサイズを2行に指定することで、3行目から取り込むことが出来ます。
スクリプトはこんな感じです。


LOAD 2,
品名,
個数,
日付
FROM
Sample1.xlsx
(ooxml, embedded labels, header is 2 lines, table is Sheet1);


ここで、行列番号のところに定義されている 2 をそのまま取り込むと、数値として扱われず全行に2という数値がロードされてしまいます。そこで下記のように項目名を別名指定します。


LOAD [2] as 行列番号,
品名,
個数,
日付
FROM
Sample1.xlsx
(ooxml, embedded labels, header is 2 lines, table is Sheet1);


ちなみに、同様のファイルが100個あるとのことですが、もしファイル名に法則があって項目名と項目数が全く同じなら、FROM以下を"*"を指定することで一度に複数のExcelファイルから取り込みすることも出来ます。

FROM
Sample*.xlsx
(ooxml, embedded labels, header is 2 lines, table is Sheet1);

Not applicable
Author

ご返信ありがとうございます。
ウィザードで記述されたスクリプトで無事データを取り込むことができました。

(ちなみに例として挙げた表の一番左列はExcelの行番号を表わしたものでしたので、"LOAD 2"の記述は必要ありませんでした。)

ただ、別のExcelファイルを読み込もうとしたところ、

「項目名(品名)が見つかりませんという旨のエラーが発生してロードできなかったり、
(項目名に余分なスペースなどは含まれていませんでしたが)

「ロードスクリプト実行中 ...」の画面のまま表示が変わらなかったり、

(〈閉じる〉ボタンを押すと「シート プロパティ [メイン]」のウィンドウ表示)
と、なかなかうまくいきませんでした。

また、ファイル名は*.xlsxで指定できそうなのですが、

シート名が不規則であることがわかり(アルファベットのみ、又は数字+アルファベット等)
さらに、シートは1枚の場合と、2枚の場合がありましたので、ちょっとお手上げ状態です。

結論として、VBAでAccessのDBにExccelデータをすべて取り込んだ後に、

QlikViewに取り込んだ方が良いかも知れないと考えています。
もし他に良い方法があればぜひアドバイスください。

上記回答は非常に参考になりました。
どうもありがとうございました。

Not applicable
Author

項目名に関しては、大文字小文字区別するので少しでも間違っているとエラーが発生します。

場合によっては、[]でくくってあげる必要があります。

ロードスクリプトがうまくいかない場合は、ロードスクリプトの編集画面のデバッグモードを使用して

ブレークポイントを設けたり、ステップボタンで1行づつ実行したり、ログの内容を確認するのが良いです。

Excelファイルのシート名が不規則な場合はちょっと対応が難しいと思います。

Sheet1$、Sheet2$のように規則性があればforやdo whileを使って対応できる可能性はあると思います。

for文であれば、変数aで回して、シート名のところをSheet$(a)$のような形で変数を代入すればできると思います。

思いますばかりで申し訳ないですが、参考になれば良いのですが。

Not applicable
Author

ご返信ありがとうございます。

シート名のところですが、色々と調べたところ、Tableを記述しないと自動的に一番左側のシートのみロードされる

様です。

【参考】

http://qlikviewmaven.blogspot.com/2009_06_01_archive.html

なので、下記のスクリプトで一応シート1枚は読み込めている様なのですが、

Excelの行数とロードスクリプトのログに表示される取得行が異なるので、さらに

検証してみたいと思います。

スクリプト:

     LOAD * FROM C:\QV_test_cep\*.xlsx

     (ooxml, embedded labels, header is 1 lines);

・項目名は全角漢字なので、もし読み込めなかった場合は[]を試してみます。

・デバッグモードの存在は知りませんでした。試してみます。

とても参考になりました。

ありがとうございました。