@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

クリップボードオブジェクトについて

投稿者投稿内容
kaki@
会議室デビュー日: 2006/05/25
投稿数: 15
投稿日時: 2006-05-25 15:55
はじめまして、kaki@と申します。

現在、取得したDataSetの内容を1行単位で
Excelシートに書出しているプログラムを作成しています。
書出す際は、各項目をTab区切りにし、
クリップボードオブジェクトにて貼り付け処理を
件数分行っています。

しかし、実際の処理実行中に、Ctrl+Cなどの
コピー処理を実行すると、格納された値が上書きされてしまい
結果が正しく出力出来ない状態です。

パフォーマンスを考慮して、クリップボードオブジェクトは
利用必須と考えていますが、何か良い対策はないでしょうか。

ご教授の程、宜しくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-25 16:08
引用:

kaki@さんの書き込み (2006-05-25 15:55) より:

パフォーマンスを考慮して、クリップボードオブジェクトは
利用必須と考えていますが、何か良い対策はないでしょうか。


個人的には、利用してはいけないくらいに考えています。

Excel に貼り付けるとのことですが、データだけが欲しい (書式は要らない) のであれば、
Tab 区切りの TSV ファイルや、カンマ区切りの CSV ファイルの方が望ましいと思います。
(Excel からでも開くことはできますし)

TSV、CSV であれば、Excel Book という考え自体を捨てることができます。
また、パフォーマンスもかなり向上することでしょう。

ただ、データ出力仕様がわからないので、薦めて良いものか微妙ですが...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
kaki@
会議室デビュー日: 2006/05/25
投稿数: 15
投稿日時: 2006-05-25 16:23
じゃんぬねっと様
早速のご返答、誠にありがとうございます。

ご説明不足で申し訳ございませんでした。
現在作成しております、アプリケーションでは
数千件のレコードをExcelに出力し、ファイルとして保存するといった
機能がついております。

ですので、CSV、TSV化が出来ないのです。

そこで、VB.net独自のExcel操作オブジェクトにて
データを各セルにセットしておりました所大変レスポンスが悪くなってしまった為
現在、<b>クリップボードオブジェクト</b>を使用し 一行づつ【コピー】⇒【貼り付け】をおこなって、レスポンス向上をはかっております。

そこで、問題なのですが
.Netフレームワークのクリップボードオブジェクトを使用しているとはいえ、 結局はWindowsのクリップボードを使用しますので、Excel作成途中に 別処理にてコピー処理などを行うとそのデータが張り付いてしまいます。

大変お手数ですが、解決方法、もしくは回避策をご存知でしたら、ご教授頂きたいと思います。

具体的には、
----------------------------------------------------------------
・VB.Net から、Excelなどで使用している 拡張クリップボードを使用する
・クリップボード自体をロックしてしまう
・Windows の コピー貼り付け処理をとめてしまう
----------------------------------------------------------------
などを考えておりますが、上記は技術的に可能なのでしょうか?
こちらもご存知のかたいらっしゃいましたらご教授のほど宜しくお願い申し上げます。


囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-05-25 16:47
じゃんぬねっとさんの言う通り、ユーザーの同意なし(ユーザーの明示的な操作なし)にクリップボードを弄るのは、典型的な悪いアプリケーションとされていますね。なので、今回の仕様は一考の余地ありでしょう。

引用:

現在作成しております、アプリケーションでは
数千件のレコードをExcelに出力し、ファイルとして保存するといった
機能がついております。

ですので、CSV、TSV化が出来ないのです。


CSV、TSV化の方が簡単なように思いますが。
「ファイルとして保存する」という機能が、かならず「*.xls」でないといけない仕様という事でしょうか。

_________________
囚人のジレンマな日々
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-05-25 16:52
なんか微妙にかみ合ってないね。
わざわざExcelからも利用できるよ。って書いてあるのにね。
データごときに書式なんていらないんだからCSVでいいんじゃないのって思うが。
現状の仕様が何も考えてない。
それゆえに今回のファイル出力もそれにあわせるしかないってやつか。
なんのために書式つきのxlsファイルを使ってるんだろうww

[ メッセージ編集済み 編集者: ぶさいくろう 編集日時 2006-05-25 16:56 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-25 17:05
引用:

kaki@さんの書き込み (2006-05-25 16:23) より:

現在作成しております、アプリケーションでは
数千件のレコードをExcelに出力し、ファイルとして保存するといった機能がついております。


現状のアプリケーションが、何らかの理由で Excel Book 形式で保存されている──

引用:

ですので、CSV、TSV化が出来ないのです。


──なので、現状の仕様に合わせるほかない、ということですね。(;~_~)

引用:

そこで、VB.net独自のExcel操作オブジェクトにて


そういったものは、存在しないと思います。
Microsoft Excel xx.x Object Library か何かのことでしょうか?
ここは明確にしておくべきだと思います。

引用:

データを各セルにセットしておりました所大変レスポンスが悪くなってしまった為


どのような実装をされたのでしょうか?
Range に対して配列でデータを設定できるかと思いますが...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
kaki@
会議室デビュー日: 2006/05/25
投稿数: 15
投稿日時: 2006-05-25 17:11
囚人 様

ご返答ありがとうございます。

引用:


CSV、TSV化の方が簡単なように思いますが。
「ファイルとして保存する」という機能が、かならず「*.xls」でないといけない仕様という事でしょうか。




おっしゃるとおりです。
ユーザー要望として、一定期間内にレコードの変更があれば、
そのレコード行に対し、行単位でセル塗りつぶしを行って欲しいという仕様となっております。

改めてご説明が至らず、申し訳ありません。

宜しくお願い致します。

ベテラン
会議室デビュー日: 2005/05/16
投稿数: 85
お住まい・勤務地: 千葉県在住
投稿日時: 2006-05-25 17:18
kaki@さん、こんにちは。

エンドユーザーの都合や、予算などに左右されますが、
サードパーティの製品を使用するという選択もあるかと。。。

スキルアップ/キャリアアップ(JOB@IT)