none
VBからEXCELアプリケーションを起動しようとするとエラーになる RRS feed

  • 質問

  • 同様の質問をいくつか拝見しましたが、環境が違うため別の質問として上げさせていただきます

    Dim xlsApp As New Excel.Application

    Dim xlsBooks As Excel.Workbooks = xlsApp.Workbooks.Add

    2行目でエラーとなり下記メッセージが表示されます

    型 'Microsoft.Office.Interop.Excel.ApplicationClass'のCOMオブジェクトをインターフェイス型 'Microsoft.Office.Interop.Excel._Application'にキャストできません。IID'{000208D5-0000-0000-C000-000000000046}'

    Microsoft.Office.Interop.Excelのバージョンは15.0でレジストリ{00020813-0000-0000-C000-000000000046}配下の1.8フォルダを削除するとビルドエラーとなりました。ちなみに1.8以外のフォルダはありません

    職場の環境で全端末にJUST CALCがインストールされており、開発環境のみEXCEL2013をインストールしています。

    EXCELの無い端末で動作するアプリの開発製造を行っているのですが、解決方法がお分かりの方、ご教授願います

    環境

    Win7 Pro SP1 32bit

    VS2015:Ver.14.0.23107.0 D14REL

    Framework:Ver.4.6.00081

    Excel 2013 Ver:15.0.4569.1504 MSO:15.0.4569.1506 32Bit

    Just Calc 3 Ver:3.0.1


    2017年6月6日 2:57

回答

  • この Excel の COM を使う方法は実行環境に Excel がインストールされていないと使えません。
    Excel がないところで動かすことが必須であれば、Excel の COM を使わずに作ってください。
    (必須条件ではないのであれぱ、実行環境に Excel をインストールすることで解決すると思います)

    解決策はいろいろとあると思いますが、要求、前提・制約が明らかではないので何とも言いづらいですね。
    (サードパーティーの有償のコンポーネントを採用するなど)


    2017年6月6日 3:24
    モデレータ
  • 『New Excel.Application』する方法は、実行環境にインストール済みの Excel をオートメーション操作するためのものです。

    Excel を追加購入できない場合は、『Excel を使わずに Excel 文書ファイルを構築可能なライブラリ』への置き換えが必要ですが、コードは書き直しになりますね。ライブラリとしては、無償で使える EPPlus、NPOI、ClosedXML などが有名ですが、有償製品がよければ SpreadsheetGear や ExcelCreator などがあります。

    http://note.websmil.com/category/vb/epplus/page/3

    http://note.websmil.com/category/vb/npoi/page/3

    http://note.websmil.com/category/vb/closedxml/page/2

    2017年6月6日 7:53
  • この拡張機能は、現在インストール済みの製品にはインストールできません。
    ん? Nuget自体をインストールしようとしていますか? Visual Studio 2015であればNugetはもう入っています。メニューからツール>NuGetパッケージマネージャ>NuGetパッケージの管理から、ClosedXMLをインストールして下さい。
    2017年6月7日 0:53
  • 魔界の仮面弁士 様

    早急な回答助かります

    フォローいただいたのは Hongliang さんですよ。(個人的には EPPlus 派だったり)

    nuget はインターネット上からファイルをダウンロードする仕組みなので、「インターネット接続されている環境」上で利用してください(nuget を PowerShell からも呼び出すこともできます)。あるいは、EPPlus.DLL や ClosedXML.dll などをブラウザーで直接ダウンロードするとか。

    <del>ClosedXML 0.75.0</del>
    <del>EPPlus 4.1</del>

    ClosedXML 0.87.1
    EPPlus 4.1.0



    2017年6月7日 1:30
  • nkaz0316 さま よろしく。

    http://nuget.org/nuget.exe

    を使って、パッケージをローカルに取得して、

    https://blogs.msdn.microsoft.com/chack/2012/05/15/nuget/

    を参考にファイルを配置操作して下さい

    2017年6月7日 1:30
  • 確かにEXCELは入っていませんが、JUST CALCはインストールされています

    それではダメという事でしょうか?

    「EXCELは入っていません」という環境であれば、『EXCELアプリケーションを起動しようとするとエラーになる』のは当然でしょうね。

    OLE オートメーション操作に対応した表計算ソフトは幾つかありますが、操作手順は製品ごとに異なります。

    JustSystems 製品の操作については、Web 上で情報を見つけることができませんでした。そもそも外部からの自動操作をサポートしているかどうかすら分かりません。

    Select Case softwareTitle
        Case "Microsoft Excel"
            '複数シート非対応の大昔のバージョンでは、"Excel.Sheet" で
            'ワークブックのインスタンスを示していたが、現行バージョンでは
            'Application→Workbook(s)→Worksheet(s) と辿ることになる
            Dim oApplication As Object = CreateObject("Excel.Application")
            Dim oWorkbooks As Object = oApplication.Workbooks
            Dim oWorkbook As Object = oWorkbooks.Add()
            Dim oWorksheets As Object = oWorkbook.Worksheets
            Dim oWorksheet As Object = oWorksheets(1)
            oApplication.Visible = True
            Dim oCell1 = oWorksheet.Range("A1")
            Dim oCell2 = oWorksheet.Range("A2")
            oCell1.Value = "あいうえお"
            oCell2.Formula = "=1+1"
        Case "OpenOffice Calc", "StarSuite Calc"
            '使用される IA によっては、操作命令が
            'get/setメソッドではなく、プロパティ操作となる可能性もあり
            Dim oServiceManager As Object = CreateObject("com.sun.star.ServiceManager")
            Dim oDesktop As Object = oServiceManager.createInstance("com.sun.star.frame.Desktop")
            Dim oDoc As Object = oDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, New Object(-1) {})
            Dim oSheets As Object = oDoc.getSheets()
            Dim oSheet As Object = oSheets.getByIndex(0)
            Dim oCell1 As Object = oSheet.getCellRangeByName("A1")
            Dim oCell2 As Object = oSheet.getCellRangeByName("A2")
            oCell1.setString("あいうえお")
            oCell2.setFormula("=1+1")
        Case "Lotus 1-2-3"
            'バージョンによって操作に差異あり?
            Dim oDocument As Object = CreateObject("Lotus123.Workbook")
            Dim oApplication = oDocument.Parent ' = oDocument.Application
            oApplication.Visible = True
            Dim oRanges As Object = oApplication.Ranges
            Dim oCell1 As Object = oRanges.Item("A1")
            Dim oCell2 As Object = oRanges.Item("A2")
            oCell1.Contents = "あいうえお"
            oCell1.Contents = "=1+1"
        Case "JUST Calc"
            Throw New NotImplementedException("OLE/COM 操作方法の有無すら不明")
        Case "JusySystem 三四郎", "ジャスト三四六"
            Throw New NotImplementedException("OLE/COM 操作方法の有無すら不明")
        Case Else
            Throw New NotSupportedException()
    End Select
    

    • 回答としてマーク nkaz0316 2017年6月7日 4:41
    2017年6月7日 1:33

