none
Excel2019のマイナーバージョンをダウングレードするとMFC経由で呼び出す際にタイプライブラリが読み込めなくなる RRS feed

  • 質問

  • ●環境

    Windows 10 x64 LTSC

    VisualStudio2019

    Office Excel 2019 x64  2011

    上記の環境化から、Excelに対して以下のコマンド(CMD(管理者))を実行し2007に落としました。

    cd %programfiles%\Common Files\Microsoft Shared\ClickToRun
    officec2rclient.exe /update user updatetoversion=16.0.13029.20344 

    その結果、今まで利用できていたMFC経由でExcel画面の起動行うと

    タイプ ライブラリ/DLL の読み込みエラー

    が発生するようになりました。

    この状態で、VisualStudioでコンパイルをしようとすると以下でコンパイルエラーとなります。

    #import <C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE> \

    fatal error C1084: タイプ ライブラリ ファイルを読み取れません。'C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE':タイプ ライブラリ/DLL の読み込みエラー

    ダウングレードを行ったことにより、上記のEXCEL.EXEのパスが存在しなくなった。EXEがなくなった。という可能性を考えて

    確認してみても、存在しております。

    この状態で、その他のバージョン(2012に上げてみた)に変えても問題がないため、アップデートする分には問題ない挙動をしているようです。

    2007は落としすぎかと思ったため、2010,2009の最終バージョンにも変更してみましたがやはり読み込めませんでした。

    読み込めない状態(2007)から再度、自動更新または手動更新(2011指定)でアップデートするとタイプライブラリが読み込めるように戻ります。

    なぜ、2010以下のバージョンにするとタイプライブラリが読み込めなくなるのかが分かりません。

    OLEVIEWでタイプライブラリが未登録なのかと思ったのですが、登録済みですし、Excelのバージョンが埋め込まれているのかと確認しましたが、埋め込んでるようには見えません。

    問題または調査方法などありましたらご教示願いたいです。

    追記)

    元々2007は使えておりました。

    自動更新を止め忘れており、元に戻そうとした際に問題を見つけました

    officeの再インストーラーをmicrosoftのページからDLしても最新でインストールされてしまうため困っているという状況です。




    • 編集済み mogja 2021年1月6日 1:51
    2021年1月5日 7:06

