VC6.0初心者です.動作環境Windows Me.
MSFlexGrid に Excelのセル入力データをコピー&ペーストしようと
試みていますが,どうすればいいのかさっぱりわかりません.
クリップボードの操作をしたらいいのでしょうか?
クリップボードの操作は複雑みたいで,ちょっといきづまってしまいました.
アドバイスをお願いします.
以上.
クリップボードのデータの取得方法のみですが。
それぞれ下記の順序でつかって下さい。
使い方はMSDN等で調べてください。
勉強になると思いますので。
OpenClipboard // クリップボードを開く
GlobalLock // ロック
GetClipboardData // クリップボードデータ取得
GlobalUnlock // アンロック
CloseClipboard // クリップボードを閉じる
どうもありがとうございます.
前にもMSFlexGrid絡みでこの掲示板で回答を頂ましたが,
独学者としては非常に助かります.
おそらく理解できるまでに時間がかかると思いますが,
試してみます.うまく行きましたら報告いたします.
あと,別の質問になりますが,Excelの数値を使ってVC上で計算
させる場合,皆さんはどのようにしますか?MSFlexGridをあえて
使う必要はないのでしょうかね,場合によるのでしょうけど...
とりあえずは,以下のような感じで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(); // クリップボードを閉じる
}
> しかしながら,Excelの複数セルをまとめてペーストする方法がわかりません.
メモ帳とかに貼り付けてみれば分かりますが、
タブ(カンマだったかも)と改行で区切られた
テキスト形式のデータがクリップボードに入っています。
なのでタブごとに切り分けてセルに入れていけばいいです。
> あと,別の質問になりますが,Excelの数値を使ってVC上で計算
> させる場合,皆さんはどのようにしますか?
計算だけなら Excel で CSV 形式やタブ区切りテキスト形式で保存して、
それを読み込んで計算します。私なら。
> あと,別の質問になりますが,Excelの数値を使ってVC上で計算
> させる場合,皆さんはどのようにしますか?
私の場合は簡単な計算なら、EXCEL上でしてしまいます。
大抵の計算ならば、EXCEL上でできますから。
どうしてもVC上でしたいならやはりkazumaさんと同じように
CSVファイルを作成してからします。
> あるいはクリップボード関連が充実した書籍を教えていただけませんか?
下記の二つを検索サイトで調べるとかなりの情報が得られますよ?
SetClipboardData
GetClipboardData
最後に
GlobalLock // ロック
GetClipboardData // クリップボードデータ取得
の順番が逆でしたね・・・すみませんm(__)m
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(); // クリップボードを閉じる
}
複数セルまとめてペーストも解決しました.
kazumaさんのアドバイスが役立ちました.
今後もよろしくお願いします.
> 結局のところ,MSDNあるいはネットが最大の情報源という
> ことなのでしょうか(このHPも含めて).
すべてとはいわないでも、大抵の情報は得られます。
後は情報の探し方です。
私もクリップボードは検索サイトで使い方をみつけ勉強しました。
クリップボードでMSDNで出てきた関数をネットで調べると言うやり方
でしたね。
大抵このやり方でみつかります。
その内、どのホームページにはこんな情報があるんだ等がわかってきます。
必要な時にそこから探しだし、使い方を勉強するのも手ですね。
がんばってください。