- PR -

VB.NetからExcelファイルを読込む

1
投稿者投稿内容
Monkey
会議室デビュー日: 2004/07/21
投稿数: 4
投稿日時: 2005-06-15 16:06
はじまして。

VB.NetからExcelオブジェクトを使ってExcelファイルを読込む
処理をしています。

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
xlApp = CType(CreateObject("Excel.Application"), Excel.Application)
xlBook = CType(xlApp.Workbooks.Open("D:\\TEST.xls", ReadOnly:=True), Excel.Workbook)
xlSheet = CType(xlBook.Worksheets("TESTA"), Excel.Worksheet)


読込んだデータを変数にセット


xlBook.Close()

xlApp = Nothing
xlBook = Nothing
xlSheet = Nothing
GC.Collect()




デバッグでは正常に動きますが、直接プログラムを起動させた時に
下記エラーメッセージを表示します。
*******************************************************
EXCEL.EXE 〜アプリケーションエラー〜

"0x650f44b9"の命令が"0x650f44b9"のメモリを参照しました。
メモリが"read"になることはできませんでした。
*******************************************************

どうやらxlBook.Close()の直前で発生するようです。
それと、読込むExcelデータの件数でもエラー/正常がわかれます。
370件はエラー
360件はOK

このような現象は初めてです。
どなたか知っていらっしゃる方がいたら
教えていただけないでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-06-15 16:56
その前に、GC に頼った解放をしているところを見ると、
「読込んだデータを変数にセット」部分に色々問題がありそうだな、
などと予想してしまいます。
CreateObject などを使う必要もないですし。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Monkey
会議室デビュー日: 2004/07/21
投稿数: 4
投稿日時: 2005-06-15 17:01
よく分からずにGC.Collect() を使っています。
どこかのサンプルにあったので。

Excelオブジェクトを使うのにCreateObjectは必要ないんですか?

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-06-15 17:11
こんにちは、じゃんぬ です。

引用:

よく分からずにGC.Collect() を使っています。
どこかのサンプルにあったので。
Excelオブジェクトを使うのにCreateObjectは必要ないんですか?


ここなんかは、かなり良い見本になると思います。

 .NETからExcelの基本的な操作方法



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Monkey
会議室デビュー日: 2004/07/21
投稿数: 4
投稿日時: 2005-06-16 10:24
教えていただいた処理のように書き直したらあっさり解決してしまいました。
悩んでいたのが嘘のようです。

VB.Netの実践の本にはCreat.Objectを使ってExcelを開くよう書いてあったので
そのまま使っていました。

きちんと開放しなければいけないんですね。

COM オブジェクト?ガベージ コレクション?プロセス?
いまいちピントこない状態なのでこれからもっと勉強します。
ありがとうございます。
Monkey
会議室デビュー日: 2004/07/21
投稿数: 4
投稿日時: 2005-06-16 10:24
教えていただいた処理のように書き直したらあっさり解決してしまいました。
悩んでいたのが嘘のようです。

VB.Netの実践の本にはCreat.Objectを使ってExcelを開くよう書いてあったので
そのまま使っていました。

きちんと開放しなければいけないんですね。

COM オブジェクト?ガベージ コレクション?プロセス?
いまいちピントこない状態なのでこれからもっと勉強します。
ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)