MSFlexGridへのExcelデータの貼り付け方について – プログラミング – Home

通知
すべてクリア

[解決済] MSFlexGridへのExcelデータの貼り付け方について


こうじ
 こうじ
(@こうじ)
ゲスト
結合: 24年前
投稿: 23
Topic starter  

VC6.0初心者です.動作環境Windows Me.

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

以上.


引用未解決
トピックタグ
TAKA
 TAKA
(@TAKA)
ゲスト
結合: 24年前
投稿: 117
 

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

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


返信引用
こうじ
 こうじ
(@こうじ)
ゲスト
結合: 24年前
投稿: 23
Topic starter  

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

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


返信引用
こうじ
 こうじ
(@こうじ)
ゲスト
結合: 24年前
投稿: 23
Topic starter  

とりあえずは,以下のような感じで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
 kazuma
(@kazuma)
ゲスト
結合: 24年前
投稿: 217
 

> しかしながら,Excelの複数セルをまとめてペーストする方法がわかりません.

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

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

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

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


返信引用
TAKA
 TAKA
(@TAKA)
ゲスト
結合: 24年前
投稿: 117
 

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

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

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

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

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

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


返信引用
こうじ
 こうじ
(@こうじ)
ゲスト
結合: 24年前
投稿: 23
Topic starter  

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(); // クリップボードを閉じる

}


返信引用
こうじ
 こうじ
(@こうじ)
ゲスト
結合: 24年前
投稿: 23
Topic starter  

複数セルまとめてペーストも解決しました.
kazumaさんのアドバイスが役立ちました.
今後もよろしくお願いします.


返信引用
TAKA
 TAKA
(@TAKA)
ゲスト
結合: 24年前
投稿: 117
 

> 結局のところ,MSDNあるいはネットが最大の情報源という
> ことなのでしょうか(このHPも含めて).

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

がんばってください。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました