« 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.Application

Public Function OpenExcelFile(ByVal fname As String) As Excel.Workbook
  Dim books, max_books As Integer

  Do
    Try
      books = ExcelApp.Workbooks.Count
      If max_books < books Then max_books = books

      Dim xlbook As Excel.Workbook = ExcelApp.Workbooks.Open(fname)

      Return xlbook

    Catch ex As Exception
      Dim nowbooks As Integer

      Do
        Try
          nowbooks = ExcelApp.Workbooks.Count

          If nowbooks <= books / 2 Then Exit Do
        Catch ex2 As Exception

        End Try

        Threading.Thread.Sleep(500)
      Loop

    End Try
  Loop

End 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