MDI,CFormViewクラスにスプレッドシート(MSFlexGrid)を貼り付けたアプリケーションを
作っています.
現在,MSFlexGrid上の文字,数値を保存するところを実装しようとしています.一応,保存
することはできるのですが,Excelワークシートの保存に比べて速度が遅いようなきがします.
そこで,何か効率よく保存できる方法があれば教えていただきたいのですが.もし,Excelの
保存の仕組みがわかればさんこうになるのですが.
因みに,今私が採用している保存の方法は以下のようになります.
1.[保存]の命令により,MSFlexFrid上のデータをCString型として読み込み(Grid上のすべ
てのセルの情報を読み込む.計2万個のセル),そのまま,CArchive arに渡して保存する.
2.[開く]のときは,CDocumentよりデータを読み込み,MSFlexGridに貼り付けていく.この
部分は,ViewクラスのOnInitialUpdateに記述.
3.[新規作成]のときは,CString型のデータとして " をMSFlexGrid上のすべてのセルに
貼り付ける.(実は,保存以上に新規作成時の子ウィンドウの表示の遅さが気になっていま
す.)
初心者なものでよく分からないのですが,CString型として読み書きするのがまずいのでしょ
うか(重たい?)? また,保存時にまとめてデータを読み込むのもいけないのでしょうか?
Gridの内容を書き換える毎に,arに情報を送っておいたほうがよいのでしょうか?
長々と書き込んでしまいました.すいません.どなたかアドバイスを下さい.
動作環境:Windows Me, VC6.0
以上.
気がついた点だけですが、
本来の使用方法からすれば、入力されたデータは、ドキュメントクラスに保存されるべきではな
いですか?
保存時に全てのデータを取得していたのでは遅くなるのは当然な気がします。
ドキュメントクラスとビュークラスの内容の同期を取る必要がありますが、
ビュークラスは表示のためと割り切った方が良いような気がします。
ドキュメントクラスのデータの保持方法を検討してデータの更新を効率よく出来るように
しておけば、保存時は保持しているデータを書き込むだけです。
新規の方は、MSFlexGridを使った事がほとんど無いので良くわからないです。
インタフェイス的に許されるのであれば、CStringでなく、単なるTCHAR*で処理してみて
実際に処理速度を比べてみた方が手っ取り早いと思います。
MSFlexGridに一気に初期化するようなインターフェイスがあるといいのですけれど、
無いのでしょうか?
ちょっと調べてみました。
一気にクリアは出来そうです。
但し、文字色等も初期化されてしまいますが。
あと、大量にデータを設定するときは、再描画を禁止にして追加して再描画を許可とかも
使えそうですね。
詳しくは、こちらを参照してください。
http://isweb3.infoseek.co.jp/play/ayusya/VCGrid.html