すべての返信

  • mogjaさん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    この問題はExcelバージョンに関連しています。 
    C1084エラーは、excel2019をexcel2011にバックアップするときに生成されました。

    このエラーの原因は、Excelバージョンを交互に使用した後にExcelタイプのライブラリパスが変更されたためだと思います。 
    Excelのバージョンが2010以下の場合、タイプライブラリのパスが変更され、Visual Studioでタイプライブラリが見つからないため、C1084エラーが生成します。 
    たとえば、excel2003のタイプライブラリパスはC:// Program Files // Microsoft Office // Office11 // Excel.exeであり、excel2019のタイプライブラリパスはC:\\ Program Files \ Microsoft Office \ root \ Office16 \EXCEL.EXEです。

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2021年1月11日 1:01
    モデレータ
  • ご回答ありがとうございます。

    すみません、Excel2003とExcel2019の比較ではなく2019内の2011と2009となりますが

    ご回答の認識とあっていますでしょうか?

    その場合、2007でも\で元々動作しており、

    C++のプログラム上は、/ではなく\であるため特に問題ない認識であるため修正方法が検討つかないです。

    よろしくお願いします。

    Excel2019バージョンに関して

    office2019 バージョン

    2021年1月12日 2:27
  • mogjaさん、こんにちは。フォーラムオペレーターのHarukaです。
    ご返信いただきありがとうございます。

    Visual Studioをバージョン2010以下に更新するとタイプライブラリを読み込めず、Visual Studioをバージョン2011または2012に更新するとタイプライブラリをスムーズに読み込める場合は、次の手順を実行することをお勧めします。

    ・指定されたファイルが存在することを確認してください。
    ・指定されたファイルにアクセスするために、適切な権限が設定されていることを確認してください。
    ・コマンドライン構文が、コンパイラコマンドライン構文で概説されているルールに準拠していることを確認してください。
    ・環境変数TMPとTEMPが適切に設定されていること、およびこれらの環境変数が参照するディレクトリにアクセスするための適切な権限があることを確認してください。 
     また、TMPおよびTEMP環境変数によって参照されるドライブに、十分な量の空き領域が含まれていることを確認してください。

    上記の診断を実行した後、クリーンビルドを実行します。

    また、「TlbImp EXCEL.EXE」コマンドを実行して、Excel.exeをExcel.dllにコンパイルすることをお勧めします。

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2021年1月14日 7:52
    モデレータ
  • ありがとうございます。

    ------------

    ・指定されたファイルが存在することを確認してください。
    ・指定されたファイルにアクセスするために、適切な権限が設定されていることを確認してください。
    ・コマンドライン構文が、コンパイラコマンドライン構文で概説されているルールに準拠していることを確認してください。
    ・環境変数TMPとTEMPが適切に設定されていること、およびこれらの環境変数が参照するディレクトリにアクセスするための適切な権限があることを確認してください。 
     また、TMPおよびTEMP環境変数によって参照されるドライブに、十分な量の空き領域が含まれていることを確認してください。

    -----------

    上記に関しては元々問題ない認識でおりますが、何か問題になる要素はございますでしょうか?

    いずれも問題がある場合は、2011,2012に切り替えたときも問題が発生するように感じます。

    Excel.dllに変更を試してみようと思いますが、dllとexeによって何か変わるのでしょうか?

    後使い方を検索してみましたが、TlbImp EXCEL.EXEに指定するオプションに何を指定するだとか

    作成したDLLをどうするのかが良く分かりませんでした。

    • 編集済み mogja 2021年1月18日 4:42
    2021年1月18日 4:14
  • mogjaさん、こんにちは。フォーラムオペレーターのHarukaです。
    ご返信いただきありがとうございます。

    まず、excel.exeを.. \ Microsoft Visual Studio .NET 20XX \ SDK \ v1.1 \ Binディレクトリにコピーします
    .netのツールを使用して、コマンドプロンプトでtlbinpexcel.exeを実行します。

    tlbimp excel.exeを実行した後、excel.dllファイルを取得します。

    このExcel.dllがあれば、Excelのさまざまな操作機能を利用できます。
    C#がこれらのものをどのように使用するかを見てください。
    1.新しいExcelアプリケーションを作成します。
    Application exc = new Application();
    if (exc == null) {
    Console.WriteLine("ERROR: EXCEL couldn't be started");
    return 0;
    }
    

    2.このプロジェクトを表示します。
    exc.set_Visible(0, true);

    3.WorkBooksコレクションを取得します。
    Workbooks workbooks = exc.Workbooks;

    4.新しいワークブックを追加します。
    _Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet, 0);

    5.WorkSheetsコレクションを取得します。
    _Worksheet worksheet = (_Worksheet) sheets.get_Item(1);
    if (worksheet == null) {
    Console.WriteLine ("ERROR in worksheet == null");
    }
    

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2021年1月19日 7:57
    モデレータ
  • V2019開発用CMD を管理者権限で実行してみましたが、できませんでした。

    .. \ Microsoft Visual Studio .NET 20XX \ SDK \ v1.1 \ Bin

    上記のようなパスが見当たらなかったので、Excel.exeをフルパスで実行しました。

    結果、以下となりました。 V2007にした状態で実行しました。

    ----------------------------------------------------------------------------------

    C:\Windows\System32>tlbimp D:\EXCEL.EXE
    Microsoft (R) .NET Framework Type Library to Assembly Converter 4.8.3928.0
    Copyright (C) Microsoft Corporation.  All rights reserved.

    TlbImp : warning TI3001 : Primary interop assembly 'Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=(消しました)' is already registered for type library 'D:\EXCEL.EXE'.
    TlbImp : warning TI3002 : Importing a type library into a platform agnostic assembly.  This can cause errors if the type library is not truly platform agnostic.
    TlbImp : error TI1024 : Cannot load referenced type library. Please specify dependent type libraries using /tlbreference.

    もしくは以下

    TlbImp : warning TI3001 : Primary interop assembly 'Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=(消しました)' is already registered for type library 'D:\EXCEL.EXE'.
    TlbImp : error TI1033 : Cannot find type 'Microsoft.Office.Core.DataPrivacyOptions' in 'Office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=(消しました)'. There could be a mismatch between the referenced assembly and the type library.



    • 編集済み mogja 2021年1月21日 4:23
    2021年1月21日 1:07
  • mogjaさん、こんにちは。フォーラムオペレーターのHarukaです。
    ご返信いただきありがとうございます。

    私のコンピューターでのtlbimp.exeのパスはC:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.8 Toolsであり、ディスクで検索できます。 
    次に、excel.exeをtlbimp.exeのパスにコピーして、「tlbimp EXCEL.exe /out:Excel.dll」と入力します。

    tlbimpに関しては、Microsoft DocのTlbimp.exe (タイプ ライブラリ インポーター) と 方法: 相互運用機能アセンブリをタイプ ライブラリから生成する をご参照いただければと思います。

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2021年1月25日 8:56
    モデレータ
  • ありがとうございます。

    実行してみると、appvisvsubsystems64.dll が見つからないため、コードの実行を続行できません。のメッセージが出るため調査中となります。

    2021年2月2日 5:26
  • import文がついていたので、Native開発と思いますが、だとするとtlbimpでdllを作ってもの使い用がないですね。 importできる環境でできたtlh/tliを持ってきて、直接includeする手もあります。

    jzkey

    2021年2月2日 6:37
  • ありがとうございます。

    その場合、一度作成したtlh/tliをincludeフォルダに配置した後はimportは不要ということでしょうか?


    2021年2月4日 0:56
  • そういうことです。代わりにinclude自体は要ります。

    jzkey

    2021年2月4日 3:15