プログラムからExcelを操作したいと

解決


shellken  2006-12-04 08:44:31  No: 97331

VB.NET2005 Express Edition で作った、プログラムからExcelを操作したいと思います。
たとえば、プログラムのButton1をクリックをするとExcelが起動し、Textbox1.textのテキスト
がExcelのシートの指定した場所(たとえばA1)に書き込まれ、保存されるということをした
いと思います。
そこでグーグルなどで検索すると似たようなサンプルファイル(失礼、以下のようなもの)が
出てきます。
しかしこれらのコードを貼り付けて実行しようとしても 
Excel.Application()
System
xlApplication
のところでエラーがでます。

もちろんプロジェクト→参照の追加→COM→Microsoft Excel *.* ObjectLibrary を参照
は行っています。

'===================================================================
' Excel.Application の新しいインスタンスを生成する
    Dim xlApplication As New Excel.Application()

    ' Excel を表示する
    xlApplication.Visible = True

    ' 1000 ミリ秒 (1秒) 待機する
    System.Threading.Thread.Sleep(1000)

    ' Excel を終了する
    xlApplication.Quit()

    ' COM オブジェクトを解放する (正しくは COM オブジェクトを解放する を参照)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApplication)
'===================================================================
何か他にすることがあるのでしょうか。
基本的な質問で申し訳ありません。


shellken  2006-12-04 09:34:54  No: 97332

追加です。

同じようなエラーだと思うのですが以下のコードにおいて
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

Excel.Application
Excel.Workbook
Excel.Worksheet
のところが波線が入り、ビルドできません。

'====================================================================
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '★プロジェクト→参照設定でMicrosoft Excel *.* ObjectLibraryに
        '  チェックを入れておいて下さい。
        On Error Resume Next

        'オブジェクトへの参照を格納する変数を宣言(事前バインディング)
        '事前バインディングを使用すると、プロパティの値を設定または取得
        'するのに必要な時間を大幅に短縮できます
        Dim xlApp As Excel.Application
        Dim xlBook As Excel.Workbook
        Dim xlSheet As Excel.Worksheet

        ' 変数にオブジェクトの参照を代入します。Add メソッドを使って
        ' 新規 workbookとworksheet オブジェクトを作成します。
        xlApp = CreateObject("Excel.Application")
        xlBook = xlApp.Workbooks.Add
        xlSheet = xlBook.Worksheets(1)

        'エクセルを表示します。(表示しなくてもOK)
        xlApp.Visible = True

        ' Excel のセルに値を代入します。
        xlSheet.Cells(1, 1).Value = "12"
        xlSheet.Cells(2, 1).Value = "34"
        ' Formula プロパティを使ってセルに式を挿入します。
        xlSheet.Cells(3, 1).Formula = "=A1+A2" ' "=SUM(A1:A2)"

        ' Worksheet を名前をつけて保存します。
        xlSheet.SaveAs("c:\Temp.xls")

        ' Quit メソッドを使って Excel を終了します。
        xlApp.Quit()

        ' オブジェクトを解放します。
        xlSheet = Nothing
        xlBook = Nothing
        xlApp = Nothing
End Sub


大吉末吉  2006-12-04 19:38:52  No: 97333

shellkenさん  こんにちは。

私の環境(VB2005Express)で、新規のWindowsApplicationを作成して、
「プロジェクト→参照の追加→COM→Microsoft Excel 11.0 ObjectLibrary を参照」を実行してから、
提示さえたコードを貼り付けてみましたが、どちらのコードも、エラーにはなりませんね。

そもそも、
> System
> のところでエラーがでます。
コレ自体おかしいですよ・・・

「プロジェクト」-「xxxのプロパティ」の参照を見ると、参照済の一覧が出てくると思います。
何が表示されていますか?

#「System」とか、「Microsoft Excel *.* ObjectLibrary 」が表示されていますか?


shellken  2006-12-04 22:28:35  No: 97334

Microsoft Excel 11.0 Object Library.COM
Microsoft Office 11.0 Object Library.COM
Microsoft  Visual Basic for Application Extensibility 5.3 .COM
System.NET
大吉末吉さん

System.Data.NET
System.Drawing.NET
System.Windows.Forms.NET
System.Xml.NET
が出てきます。

やはりエラーのままです。


shellken  2006-12-04 22:30:27  No: 97335

上は間違って送信したので改めて。

大吉末吉さんへ

Microsoft Excel 11.0 Object Library.COM
Microsoft Office 11.0 Object Library.COM
Microsoft  Visual Basic for Application Extensibility 5.3 .COM
System.NET
System.Data.NET
System.Drawing.NET
System.Windows.Forms.NET
System.Xml.NET
が出てきます。

やはりエラーのままです。
ローカルにコピーするのところはFalseのままでいいんですよね。


大吉末吉  2006-12-04 23:51:45  No: 97336

> ローカルにコピーするのところはFalseのままでいいんですよね。
私の環境では、最初の3つ(Microsoft〜の3つ)はTrueになっていますが・・・

その他は、同じですね・・・
#新規に作成したプロジェクトですよね?

