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

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

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

Re[6]: Excelが起動できません


(過去ログ 21 を表示中)

[トピック内 15 記事 (1 - 15 表示)]  << 0 >>

■8528 / inTopicNo.1)  Excelが起動できません
  
□投稿者/ あいえす (1回)-(2007/10/02(Tue) 13:54:39)

分類:[.NET 全般] 

VB .NETで
http://jeanne.wankuma.com/tips/vb.net/excel/execute.html
こちらの方法を利用してExcelを起動すると、「Excel.Application」の部分で構文エラーになってしまいます。
New をはずせば構文エラーにならないのですが、実行すると「xlApplication.Visible = True」の行でエラーになってします。

ちなみに、追加したCOMオブジェクトは
・Microsoft Excel 12.0 Object Library(Ver.1.6)
・Microsoft Excel 5.0 オブジェクト ライブラリ(Ver.1.0)
の2つです。

どなたかご教授ください。
よろしくお願いします。
引用返信 編集キー/
■8532 / inTopicNo.2)  Re[1]: Excelが起動できません
□投稿者/ まどか (376回)-(2007/10/02(Tue) 14:56:12)
> ちなみに、追加したCOMオブジェクトは
> ・Microsoft Excel 12.0 Object Library(Ver.1.6)
> ・Microsoft Excel 5.0 オブジェクト ライブラリ(Ver.1.0)
> の2つです。

エラーは名前解決が出来ないというものではないですか?

参照の追加に出るCOMの一覧はインターフェースの一覧、つまりバージョンの一覧です。
Excelライブラリは互換性のあるライブラリですので、上記は同じもの二つ参照している(重複)のと同様です。
アプリケーションが依存するバージョン(アプリケーションの動作要件)を決めて
そのバージョンのみを参照するようにしてください。

引用返信 編集キー/
■8533 / inTopicNo.3)  Re[2]: Excelが起動できません
□投稿者/ あいえす (2回)-(2007/10/02(Tue) 15:54:04)
お返事ありがとうございました。

すいません、エラーの内容を明記していませんでしたね。

構文エラーに関しては
「'New' をインターフェースで使用することはできません。」

xlApplication.Visible = True の行のエラーは
「'System.NullReferenceException' のハンドルされていない例外が test.exe で発生しました。
追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。」

と表示されます。

Excel 2003形式のファイルを使用したいのでMicrosoft Excel 12.0 Object Libraryだけにしたところ、
Excel.Application の構文エラーが
「型 'Excel.Application'が定義されていません。」
となりました。
今度はNew を削除しても構文エラーが解決されません。

Microsoft Excel 5.0 オブジェクト ライブラリだけにした場合は、最初(5.0と12.0の重複)の時と同じエラーが発生します。

ちなみに、使用しているのはOffice 2007です。
何か追加しなければならないものがあるのでしょうか・・・

引用返信 編集キー/
■8534 / inTopicNo.4)  Re[3]: Excelが起動できません
□投稿者/ 魔界の仮面弁士 (440回)-(2007/10/02(Tue) 16:26:04)
No8533 (あいえす さん) に返信
> 構文エラーに関しては
> 「'New' をインターフェースで使用することはできません。」

参照設定が間違っていなければ、一応通るはずなのですけれどね。
とりあえずは、
 'VB
 Dim x As Excel.Application = New Excel.ApplicationClass()

 'C#
 Excel.Application x = new Excel.ApplicationClass();
の構文を用いてみてください。
また、「Microsoft Excel 5.0 オブジェクト ライブラリ(Ver.1.0)」は参照しないでください。

> xlApplication.Visible = True の行のエラーは
> 「'System.NullReferenceException' のハンドルされていない例外が test.exe で発生しました。
xlApplication にインスタンスを渡さず、Nothing のままにしているからでしょう。


> Excel 2003形式のファイルを使用したいので
(Excel 2007形式ではなく)Excel 2003形式を扱いたいのですね?

