QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

C#でのExcel出力について

開発環境
OS:WindowsXP Professional
Office2003
Excelのみ2000も入っています。

DataSetに取得した値をExcelに出力するプログラムなんですが、
参照の追加で、「Microsoft Excel 11.0 Object Library」を使用するとOffice2003の入ってる端末では動きますが、Office2000しか入っていない端末では動きません。

「Microsoft Excel 9.0 Object Library」を使用してプログラムを作成した場合は、Office2003だけが入っている端末もOffice2000だけが入っている端末でも動きます。

「Microsoft Excel 9.0 Object Library」を使えばOfficeがどのバージョンでも動作するのか?逆に「Microsoft Excel 11.0 Object Library」だとなぜOffice2000のExcelが動かないのかわかる方がいましたら教えて下さい。

質問者:DEC

回答

間違えて送ってしまいました。

遅延バインディングとはどのようなものなのですか?
知識不足で申し訳ないのですが教えて下さい。
ExcelCreaterについて参考になるサイト等がございましたら
教えていただけないでしょうか?

投稿者:DEC

編集 履歴 (0)

遅延バインディングについては、こちらのスレッドが参考になると思います。

投稿者:Hasumi

編集 履歴 (0)

xxななおxxさん
NAL-6295さん
ご返答ありがとうございます。

投稿者:DEC

編集 履歴 (0)

違ってたらごめんなさ〜い>ALL

プログラムの起動時間を短縮するために、共有ライブラリ内のルーチンは参照時までバインドされません(データ項目は、常にプログラムの起動時にバインドされます)。このように、共有ライブラリ・ルーチンの遅延バインディングによって、プログラムの実行時間にまたがってバインディングのオーバーヘッドが分散され、実行頻度の低い多数の参照が含まれるプログラムの場合は特に有効です。実際には、遅延バインディングはデマンド・ロードと同じことです。

で良いのかな?(HPのサイトに一番わかりやすそうな文章で載っていたので)

投稿者:NAO

編集 履歴 (0)

一つだけ言い忘れた事が・・・

遅延バインディングをC#でやると大変なので、そこだけVB.NETで記述した方が良いです。
で、
遅延バインディング(実行時バインディング)の説明は・・・
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbls7/html/vblrfVBSpec9_8.asp
で、
C#での例は・・・
http://support.microsoft.com/default.aspx?scid=kb;ja;302902
にあります。
ExcelCreatorについては
http://www.adv.co.jp/
です。
_________________「伝える」とは「人に云う」と書く。
http://d.hatena.ne.jp/NAL-6295/

投稿者:NAL-6295

編集 履歴 (0)

問題なければMicrosoft Excel 9.0 Object で、

使用環境をExcel2000以降と明確にされてはどうでしょうか?

または、遅延バインディングで作り直すと良いでしょう。
もしくは、ExcelCreater等サードパーティの製品を利用するように作り変えると良いでしょう。

#予断ですが、DataSetと出力設定を渡したら、Excelのファイルを作成してくれるクラスをライブラリとして作成しておくと楽ですよ。
#同じインターフェースで中身だけCOM用、ExcelCreater用と作っておくと、なお楽です。
_________________「伝える」とは「人に云う」と書く。
http://d.hatena.ne.jp/NAL-6295/

投稿者:NAL-6295

編集 履歴 (0)

普通にExcelをインストールすると、
”Microsoft Excel xx.x Object”は、
Officeのディレクトリの下にきます。

さらに、
Excel2003なら->Microsoft Excel 11.0 Object
Excel2002なら->Microsoft Excel 10.0 Object
Excel2000なら->Microsoft Excel 9.0 Object

なので、普通にExcelそのものの互換を考えれば
Microsoft Excel 9.0 Object は、
Excel2000〜2003で、Excel2000以下では動かないと思いますが、
関数などをパラパラ見てみると、
メソッドプロパティ等も2002,2003で変更がされているものもあるようなので、
完全互換はしているか微妙な感じです。
現状動作している動作をきちんと確認して、
問題なければMicrosoft Excel 9.0 Object で、
使用環境をExcel2000以降と明確にされてはどうでしょうか?

投稿者:xxななおxx

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。