すべての返信

  • この Excel の COM を使う方法は実行環境に Excel がインストールされていないと使えません。
    Excel がないところで動かすことが必須であれば、Excel の COM を使わずに作ってください。
    (必須条件ではないのであれぱ、実行環境に Excel をインストールすることで解決すると思います)

    解決策はいろいろとあると思いますが、要求、前提・制約が明らかではないので何とも言いづらいですね。
    (サードパーティーの有償のコンポーネントを採用するなど)


    2017年6月6日 3:24
    モデレータ
  • 『New Excel.Application』する方法は、実行環境にインストール済みの Excel をオートメーション操作するためのものです。

    Excel を追加購入できない場合は、『Excel を使わずに Excel 文書ファイルを構築可能なライブラリ』への置き換えが必要ですが、コードは書き直しになりますね。ライブラリとしては、無償で使える EPPlus、NPOI、ClosedXML などが有名ですが、有償製品がよければ SpreadsheetGear や ExcelCreator などがあります。

    http://note.websmil.com/category/vb/epplus/page/3

    http://note.websmil.com/category/vb/npoi/page/3

    http://note.websmil.com/category/vb/closedxml/page/2

    2017年6月6日 7:53
  • Azulean 様

    早々の回答ありがとうございます

    確かにEXCELは入っていませんが、JUST CALCはインストールされています

    それではダメという事でしょうか?


    • 編集済み nkaz0316 2017年6月7日 0:42
    2017年6月7日 0:05
  • 魔界の仮面弁士 様

    ありがとうございます

    ClosedXMLを使ってみようと思うのですが

    オフラインでインストールする方法をご存知でしょうか?


    • 編集済み nkaz0316 2017年6月7日 0:42
    2017年6月7日 0:20
  • 魔界の仮面弁士 様

    Nugetをダウンロードし、インストールしてみましたが

    インストール失敗のメッセージボックスが表示され

    正常にインストール出来ませんでした。

    この拡張機能は、現在インストール済みの製品にはインストールできません。

    と言われました


    • 編集済み nkaz0316 2017年6月7日 0:42
    2017年6月7日 0:31
  • この拡張機能は、現在インストール済みの製品にはインストールできません。
    ん? Nuget自体をインストールしようとしていますか? Visual Studio 2015であればNugetはもう入っています。メニューからツール>NuGetパッケージマネージャ>NuGetパッケージの管理から、ClosedXMLをインストールして下さい。
    2017年6月7日 0:53
  • 魔界の仮面弁士 様

    早急な回答助かります

    なるほどNuGetは開きましたが左下画面に『エラーが発生しました。再試行』と表示され先に進めません

    エラー詳細を見ると『エラーが発生しました:¥nリモート名を解決できませんでした。:'api.nuget.org'』と表示されますが、これはオフライン端末が原因でしょうか?

    2017年6月7日 1:16
  • そうですね。
    2017年6月7日 1:19
  • 当該端末をオンラインにすることは出来ないのですが、何か解決策はありますか?
    2017年6月7日 1:20
  • https://www.nuget.org/packages/ClosedXML/0.87.1

    上記サイトより最新版のclosedXMLをダウンロードすることは出来ました

    所定の場所にコピーすれば読み込めるのでしょうか?

    2017年6月7日 1:28
  • 魔界の仮面弁士 様

    早急な回答助かります

    フォローいただいたのは Hongliang さんですよ。(個人的には EPPlus 派だったり)

    nuget はインターネット上からファイルをダウンロードする仕組みなので、「インターネット接続されている環境」上で利用してください(nuget を PowerShell からも呼び出すこともできます)。あるいは、EPPlus.DLL や ClosedXML.dll などをブラウザーで直接ダウンロードするとか。

    <del>ClosedXML 0.75.0</del>
    <del>EPPlus 4.1</del>

    ClosedXML 0.87.1
    EPPlus 4.1.0



    2017年6月7日 1:30
  • nkaz0316 さま よろしく。

    http://nuget.org/nuget.exe

    を使って、パッケージをローカルに取得して、

    https://blogs.msdn.microsoft.com/chack/2012/05/15/nuget/

    を参考にファイルを配置操作して下さい

    2017年6月7日 1:30
  • 確かにEXCELは入っていませんが、JUST CALCはインストールされています

    それではダメという事でしょうか?

    「EXCELは入っていません」という環境であれば、『EXCELアプリケーションを起動しようとするとエラーになる』のは当然でしょうね。

    OLE オートメーション操作に対応した表計算ソフトは幾つかありますが、操作手順は製品ごとに異なります。

    JustSystems 製品の操作については、Web 上で情報を見つけることができませんでした。そもそも外部からの自動操作をサポートしているかどうかすら分かりません。

    Select Case softwareTitle
        Case "Microsoft Excel"
            '複数シート非対応の大昔のバージョンでは、"Excel.Sheet" で
            'ワークブックのインスタンスを示していたが、現行バージョンでは
            'Application→Workbook(s)→Worksheet(s) と辿ることになる
            Dim oApplication As Object = CreateObject("Excel.Application")
            Dim oWorkbooks As Object = oApplication.Workbooks
            Dim oWorkbook As Object = oWorkbooks.Add()
            Dim oWorksheets As Object = oWorkbook.Worksheets
            Dim oWorksheet As Object = oWorksheets(1)
            oApplication.Visible = True
            Dim oCell1 = oWorksheet.Range("A1")
            Dim oCell2 = oWorksheet.Range("A2")
            oCell1.Value = "あいうえお"
            oCell2.Formula = "=1+1"
        Case "OpenOffice Calc", "StarSuite Calc"
            '使用される IA によっては、操作命令が
            'get/setメソッドではなく、プロパティ操作となる可能性もあり
            Dim oServiceManager As Object = CreateObject("com.sun.star.ServiceManager")
            Dim oDesktop As Object = oServiceManager.createInstance("com.sun.star.frame.Desktop")
            Dim oDoc As Object = oDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, New Object(-1) {})
            Dim oSheets As Object = oDoc.getSheets()
            Dim oSheet As Object = oSheets.getByIndex(0)
            Dim oCell1 As Object = oSheet.getCellRangeByName("A1")
            Dim oCell2 As Object = oSheet.getCellRangeByName("A2")
            oCell1.setString("あいうえお")
            oCell2.setFormula("=1+1")
        Case "Lotus 1-2-3"
            'バージョンによって操作に差異あり?
            Dim oDocument As Object = CreateObject("Lotus123.Workbook")
            Dim oApplication = oDocument.Parent ' = oDocument.Application
            oApplication.Visible = True
            Dim oRanges As Object = oApplication.Ranges
            Dim oCell1 As Object = oRanges.Item("A1")
            Dim oCell2 As Object = oRanges.Item("A2")
            oCell1.Contents = "あいうえお"
            oCell1.Contents = "=1+1"
        Case "JUST Calc"
            Throw New NotImplementedException("OLE/COM 操作方法の有無すら不明")
        Case "JusySystem 三四郎", "ジャスト三四六"
            Throw New NotImplementedException("OLE/COM 操作方法の有無すら不明")
        Case Else
            Throw New NotSupportedException()
    End Select
    

    • 回答としてマーク nkaz0316 2017年6月7日 4:41
    2017年6月7日 1:33
  • 魔界の仮面弁士 様

    なんと親切な回答を、本当にありがとうございます。

    後学のためにソースを保存し勉強させていただきます。

    先ほどご教授いただいたオフラインでのNuGet.exeからClosedXMLの導入ですが

    少々躓きましたがうまくいきました。Close導入前にOpenのDocumentFormatが必要だったようです(笑)

    お手数をお掛けしました

    ありがとうございました

    2017年6月7日 1:50
  • HongLiang 様

    回答くださった方を間違えていたようで申し訳ありません

    無事インストールできました

    ありがとうございました


    • 編集済み nkaz0316 2017年6月7日 4:35
    2017年6月7日 4:28
  • ShiroYuki_Mot 様

    初めての投稿で、回答いただいた方を間違うという愚行をお許しください(汗;

    回答ありがとうございました、無事インストール出来ました


    2017年6月7日 4:31