« 05.21 やってしまいましたね。 | ココ | 05.24 送信完了 »
2005年5月24日
EXCELでファイルを開く
WindowsXPで、VB .netを用いてPen4-2.6GHz-512MBのマシンを瀕死に追いやりました(爆)。しかも、CPU使用率が2%程度なのに処理が進まない。初めて利用可能物理メモリが2000台になってるのを見たり、コミットチャージが1GBを超えてるのを見たり。そりゃあ、エクセルファイルの内容を500個もメモリにぶち込めばそうもなるか。
Excelでファイルを開く際、VB側でマルチスレッド操作しようとするとある程度スレッド(マシンパワーによりけり、みたい)が立ち上がっているときに反応がなくなります。「メッセージフィルターがビジーです」という意味不明なエラーを吐くんですけど、これで止まってもらっては困る。…と考えた解決法が以下のコード。Do ... Loopで絶えずエラーが消えるまで繰り返してます。
まさにストーカーですね。
ちなみに、ファイルを開くときのみならずブックを増やしたりシートを増やしたりするときにも関係ありそうで、その都度対処しないといけないっぽい。…なんてめんどい。
' Excelのアプリケーションオブジェクト
Private ExcelApp As Excel.Application = New Excel.ApplicationPublic Function OpenExcelFile(ByVal fname As String) As Excel.Workbook
Dim books, max_books As IntegerDo
Try
books = ExcelApp.Workbooks.Count
If max_books < books Then max_books = booksDim xlbook As Excel.Workbook = ExcelApp.Workbooks.Open(fname)
Return xlbook
Catch ex As Exception
Dim nowbooks As IntegerDo
Try
nowbooks = ExcelApp.Workbooks.CountIf nowbooks <= books / 2 Then Exit Do
Catch ex2 As ExceptionEnd Try
Threading.Thread.Sleep(500)
LoopEnd Try
LoopEnd Function
By ただ at 12:49 カテゴリー ; さんぷるライブラリー , PinMarch Samples , VB, VB .net
« 05.21 やってしまいましたね。 |
05月の記事
| 05.24 送信完了 »
トラックバック
このエントリーのトラックバックURL:
http://pinmarch.sakura.ne.jp/mt/mt-tb.cgi/47