なんと言うエラーになってます?
「〜は定義されていません」?

それから、念の為確認ですが、そのPCにExcelはインストールされていますよね・・・


shellken  2006-12-05 00:16:44  No: 97337

エラー内容は上記2番目のコードの場合、
型 'Excel.Application' が定義されていません。  
型 'Excel.Workbook' が定義されていません。
型 'Excel.Worksheet' が定義されていません。
です。
  
などです。
新規で作成したプロジェクトです。
新規に上記のコードのみ貼りました。
Excelは2003が入っています。


Blue  2006-12-05 00:50:02  No: 97338

多分これ。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=861029&SiteID=7


大吉末吉  2006-12-05 00:54:50  No: 97339

こういう場合もあるようですが・・・
http://madia.world.coocan.jp/vb/vb_bbs2/200408_04080054.html

> 新規で作成したプロジェクトです
って事は、それは、やっていないですよね?

念の為、オブジェクトブラウザで「excel」を指定して、検索してみてください。
変なクラスがHITしませんか?

また、
> Dim xlApp As Ex

と、(貼り付けではなく)キーボードから途中まで入力した場合、
候補画面が出ると思いますが、「Excel」が表示されますか?

また、
> Dim xlApp As Excel.
まで、入力した場合、どうなりますか?


shellken  2006-12-05 01:37:37  No: 97340

大吉末吉さん。=======================================================

http://madia.world.coocan.jp/vb/vb_bbs2/200408_04080054.html
も参考にしてオブジェクトブラウザの中に
「Excel」と
「Microsoft  Office.Core」
はありました。でもうまくいきません。

>それは、やっていないですよね?
これはどういうことでしょうか?

>念の為、オブジェクトブラウザで「excel」を指定して、
>検索してみてください。
>変なクラスがHITしませんか?

たくさんのクラス?がヒットします。
変なクラスかどうかはよくわかりません。
念のためソリューションエクスプローラの
「参照設定」-「Excel」と
「参照設定」-「Microsoft  Office.Core」を右クリックででる
メニューで削除しもう一度改めてソリューションエクスプローラ
の「参照設定」右クリック-「参照の追加」-「COM」
-「Microsoft  Excel  11.0 Object Library」をダブルクリック
でやってみました。
そうすると、ソリューションエクスプローラの「参照設定」の項目に
「Excel」と「Microsoft  Office.Core」が追加されましたが
症状は治りません。

>Dim xlApp As Ex
>と、(貼り付けではなく)キーボードから途中まで入力した場合、
>候補画面が出ると思いますが、「Excel」が表示されますか?

表示されません。
表示される候補の中にはExcel関係は見あたりません。

>Dim xlApp As Excel.
>まで、入力した場合、どうなりますか?

何も表示されません。
Excel関係の候補自体がないので何もでないと思われます。

Blueさん======================================================
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=861029&SiteID=7
は同じ症状のようですが具体的にどうしたらいいかわかりません。


Blue  2006-12-05 01:54:39  No: 97341

> は同じ症状のようですが具体的にどうしたらいいかわかりません。

Imports Microsoft.Office.Interop

もしくは

Dim xlApp As Microsoft.Office.Interop.Excel.Application
Dim xlBook As Microsoft.Office.Interop.Excel.Workbook



大吉末吉  2006-12-05 01:58:12  No: 97342

> 多分これ。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=861029&SiteID=7

なるほど。

Microsoftが提供する「Office プライマリ相互運用機能アセンブリ」
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/dv_wrcore/html/wrrefofficeprimaryinteropassemblies.asp
がインストールされていれば、

> 〜 AS Microsoft.Office.Interop.Excel.Application
で、

インストールしてなけば、「プロジェクト用の相互運用機能アセンブリが生成され」て、その場合、

> 〜 As Excel.Application
って事なんでしょうね。

私の環境には、インストールされていなかったので、
「方法 : Office のプライマリ相互運用機能アセンブリをインストールする」
http://msdn2.microsoft.com/ja-jp/library/kh3965hw(VS.80).aspx
に従って、「プライマリ相互運用機能アセンブリ」をインストールしてみました。

> 〜 As Excel.Application
では、エラーで、
> 〜 AS Microsoft.Office.Interop.Excel.Application
なら、OKになりました。

#「Imports Microsoft.Office.Interop」を宣言しておけば、
#「Excel.Application」でもOK。

shellken さんの環境にはインストール済みなんでしょうかね?

取り合えず、

> 〜 AS Microsoft.Office.Interop.Excel.Application
にしてみてください。

これでエラーにならないなら、Blueさんの指摘どうりと言うことです。


shellken  2006-12-05 02:10:36  No: 97343

大吉末吉さん、Blueさん
お二人ともすばらしい。ご指摘の通りでした。

〜 AS Microsoft.Office.Interop.Excel.Application
などにしてみるとエラーがなくなりました。
これでやっとVB.NETからExcelが操作できます。
今後、同じエラーに出会った人がこの掲示板のやりとりを見て、
解決することを祈ります。
ありがとうございました。


shellken  2006-12-05 02:49:25  No: 97344

解決チェック入れておきます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加