■97391 / inTopicNo.1) |
SSIS(スクリプトタスク),MS365でのExcell参照 |
□投稿者/ 大谷刑部 (137回)-(2021/05/07(Fri) 12:02:51)
|
分類:[VB.NET/VB2005 以降]
VSバージョン:2017(SSDT) Office :MS365 Apps For Business
という環境です。 SQLサーバーに定義済みの祝日マスタ(第何、何曜日形式に対応した定義)を実日に変換したうえでExcelの祝日マスタシートに取り込んで、さらにAccessのテーブルにエクスポートするというフローを SSISで組んでいます。 それ自体は作動しているのですが、複数回実行が可能なように、Excel,Accessのレコード全削除フローを追加しようとして、Accessに関してはSQLタスクでDelete実行で実装できましたが、 Excelに関しては、OLEDBプロバイダーの仕様の関係上、Deleteに対応してないため、Accessと同じフローではできず、 ExcelクリアとかのフローもSSIS上に存在しないので、代わりにスクリプトタスク(VB)でロジック組んでみたのですが、 Excel.Aplicationのオブジェクト参照がおかしくなっているようで、該当のExcelファイルを開くWorkbooks.Openメソッドの時点でエラーが発生します。 メッセージとしてはExcel.AplicationClassをExcel.Aplicationにキャストできません的なメッセージが出ていて、確かにデバッグ実行するとExcel.Aplicationオブジェクト変数のプロパティーが全てエラーになってます。
Officeの環境としてはやや特殊でMS365自体は64bit版なんですが、SSISの方が64bit版のASEに対応してない関係で、Office(64bit)をインストールしてからAccess2013 32bitランタイムをインストールして、 SQLServer→Excelは2013用のACEの接続で実装してます。 (2016以降はインストールの時点で32/64bitの混在を許さないようにチェックがかかってるので2013をインストールするしかなかった)
上記のエラーメッセージはSSISでなく通常のVSでプロジェクト(コンソールアプリ)で作り直しても出てしまうので、SSIS固有の原因ではなく、Microsoft.Office.Interopの参照が上手くいってないのがほぼ原因であると推定されます。 SQLServer→Excelの関係上Access2013 32bitランタイム、アンインストールすることはできないんですが、その状態で、レジストリ等をきれいにする方法はあるんですかね? あるいはスクリプトタスク以外でExcelのシートのレコードを空にする。フローをSSISのフローに組み込む手段ってありますか?
ご存知の方、ご回答をお願いします。
|
|