C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 140 を表示中)
■81909 / )  Re[7]: エクセル帳票のエラー
□投稿者/ 遠藤 (6回)-(2016/11/21(Mon) 23:40:56)
魔界の仮面弁士様へ

いつも詳しい回答をこんなに早くいただき、どうもありがとうございます。

> Excel 2013 環境でコンパイルして、Excel 2013 環境で実行 → OK
> Excel 2013 環境でコンパイルして、Excel 2016 環境で実行 → 基本的には動くはず
> Excel 2016 環境でコンパイルして、Excel 2013 環境で実行 → 動くかも知れませんがあまりお奨めしません
> Excel 2016 環境でコンパイルして、Excel 2016 環境で実行 → OK
>
>
> どうしても、COM インターフェイスのバージョン依存性をクリアできない場合は、
> 参照設定を用いず、Dim xlApp As Object = CreateObject("Excel.Application")
> などとして、いわゆる「レイトバインド」で呼び出す手法もあります。
> デメリットも多いので、手放しでお奨めはできませんけれども。

こちらは最終手段にとっておきます。
お恥ずかしながら、レイトバウンドという方法をまだ理解しておりません。



> また、.NET Framework 4 以降の場合には、コンパイル時に
> 「相互運用型の埋め込み」が True / False のいずれになっているかも
> 確認しておいてください。

確認しておきます。



>>ただし、Office2003のパワーポイントがインストールされていましたのでアンインストールしてみましたが、現象は改善されませんでした。
>
> たまたま旧バージョンが混在している端末があったというだけで、
> すべての PC がそうだというわけでは無いのですよね?

そうですね。少なくとも当該PCはそうだった、というだけで、2台目のPCはそのような環境は未確認です。
(詳細把握しておらず、すみません。お客様側にあるPCで直接確認できない点がございます)



> 異なるバージョンの共存は推奨されていせんが、どうしても Office の複数バージョンを
> インストールしたいのであれば、「リリースされた順」に導入する必要があります。
> https://support.office.com/ja-JP/article/6ebb44ce-18a3-43f9-a187-b78c513788bf
>
> もし、後から古いバージョンを導入してしまっていた場合、古いバージョンの
> アンインストールと、最新版の修復セットアップを実施することで
> 復元されるケースもありますが、確実ではありません。たとえアンインストールを
> 実施したとしても、依存ファイルのバージョンやレジストリの不整合が残ってしまう
> 可能性を捨て切ることができず、修復箇所の調査が困難になりがちです。
>
> バージョン混在環境において、修復セットアップでも改善しないようであれば、
> 手間なようであっても、OS ごと初期化して最初からインストールし直すことを
> お奨めしています。その方が結果的に原因の切り分けが早く済むことが多いので…。
>
> クリーンインストールで解決するならそれで良いわけですし、仮に
> クリーンインストールしても問題が継続していたとしても、それならそれで
> バージョン依存の問題では無いということが明確になりますからね。

最終的にクリーンインストールもしてもらえるように進めてみます。
まずは「最新版の修復セットアップ」をしてみます。



> 一応、参考資料としてこんなものも。
> http://yutakyunmnote.blogspot.jp/2012/09/cexcelwordcominvaildcastexception.html
> http://stackoverflow.com/questions/28066719/unable-to-cast-com-object-of-type-microsoft-office-interop-excel-applicationcla

上のページのエラーメッセージがワードのことですが酷似しています。
エクセル関連のレジストリ「HKEY_CLASSES_ROOT\TypeLib\{00020813-0000-0000-C000-000000000046}」の調査は「1.8 → Excel 2013(15.0)」でした。
エクセル2016環境でコンパイルしたプログラムは私の自宅にあるエクセル2013環境でも動作しました。

レジストリの画面コピーを送ってもらい確認しましたが、オフィス2003のレジストリが残っている状態には見えませんでした。
レジストリからは消えているかもしれませんので、繰り返しになりますが「「最新版の修復セットアップ」をしてもらいます。



>>ネットワーク関連の設定がこの問題に影響することなどはありますでしょうか?
> 可能性としては低い気がします。とはいえ、無いと言いきるだけの根拠もありません。
>
> 既存環境をクリーンインストールしなおすことが困難で、かつ、
> もしも本当に、拠点Aと拠点Bの違いがネットワークだけの問題であるのなら、
> 同等の環境を仮想化環境上で再構築し、追調査してみては如何でしょうか。

そうですよね。エクセルなので、ネットワークやウイルス対策系ではなさそうですよね。
拠点で共通の動きなので、F/Wなども考えたのですが、エクセルだから違うかなと私も思いました。
オフィス単独で起動はするので、MSの認証系に絡む問題でもなさそうでした。
仮想環境化して調査できるか確認してみます。
また、当該PCを他の場所に移動できるのであれば、どういう結果になるかも見てみます。

