トップ回答者
VBからEXCELアプリケーションを起動しようとするとエラーになる

質問
-
同様の質問をいくつか拝見しましたが、環境が違うため別の質問として上げさせていただきます
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
回答
-
この Excel の COM を使う方法は実行環境に Excel がインストールされていないと使えません。
Excel がないところで動かすことが必須であれば、Excel の COM を使わずに作ってください。
(必須条件ではないのであれぱ、実行環境に Excel をインストールすることで解決すると思います)解決策はいろいろとあると思いますが、要求、前提・制約が明らかではないので何とも言いづらいですね。
(サードパーティーの有償のコンポーネントを採用するなど)- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年6月6日 7:00
- 編集済み AzuleanMVP, Moderator 2017年6月6日 21:25 改行の調整
- 回答としてマーク nkaz0316 2017年6月7日 4:40
-
『New Excel.Application』する方法は、実行環境にインストール済みの Excel をオートメーション操作するためのものです。
Excel を追加購入できない場合は、『Excel を使わずに Excel 文書ファイルを構築可能なライブラリ』への置き換えが必要ですが、コードは書き直しになりますね。ライブラリとしては、無償で使える EPPlus、NPOI、ClosedXML などが有名ですが、有償製品がよければ SpreadsheetGear や ExcelCreator などがあります。
http://note.websmil.com/category/vb/epplus/page/3
- 回答の候補に設定 AzuleanMVP, Moderator 2017年6月6日 13:37
- 回答としてマーク nkaz0316 2017年6月7日 4:40
-
魔界の仮面弁士 様
早急な回答助かります
フォローいただいたのは Hongliang さんですよ。(個人的には EPPlus 派だったり)
nuget はインターネット上からファイルをダウンロードする仕組みなので、「インターネット接続されている環境」上で利用してください(nuget を PowerShell からも呼び出すこともできます)。あるいは、EPPlus.DLL や ClosedXML.dll などをブラウザーで直接ダウンロードするとか。
<del>ClosedXML 0.75.0</del>
<del>EPPlus 4.1</del>
- 編集済み 魔界の仮面弁士MVP 2017年6月7日 2:04
- 回答としてマーク nkaz0316 2017年6月7日 4:41
-
nkaz0316 さま よろしく。
を使って、パッケージをローカルに取得して、
https://blogs.msdn.microsoft.com/chack/2012/05/15/nuget/
を参考にファイルを配置操作して下さい
- 編集済み ShiroYuki_Mot 2017年6月7日 1:32 リンクをハイパー化
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年6月7日 4:35
- 回答としてマーク nkaz0316 2017年6月7日 4:41
-
確かに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
すべての返信
-
この Excel の COM を使う方法は実行環境に Excel がインストールされていないと使えません。
Excel がないところで動かすことが必須であれば、Excel の COM を使わずに作ってください。
(必須条件ではないのであれぱ、実行環境に Excel をインストールすることで解決すると思います)解決策はいろいろとあると思いますが、要求、前提・制約が明らかではないので何とも言いづらいですね。
(サードパーティーの有償のコンポーネントを採用するなど)- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年6月6日 7:00
- 編集済み AzuleanMVP, Moderator 2017年6月6日 21:25 改行の調整
- 回答としてマーク nkaz0316 2017年6月7日 4:40
-
『New Excel.Application』する方法は、実行環境にインストール済みの Excel をオートメーション操作するためのものです。
Excel を追加購入できない場合は、『Excel を使わずに Excel 文書ファイルを構築可能なライブラリ』への置き換えが必要ですが、コードは書き直しになりますね。ライブラリとしては、無償で使える EPPlus、NPOI、ClosedXML などが有名ですが、有償製品がよければ SpreadsheetGear や ExcelCreator などがあります。
http://note.websmil.com/category/vb/epplus/page/3
- 回答の候補に設定 AzuleanMVP, Moderator 2017年6月6日 13:37
- 回答としてマーク nkaz0316 2017年6月7日 4:40
-
魔界の仮面弁士 様
早急な回答助かります
フォローいただいたのは Hongliang さんですよ。(個人的には EPPlus 派だったり)
nuget はインターネット上からファイルをダウンロードする仕組みなので、「インターネット接続されている環境」上で利用してください(nuget を PowerShell からも呼び出すこともできます)。あるいは、EPPlus.DLL や ClosedXML.dll などをブラウザーで直接ダウンロードするとか。
<del>ClosedXML 0.75.0</del>
<del>EPPlus 4.1</del>
- 編集済み 魔界の仮面弁士MVP 2017年6月7日 2:04
- 回答としてマーク nkaz0316 2017年6月7日 4:41
-
nkaz0316 さま よろしく。
を使って、パッケージをローカルに取得して、
https://blogs.msdn.microsoft.com/chack/2012/05/15/nuget/
を参考にファイルを配置操作して下さい
- 編集済み ShiroYuki_Mot 2017年6月7日 1:32 リンクをハイパー化
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年6月7日 4:35
- 回答としてマーク nkaz0316 2017年6月7日 4:41
-
確かに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