Skip to main content
Announcements
Global Transformation Awards! Applications are now open. Submit Entry
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

シート名が固定ではないExcelファイルからのLoad

社外から毎月提供してもらっている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接続すればテーブル名(シート)を取得できるようなのですが

シンプルなロード文にしたいので、上記でできないかと考えております。

よろしくお願いします。

1 Solution

Accepted Solutions
Not applicable
Author

こんにちは。

  『シートが常に一つ』であれば、

   『table is @1』を削除すれば実現出来ませんか?

View solution in original post

5 Replies
hka
Employee
Employee

残念ながら、xlsxはドライバ経由でしか対応できないようです。

Not applicable
Author

ありがとうございます。

やはりそうですか。

ファイル名は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

Not applicable
Author

こんにちは。

  『シートが常に一つ』であれば、

   『table is @1』を削除すれば実現出来ませんか?

Not applicable
Author

ありがとうございます。

試した所、xlsでもxlsxでも、「table is ~」の削除で対応できました。

日本語/英語のドキュメントを調べたり海外のコミュニティを調べても見つかりませんでした。

この当たりの情報が、製品のヘルプに記載がないのは不親切ですね。

Not applicable
Author

蛇足ですが、()を全て無くすとcsvとして判断されるようです。

ヘルプの記載については、ideas?に挙げるしかなさそうですね。