大変お手数をおかけしておりますが、上記の結果をまたご報告させていただきます。

下に記載いただいな内容も勉強になります。ありがとうございます。
技術者として、魔界の仮面弁士様のスキルと情報力の博識ぶりに、脱帽しています。
こんなすごい方ってどのような仕事をさせているのかな、と気になっています(笑)




> >> 「Microsoft.Office.Interop.Excel.ApplicationClass' の COM オブジェクトをインターフェイス型 'Microsoft.Office.Interop.Excel._Application' にキャストできません。」
>
> 『Application オブジェクト』は、バージョンごとに差異があります。
> 変更されたメンバーや追加されたメンバーもありますので、バージョン混在で
> 正しく動作するように作りこむには、それなりの調査力と検証工数が必要です。
>
> 当方は Excel 2016 を調達していないので、2013 との違いは把握していませんが、
> たとえば 2007 → 2010 → 2013 だけみても、これだけの改変があります。
>
>
>
> =================
> 2010 → 2013 における Excel.Application オブジェクトの仕様変更
> -----------------
> 下記のメンバーに不可視属性が付与されました
>  ・DispId(&H49c) : EnableAnimations プロパティ
>  ・DispId(&H0d4) : SaveWorkspace メソッド
>  ・DispId(&H70f) : ShowWindowsInTaskbar プロパティ
>  ・DispId(&Hae2) : SaveISO8601Dates プロパティ
> 下記のメンバーが追加されました
>  ・DispId(&Hbb2) : ShowQuickAnalysis プロパティ
>  ・DispId(&Hbb3) : QuickAnalysis プロパティ
>  ・DispId(&Hbb4) : FlashFill プロパティ
>  ・DispId(&Hbb5) : EnableMacroAnimations プロパティ
>  ・DispId(&Hbb6) : ChartDataPointTrack プロパティ
>  ・DispId(&Hbb7) : FlashFillMode プロパティ
>  ・DispId(&Hbb8) : MergeInstances プロパティ
>  ・DispId(&Hc56) : EnableCheckFileExtensions プロパティ
>
>
> =================
> 2007 → 2010 における Excel.Application オブジェクトの仕様変更
> -----------------
> 下記のメンバーに不可視属性が付与されました
>  ・DispId(&H59e) : Assistant プロパティ
> 下記のメンバーのシグネチャが変更されました
>  ・MacroOptions メソッド
>   ・2007 の場合
>    ・引数10個なメソッドとして実装されています
>    ・引数10個版の DispId は &Hf46f、メソッド名は "MacroOptions" です
>   ・2010 の場合
>    ・引数11個版が追加され、引数10個版には不可視属性が付与されました
>    ・引数10個版の DispId は &H46f、COM でのメソッド名は "_MacroOptions"、PIA では "MacroOptions" です
>    ・引数11個版の DispId は &Had2、COM でのメソッド名は "MacroOptions"、PIA では "MacroOptions2" です
> 下記のメンバーが追加されました
>  ・DispId(&Had0) : FileExportConverters プロパティ
>  ・DispId(&Had4) : SmartArtLayouts プロパティ
>  ・DispId(&Had5) : SmartArtQuickStyles プロパティ
>  ・DispId(&Had6) : SmartArtColors プロパティ
>  ・DispId(&Had7) : AddIns2 プロパティ
>  ・DispId(&Had8) : PrintCommunication プロパティ
>  ・DispId(&Had2) : MacroOptions メソッド(※上記シグネチャ変更を参照)
>  ・DispId(&Hada) : UseClusterConnector プロパティ
>  ・DispId(&Hadb) : ClusterConnector プロパティ
>  ・DispId(&Hadc) : Quitting プロパティ
>  ・DispId(&Hadd) : Dummy22 プロパティ
>  ・DispId(&Hade) : Dummy23 プロパティ
>  ・DispId(&Hadf) : ProtectedViewWindows プロパティ
>  ・DispId(&Hae0) : ActiveProtectedViewWindow プロパティ
>  ・DispId(&Hae1) : IsSandboxed プロパティ
>  ・DispId(&Hae2) : SaveISO8601Dates プロパティ
>  ・DispId(&Hae3) : HinstancePtr プロパティ
>  ・DispId(&Hae4) : FileValidation プロパティ
>  ・DispId(&Hae5) : FileValidationPivot プロパティ
> 状況依存ヘルプのコンテキストIDが前面的に刷新されました
返信 編集キー/


管理者用

- Child Tree -