MSFlexGridへのExcelデータの貼り付け方について

[戻る]
こうじ 2002/02/05(火) 00:48:54
VC6.0初心者です.動作環境Windows Me.

MSFlexGrid に Excelのセル入力データをコピー&ペーストしようと
試みていますが,どうすればいいのかさっぱりわかりません.
クリップボードの操作をしたらいいのでしょうか?
クリップボードの操作は複雑みたいで,ちょっといきづまってしまいました.
アドバイスをお願いします.

以上.

TAKA 2002/02/05(火) 12:00:15
クリップボードのデータの取得方法のみですが。
それぞれ下記の順序でつかって下さい。
使い方はMSDN等で調べてください。
勉強になると思いますので。

OpenClipboard     // クリップボードを開く
GlobalLock        // ロック
GetClipboardData  // クリップボードデータ取得
GlobalUnlock      // アンロック
CloseClipboard    // クリップボードを閉じる

こうじ 2002/02/05(火) 19:18:57
どうもありがとうございます. 
前にもMSFlexGrid絡みでこの掲示板で回答を頂ましたが,
独学者としては非常に助かります.
おそらく理解できるまでに時間がかかると思いますが,
試してみます.うまく行きましたら報告いたします.

あと,別の質問になりますが,Excelの数値を使ってVC上で計算
させる場合,皆さんはどのようにしますか?MSFlexGridをあえて
使う必要はないのでしょうかね,場合によるのでしょうけど...

こうじ 2002/02/07(木) 00:48:55
とりあえずは,以下のような感じでExcelのセルから,MSFlexGridのセルへのコピー&
ペーストができました.TAKAさん,有難うございました (_ _).

しかしながら,Excelの複数セルをまとめてペーストする方法がわかりません.何かヒントを,
あるいはクリップボード関連が充実した書籍を教えていただけませんか?

void ***::OnEditPaste() 
{
    // TODO: この位置にコマンド ハンドラ用のコードを追加してください

HGLOBAL hMem;
char *ss;

OpenClipboard();     // クリップボードを開く
hMem=GetClipboardData(CF_TEXT); // クリップボードデータ取得

if (hMem==NULL) { 
  CloseClipboard();//中止
  }

ss=(char *)GlobalLock(hMem);        // ロック

m_Grid.SetText(ss);

GlobalUnlock(hMem);      // アンロック
CloseClipboard();    // クリップボードを閉じる
    
}

kazuma 2002/02/07(木) 01:50:05
> しかしながら,Excelの複数セルをまとめてペーストする方法がわかりません.

メモ帳とかに貼り付けてみれば分かりますが、
タブ(カンマだったかも)と改行で区切られた
テキスト形式のデータがクリップボードに入っています。

なのでタブごとに切り分けてセルに入れていけばいいです。

> あと,別の質問になりますが,Excelの数値を使ってVC上で計算
> させる場合,皆さんはどのようにしますか?

計算だけなら Excel で CSV 形式やタブ区切りテキスト形式で保存して、
それを読み込んで計算します。私なら。

TAKA 2002/02/08(金) 14:14:22
> あと,別の質問になりますが,Excelの数値を使ってVC上で計算
> させる場合,皆さんはどのようにしますか?

私の場合は簡単な計算なら、EXCEL上でしてしまいます。
大抵の計算ならば、EXCEL上でできますから。

どうしてもVC上でしたいならやはりkazumaさんと同じように
CSVファイルを作成してからします。

> あるいはクリップボード関連が充実した書籍を教えていただけませんか?

下記の二つを検索サイトで調べるとかなりの情報が得られますよ?
  SetClipboardData
  GetClipboardData

最後に
GlobalLock        // ロック
GetClipboardData  // クリップボードデータ取得
の順番が逆でしたね・・・すみませんm(__)m

こうじ 2002/02/08(金) 21:09:28
TAKAさんkazuma,本当に助かりました.ありがとうございました!!
まだ,未完成ではありますが下記のような感じで,excelのセル
情報を取得できました.あとは,タブと改行(未着手)を認識して,MSFlexGrid
上の貼り付け位置を変えるようにすれば完成しそうです.

TAKAさん,結局のところ,MSDNあるいはネットが最大の情報源という
ことなのでしょうか(このHPも含めて).私はTAKAさんに教えて頂くまで
GlobalLockの存在すら知りませんでした.一応ヘルプでクリップボード
関連の情報は収集したつもりでしたが....一体どうすればTAKAさん,
kazumaさんのレベルまで到達するのでしょうか?私は既にVC歴1ヶ月を
過ぎたのですがこのありさま.奥が深すぎー(>_<).


*−*−*−*−*−*−*−*−*−*−*−*−*−*−*−*−*−*−
void CMemPermView::OnEditPaste() 
{
    // TODO: この位置にコマンド ハンドラ用のコードを追加してください

HGLOBAL hMem;
char *ss,*s;//ss:大元の文字列,....
char ne[1000]="";

OpenClipboard();     // クリップボードを開く
hMem=GetClipboardData(CF_TEXT); // クリップボードデータ取得

if (hMem==NULL) { 
  CloseClipboard();//中止
  }
ss=(char *)GlobalLock(hMem);        // ロック
s=strchr(ss, '\t' );  //タブキーのポインタ
strncpy(ne,ss,s-ss);
m_Grid.SetText(ne);

GlobalUnlock(hMem);      // アンロック
CloseClipboard();    // クリップボードを閉じる
    
}

こうじ 2002/02/09(土) 12:48:34
[[解決]]
複数セルまとめてペーストも解決しました.
kazumaさんのアドバイスが役立ちました.
今後もよろしくお願いします.

TAKA 2002/02/09(土) 21:13:56
> 結局のところ,MSDNあるいはネットが最大の情報源という
> ことなのでしょうか(このHPも含めて).

すべてとはいわないでも、大抵の情報は得られます。
後は情報の探し方です。
私もクリップボードは検索サイトで使い方をみつけ勉強しました。
クリップボードでMSDNで出てきた関数をネットで調べると言うやり方
でしたね。
大抵このやり方でみつかります。
その内、どのホームページにはこんな情報があるんだ等がわかってきます。
必要な時にそこから探しだし、使い方を勉強するのも手ですね。

がんばってください。

古いスレッドには追加発言できません。