Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
社外から毎月提供してもらっているExcelデータを、特定のフォルダに保存して全てロードしたいのですが
・拡張子がxlsだったりxlsxだったりマチマチで、こちらでコントロールできない
・ファイル内のシートは常にひとつなのですが、シート名が毎回異なる(シート名に処理日時が含まれている)
という条件ですので、フォルダ内にあるxlsとxlsxを別々にLoadする
2つのロード文を下記のように記述しています
(シート名は指定できないので一番目のシートという意味で@1)
Load
・・・・
FROM
[$(vDir)\*.xls]
(biff, embedded labels, table is @1);
Load
・・・・
FROM
[$(vDir)\*.xlsx]
(ooxml, embedded labels, table is @1);
biffの方はうまくいくのですが、ooxmlの方はエラーになります。
ooxmlの方の指定方法をご存じの方はいらっしゃいますでしょうか?
色々調べた所、ODBC接続すればテーブル名(シート)を取得できるようなのですが
シンプルなロード文にしたいので、上記でできないかと考えております。
よろしくお願いします。
残念ながら、xlsxはドライバ経由でしか対応できないようです。
ありがとうございます。
やはりそうですか。
ファイル名はFileListで取得して、個々ののExcelファイルのシート名はODBCドライバ経由で取得することにします。
-----追記------
参考までに下記のようにしました。
vIndex = 0
for each vFile in filelist ('$(vDir)\*.xls*')
OLEDB CONNECT32 TO [Provider=MSDASQL.1;Persist Security Info=False;Data Source=Excel Files;Extended Properties="DSN=Excel Files;DBQ=$(vFile);DriverId=1046;MaxBufferSize=2048;PageTimeout=5;";Initial Catalog=$(vFile)];
Tables:
SQLtables;
Let vWorkSheet = peek('TABLE_NAME',vIndex,'Tables'); //TABLE_NAMEという項目にワークシート名が入っている
明細:
load
...
;
SQL SELECT * FROM [$(vWorkSheet)];
DISCONNECT;
vIndex = $(vIndex) +1
next
こんにちは。
『シートが常に一つ』であれば、
『table is @1』を削除すれば実現出来ませんか?
ありがとうございます。
試した所、xlsでもxlsxでも、「table is ~」の削除で対応できました。
日本語/英語のドキュメントを調べたり海外のコミュニティを調べても見つかりませんでした。
この当たりの情報が、製品のヘルプに記載がないのは不親切ですね。
蛇足ですが、()を全て無くすとcsvとして判断されるようです。
ヘルプの記載については、ideas?に挙げるしかなさそうですね。