tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルExcel Objectライブラリについて
記事No368
投稿日: 2003/08/14(Thu) 16:56
投稿者みゆ
[OSのVer]:Windows XP   [VBのVer]:VB.NET  


.NETからExcelのインスタンスを作成し、既存ファイルを開く処理を
XPと2000の両者で実行したいと考えています。
この場合参照先のライブラリをどのように設定すればよいのでしょうか。

今現在、上記処理EXEをXPで作成したため、
Excel 10.0 Objectライブラリを参照しており、2000で起動することができません。
両者で起動可能な参照方法があるのでしょうか。
またはバージョンに無関係に動作するよう作成するにはどうすればよいのでしょうか。

*C#でのコーディング方法もご存知でしたら重ねて教えてください

[ツリー表示へ]
タイトルRe: Excel Objectライブラリについて
記事No371
投稿日: 2003/08/18(Mon) 19:30
投稿者うぉる
[OSのVer]:Windows 2k    [VBのVer]:VB.NET2002

> .NETからExcelのインスタンスを作成し、既存ファイルを開く処理を
> XPと2000の両者で実行したいと考えています。
> この場合参照先のライブラリをどのように設定すればよいのでしょうか。

.NET Frameworkはプラットフォーム依存をなくすための実行環境でもありますので、
OSがWinXPであろうと2kであろうと、違いを考慮する必要はありません。
よって、「ソリューションエクスプローラ」の「参照設定」にライブラリを追加するだけでOKです。

> 今現在、上記処理EXEをXPで作成したため、
> Excel 10.0 Objectライブラリを参照しており、2000で起動することができません。
> 両者で起動可能な参照方法があるのでしょうか。
> またはバージョンに無関係に動作するよう作成するにはどうすればよいのでしょうか。

ビルドを行うとbinフォルダにEXEファイル等ができますよね。
そのEXEだけをコピーされているのでしょうか?
上記の「参照設定」を行えば、必要なライブラリ等がコピーされるので、あとは実行端末に
全てのファイルをXCOPYすれば良いだけですよ。

> *C#でのコーディング方法もご存知でしたら重ねて教えてください

VB.NETが書ければC#も書けると思いますので、あえて書きません。
今回の内容のレベルでは、宣言時の書き方の順序とか、大文字小文字を気をつける程度だしね。

[ツリー表示へ]
タイトルRe: Excel Objectライブラリについて
記事No375
投稿日: 2003/08/20(Wed) 02:00
投稿者魔界の仮面弁士
> .NETからExcelのインスタンスを作成し、既存ファイルを開く処理を
> XPと2000の両者で実行したいと考えています。

これは、Windows XP/2000 ではなく、Excel 2002/2000という事でしょうか?
(注) Office XPに含まれているのは、Excel XPではなく、Excel 2002です。


> *C#でのコーディング方法もご存知でしたら重ねて教えてください
C#は専門外なので、間違っているかも知れませんが……一応回答しておきます。


> この場合参照先のライブラリをどのように設定すればよいのでしょうか。
参照設定せずに、遅延バインディングで利用するという方法があります。
この場合、何通りかの書き方があります。


==== JScript.NET ====
import System;
import System.Windows.Forms;
var O : System.Object = new ActiveXObject('Excel.Application');
O.Visible = true;
MessageBox.Show(O.Version);


==== VB.NET (Option Strict Off) ====
Option Explicit On
Option Strict Off
Imports System
Imports Microsoft.VisualBasic
Module Module1
  Sub Main()
    Dim O As System.Object = CreateObject("Excel.Application")
    O.Visible = True
    MsgBox(O.Version)
  End Sub
End Module


==== VB.NET (CallByName関数) ====
Option Explicit On
Option Strict On
Imports System
Imports Microsoft.VisualBasic
Module Module1
  Sub Main()
    Dim O As System.Object = CreateObject("Excel.Application")
    CallByName(O, "Visible", CallType.Let, True)
    MsgBox(CallByName(O, "Version", CallType.Get))
  End Sub
End Module


==== VB.NET (リフレクション) ====
Option Explicit On
Option Strict On
Imports System
Imports Microsoft.VisualBasic
Module Module1
  Sub Main()
    Dim O As Object = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application"))
    Dim T As Type = O.GetType()
    T.InvokeMember("Visible", Reflection.BindingFlags.SetProperty, Nothing, O, New Object() {True})
    MsgBox(T.InvokeMember("Version", Reflection.BindingFlags.GetProperty, Nothing, O, New Object() {}))
  End Sub
End Module


==== C#.NET ====
using System;
using System.Windows.Forms;
public class CommandLine
{
  public static void Main()
  {
    Object O = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application"));
    Type T = O.GetType();
    T.InvokeMember("Visible", System.Reflection.BindingFlags.SetProperty, null, O, new object[] {true});
    MessageBox.Show(T.InvokeMember("Version", System.Reflection.BindingFlags.GetProperty, null, O, new Object[] {}).ToString());
  }
}

[ツリー表示へ]