> Microsoft Excel 12.0 Object Libraryだけにしたところ、
Microsoft Excel 12.0 Object Library (1.6) を参照設定すると、同時に
Microsoft Office 12.0 Object Library (2.4) や
Microsoft Visual Basic for Application Extensibility 5.3 (5.3) が
追加される事がありますが、特に問題が無ければ、これらのライブラリは
そのまま設定しておいてください。
(もっとも、最低限必要なのは、Excel 12.0 のライブラリだけです)


> Excel.Application の構文エラーが
> 「型 'Excel.Application'が定義されていません。」
> となりました。
名前空間をインポートしていますか?
Excel 12.0 ライブラリの場合は『Microsoft.Office.Interop』です。


Imports System.Runtime.InteropServices
Imports Microsoft.Office.Interop
Public Module Module1
 Public Sub Main()
  Dim o As Excel.Application = New Excel.ApplicationClass()
  o.Visible = True
  Dim c As Excel.Workbooks = o.Workbooks
  Dim b As Excel.Workbook = c.Add()
  Marshal.ReleaseComObject(b)
  Marshal.ReleaseComObject(c)
  MsgBox("起動完了", MsgBoxStyle.SystemModal)
  'o.Quit()
  Marshal.ReleaseComObject(o)
 End Sub
End Module


> Microsoft Excel 5.0 オブジェクト ライブラリだけにした場合は、最初(5.0と12.0の重複)の時と同じエラーが発生します。
Excel 5.0 のオブジェクト階層は、現在のそれとは異なります。
(なにぶん、Office 95 より前の、Office 4.2 / 4.3 当時の仕様ですし)
互換性の為に残されているだけでなので、使用しないでください。
引用返信 編集キー/
■8542 / inTopicNo.5)  Re[4]: Excelが起動できません
□投稿者/ あいえす (3回)-(2007/10/02(Tue) 18:29:17)
解決しました!

> 名前空間をインポートしていますか?
> Excel 12.0 ライブラリの場合は『Microsoft.Office.Interop』です。

まさにこれでした。
名前空間について理解していなかったもので・・・

Imports Microsoft.Office.Interop

を追加することで起動することができました。

> Excel 5.0 のオブジェクト階層は、現在のそれとは異なります。
> (なにぶん、Office 95 より前の、Office 4.2 / 4.3 当時の仕様ですし)
> 互換性の為に残されているだけでなので、使用しないでください。

了解しました。
今後は12.0のみを使用するように致します。

最後にひとつだけ質問なのですが、COMオブジェクトを追加した場合は名前空間のインポートが必要なのでしょうか?
通常はCOMオブジェクトを追加すればそのまま(名前空間を指定しなくても)使用できると思っていたのですが・・・
引用返信 編集キー/
■8546 / inTopicNo.6)  Re[5]: Excelが起動できません
□投稿者/ 魔界の仮面弁士 (442回)-(2007/10/02(Tue) 19:18:52)
2007/10/02(Tue) 19:35:51 編集(投稿者)

No8542 (あいえす さん) に返信
> 最後にひとつだけ質問なのですが、COMオブジェクトを追加した場合は名前空間のインポートが必要なのでしょうか?
> 通常はCOMオブジェクトを追加すればそのまま(名前空間を指定しなくても)使用できると思っていたのですが・・・

もしかして、『参照設定』と『名前空間のインポート』を混同していませんか?


たとえば、MessageBox クラスについて、ヘルプ/MSDN ライブラリで解説を読むと、
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.messagebox.aspx
》 名前空間: System.Windows.Forms
》 アセンブリ: System.Windows.Forms (system.windows.forms.dll 内)
と書かれていますよね。

この場合、MessageBox クラスを使うためには、「system.windows.forms.dll」を参照設定する必要があるという事です。
たとえばコンソールアプリでは、通常、この DLL を参照設定していないため、MessageBox を呼び出せませんが、
この DLL を参照することで、MessageBox を呼び出せるようになります。


しかし、参照設定した後で、名前空間のインポートが必要かどうかというのは、また別の話です。

System.Windows.Forms 名前空間のインポートをしていれば、
 MessageBox.Show("TEST")
