Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Excelで下記の様なファイルが100個あります。
行列番号 | A | B | C |
---|---|---|---|
1 | 1 | 2 | 3 |
2 | 品名 | 個数 | 日付 |
3 | ペットボトル | 1 | 2011/7/25 |
4 | 紙パック | 1 | 2011/7/25 |
5 | ... | ... | ... |
1行目は不要データなので、2行目の「品名」「個数」「日付」を項目名として、3行目以降のデータをロードしたいのですが、
ロードスクリプトはどのように記述したら良いでしょうか。
ご返信ありがとうございます。
シート名のところですが、色々と調べたところ、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);
・項目名は全角漢字なので、もし読み込めなかった場合は[]を試してみます。
・デバッグモードの存在は知りませんでした。試してみます。
とても参考になりました。
ありがとうございました。
添付のように、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);
ご返信ありがとうございます。
ウィザードで記述されたスクリプトで無事データを取り込むことができました。
(ちなみに例として挙げた表の一番左列はExcelの行番号を表わしたものでしたので、"LOAD 2"の記述は必要ありませんでした。)
ただ、別のExcelファイルを読み込もうとしたところ、
「項目名(品名)が見つかりませんという旨のエラーが発生してロードできなかったり、
(項目名に余分なスペースなどは含まれていませんでしたが)
「ロードスクリプト実行中 ...」の画面のまま表示が変わらなかったり、
(〈閉じる〉ボタンを押すと「シート プロパティ [メイン]」のウィンドウ表示)
と、なかなかうまくいきませんでした。
また、ファイル名は*.xlsxで指定できそうなのですが、
シート名が不規則であることがわかり(アルファベットのみ、又は数字+アルファベット等)
さらに、シートは1枚の場合と、2枚の場合がありましたので、ちょっとお手上げ状態です。
結論として、VBAでAccessのDBにExccelデータをすべて取り込んだ後に、
QlikViewに取り込んだ方が良いかも知れないと考えています。
もし他に良い方法があればぜひアドバイスください。
上記回答は非常に参考になりました。
どうもありがとうございました。
項目名に関しては、大文字小文字区別するので少しでも間違っているとエラーが発生します。
場合によっては、[]でくくってあげる必要があります。
ロードスクリプトがうまくいかない場合は、ロードスクリプトの編集画面のデバッグモードを使用して
ブレークポイントを設けたり、ステップボタンで1行づつ実行したり、ログの内容を確認するのが良いです。
Excelファイルのシート名が不規則な場合はちょっと対応が難しいと思います。
Sheet1$、Sheet2$のように規則性があればforやdo whileを使って対応できる可能性はあると思います。
for文であれば、変数aで回して、シート名のところをSheet$(a)$のような形で変数を代入すればできると思います。
思いますばかりで申し訳ないですが、参考になれば良いのですが。
ご返信ありがとうございます。
シート名のところですが、色々と調べたところ、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);
・項目名は全角漢字なので、もし読み込めなかった場合は[]を試してみます。
・デバッグモードの存在は知りませんでした。試してみます。
とても参考になりました。
ありがとうございました。