tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル複数Excelファイル間のデータやりとりについて
記事No6839
投稿日: 2008/01/17(Thu) 14:05
投稿者おたか
再びExcel関係で質問させて頂きます。

今VB2005にて描画ソフトを作っております。
座標点を保存しなくてはならないのですが、非常に座標点が多いので、
csvファイル(Excel2003)に座標点を保存しています。
また複数のファイル間で座標データのコピーなども行っております。

今ソースコードは
        Dim Ex2003 As Microsoft.Office.Interop.Excel.Application
        Dim Books As Microsoft.Office.Interop.Excel.Workbooks
        Dim Book As Microsoft.Office.Interop.Excel.Workbook
        Dim xlSheets As Microsoft.Office.Interop.Excel.Sheets
        Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet

         中略(線の描画とか保存とか、関数によって色々やってます)

        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets)
        Book.SaveAs(s)
        Book.Close()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(Book)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(Books)
        Ex2003.Quit()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(Ex2003)
と、アクセスする度にExcelを開いて見たり書いたりして毎回閉じております。

特にPaint()がかかる度にExcelファイルを開いて再描画しています。
これでは遅くなるのも当然なので、最低限のOpen()Close()にしたいのです。
しかし、再描画の際などは、すでに開いているファイルの保存されたデータを
参照して描き且つ上書き保存せねばならず、
そのような処理が正常にできるのかがわかりません。

どなたかご教授ください。

[ツリー表示へ]
タイトルRe: 複数Excelファイル間のデータやりとりについて
記事No6845
投稿日: 2008/01/17(Thu) 16:50
投稿者るしぇ
CSV は Excel 固有のファイル形式ではありません。

座標点を記録するだけなのに、重いアプリケーションである Excel
を利用する意味がありません。
# もともと、Excel は CSV を扱うのに、データを自動で日付に解釈して
# しまったり、色々と問題を抱えてますし。
テキストファイルとして処理すればいいではないですか。

>しかし、再描画の際などは、すでに開いているファイルの保存されたデータを
>参照して描き且つ上書き保存せねばならず、
いまどき、座標データ(数値データ)なら数万個メモリ上で管理しても
特に問題は無いと思いますが、実際に、何が問題なのでしょう?。
必要なデータはメモリ上で管理して、保存の必要があるなら書き出す
だけで終わるのでは?

[ツリー表示へ]
タイトルRe^2: 複数Excelファイル間のデータやりとりについて
記事No6846
投稿日: 2008/01/17(Thu) 20:24
投稿者おたか
> 必要なデータはメモリ上で管理して、保存の必要があるなら書き出す
> だけで終わるのでは?

ご回答ありがとうございます。
実際は単純な座標データのみではなく管理の必要上csvファイルにしております。
なのでいつの間にか『csvファイルに保存しなくてはならない』という
固定観念にとらわれすぎていたのかもしれません。
るしぇさんのアイディアも参考にさせていただきます。

[ツリー表示へ]