のように書けるし、インポートしなければ、省略できないというだけであって、
 System.Windows.Forms.MessageBox.Show("TEST")
のような省略しない記述での利用は可能です。


COM の場合も同様で、インポートしなかった場合は、名前空間を省略できなくなるだけなので、
  Dim o As Microsoft.Office.Interop.Excel.Application = New Microsoft.Office.Interop.Excel.ApplicationClass()
のように省略せずに書くことで、インポートせずともコーディングできます。
引用返信 編集キー/
■8554 / inTopicNo.7)  Re[4]: Excelが起動できません
□投稿者/ まどか (377回)-(2007/10/02(Tue) 22:30:24)
No8534 (魔界の仮面弁士 さん) に返信
>  Dim x As Excel.Application = New Excel.ApplicationClass()

そんなのあったっけ?と思いながらオブジェクトブラウザ見てましたが、非表示メンバですか。
一応MSDNでは.NET Frameworkインフラストラクチャで使用するなと書いてあります。
Office2007を触ったことが無いのですが、一般クラスになったのでしょうか?


#スレとは関係ないですが、魔界の仮面弁士さんはOさんだったのですね。たった今知りました。MLのころからお世話になっております。
引用返信 編集キー/
■8561 / inTopicNo.8)  Re[5]: Excelが起動できません
□投稿者/ あいえす (4回)-(2007/10/03(Wed) 00:05:11)
No8534 (魔界の仮面弁士 さん) に返信
> もしかして、『参照設定』と『名前空間のインポート』を混同していませんか?

はい、混同していました。
というより、名前空間についてきちんと理解していませんでした。
『参照設定』と『名前空間のインポート』は、別の話ということですね。
わかりやすく丁寧にお教えいただき、とても勉強になりました!!

魔界の仮面弁士さん、まどかさん、ありがとうございました。

解決済み
引用返信 編集キー/
■8562 / inTopicNo.9)  Re[5]: Excelが起動できません
□投稿者/ 魔界の仮面弁士 (443回)-(2007/10/03(Wed) 01:58:18)
No8554 (まどか さん) に返信
>> Dim x As Excel.Application = New Excel.ApplicationClass()
> そんなのあったっけ?と思いながらオブジェクトブラウザ見てましたが、非表示メンバですか。
> 一応MSDNでは.NET Frameworkインフラストラクチャで使用するなと書いてあります。
> Office2007を触ったことが無いのですが、一般クラスになったのでしょうか?

おぉぅ。そういえば、ほとんど意識した事が無かったです。

KB の [306682] や [321415] では、hogehogeClass の方が使われているようでしたので、
あまり深く考えずに使っていました。(PIA の仕様も含め、きちんと調べておかねば……)


> #スレとは関係ないですが、魔界の仮面弁士さんはOさんだったのですね。たった今知りました。MLのころからお世話になっております。
# どこの ML で何をお世話したのか分かっていなかったり。(汗
## そもそも、どっちの O の事だろう…。(謎
解決済み
引用返信 編集キー/
■8564 / inTopicNo.10)  Re[6]: Excelが起動できません
□投稿者/ まどか (378回)-(2007/10/03(Wed) 09:26:00)
No8562 (魔界の仮面弁士 さん) に返信
> おぉぅ。そういえば、ほとんど意識した事が無かったです。
> KB の [306682] や [321415] では、hogehogeClass の方が使われているようでしたので、
> あまり深く考えずに使っていました。

〜Classでなければならないということではないという結果でよろしいですよね?
[321415]ではClassがくっついているものを使えみたいな事が書いてありますが。>でもその一言だけだし。。。


> ## そもそも、どっちの O の事だろう…。(謎

じゃぁ、名前歴が3つ以上あるということか。私はお名前のほうの O で書きました。
まぁ、お世話になったというかそのころからご存知というか、同じ人と思っていなかったというだけです。m(_ _)m
解決済み
引用返信 編集キー/
■9040 / inTopicNo.11)  Re[4]: Excelが起動できません
□投稿者/ えびえぶ (1回)-(2007/10/17(Wed) 15:17:42)
こんにちは。便乗質問です。あいえすさんと同じようなことをC#でやろうとしているのですが
うまくいきません。
C#でExcel2007をコントロールしようとしているのですが、名前空間の宣言が有効になりません。
やったことは下記になります。

1.VisualStudio.NET 2003で新規プロジェクト→C#クラスライブラリを作成
2.参照の追加で、「Microsoft Excel 12.0 Object Library」を追加
3.プロジェクト作成時に既にあるusing Systemの下に「using Microsoft.Office.Interop;」を追加

クラスの中で、
Microsoft.Office.Interop.Excel.Application aaa = new Microsoft.Office.Interop.Excel.ApplicationClass();
と宣言してビルドするとエラーが出ないのですが、
Excel.Application aaa = new Excel.ApplicationClass();
では、「型または名前空間名"Excel"が見つかりませんでした」と言われます。
足りない処理があるのでしょうか?


引用返信 編集キー/
■9043 / inTopicNo.12)  Re[5]: Excelが起動できません
□投稿者/ 魔界の仮面弁士 (475回)-(2007/10/17(Wed) 15:56:36)
No9040 (えびえぶ さん) に返信
> 足りない処理があるのでしょうか?

using ステートメント(VB でいう Imports)を記述し忘れている、とか。
引用返信 編集キー/
■9044 / inTopicNo.13)  Re[6]: Excelが起動できません
□投稿者/ PATIO (31回)-(2007/10/17(Wed) 16:00:07)
2007/10/17(Wed) 16:01:37 編集(投稿者)

No9043 (魔界の仮面弁士 さん) に返信
> ■No9040 (えびえぶ さん) に返信
>>足りない処理があるのでしょうか?
>
> using ステートメント(VB でいう Imports)を記述し忘れている、とか。

既に
>3.プロジェクト作成時に既にあるusing Systemの下に「using Microsoft.Office.Interop;」を追加
と言う記述があるので記述その物はしているのでは?

まさか、usingが書いてあるファイル以外で使っている?

引用返信 編集キー/
■9045 / inTopicNo.14)  Re[5]: Excelが起動できません
□投稿者/ IIJIMAS (52回)-(2007/10/17(Wed) 16:13:52)
No9040 (えびえぶ さん) に返信

> クラスの中で、
> Microsoft.Office.Interop.Excel.Application aaa = new Microsoft.Office.Interop.Excel.ApplicationClass();
> と宣言してビルドするとエラーが出ないのですが、
> Excel.Application aaa = new Excel.ApplicationClass();
> では、「型または名前空間名"Excel"が見つかりませんでした」と言われます。
> 足りない処理があるのでしょうか?

using Excel = Microsoft.Office.Interop.Excel;
という風に、冒頭のusingディレクティブでエイリアス(別名、略称)指定すればよいと思います。

しなければならない理由は…私には説明できませんが、@ITさんのページに少し説明がありました。
http://www.atmarkit.co.jp/fdotnet/special/vstodev/vstodev_04.html
引用返信 編集キー/
■9047 / inTopicNo.15)  Re[6]: Excelが起動できません
□投稿者/ えびえぶ (2回)-(2007/10/17(Wed) 16:38:39)
みなさんアドバイスありがとうございました。IIJIMASさんの方法で解決しました。

No9045 (IIJIMAS さん) に返信
> ■No9040 (えびえぶ さん) に返信
> using Excel = Microsoft.Office.Interop.Excel;
> という風に、冒頭のusingディレクティブでエイリアス(別名、略称)指定すればよいと思います。

上記の通り、一度エイリアスを指定する必要があるようです。

> しなければならない理由は…私には説明できませんが、@ITさんのページに少し説明がありました。
> http://www.atmarkit.co.jp/fdotnet/special/vstodev/vstodev_04.html

中身を拝見しました。意味はわかるのですが、なぜ「using Microsoft.Office.Interop;」では
駄目なのかが良くわかりませんでした。これは宿題ですね(^^;
みなさんありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -