クリップボードの判定
投稿者 るきお  (社会人)
投稿日時
2021/1/30 22:16:18
Linkの場合、中に Excel という文字が入っていたので、それを利用して判定を書いてみました。
Windowsフォームアプリケーションです。
見てみたらこうだったというレベルで、Linkがそもそも何かもわかっていないので、どの程度汎用性があるかはわかりません。
環境はWindows10 + Excel 2019 です。
あとは、XML Spreadsheet として取得した時も、Excelという文字が中に入っていました。
Windowsフォームアプリケーションです。
Private Function DoesClipboardContainExcelCells() As Boolean
Dim data As IO.MemoryStream = DirectCast(Clipboard.GetData("Link"), IO.MemoryStream)
If data Is Nothing Then
Return False
End If
Using reader As New IO.StreamReader(data)
Dim linkText As String = reader.ReadToEnd
If linkText.StartsWith("Excel") Then
Return True
End If
End Using
Return False
End Function
見てみたらこうだったというレベルで、Linkがそもそも何かもわかっていないので、どの程度汎用性があるかはわかりません。
環境はWindows10 + Excel 2019 です。
あとは、XML Spreadsheet として取得した時も、Excelという文字が中に入っていました。
投稿者 嵐  (社会人)
投稿日時
2021/1/30 23:54:09
るきお様、ありがとうございます。
EXCEL2007でも、同様の方法で判定できました。
私もクリップボードのデータの形式については、Textくらいしか扱った事がないですが、
これなら、かなりの確率でEXCELからのデータだと判断できると思います。
コピー元のセル範囲まで取得できる事も解ったので、今後、何かで使える場面があるかも。。
どうも、ありがとうございました。
EXCEL2007でも、同様の方法で判定できました。
私もクリップボードのデータの形式については、Textくらいしか扱った事がないですが、
これなら、かなりの確率でEXCELからのデータだと判断できると思います。
コピー元のセル範囲まで取得できる事も解ったので、今後、何かで使える場面があるかも。。
どうも、ありがとうございました。
EXCELのセルをコピーしたもの以外は受け付けないようにしたいのですが、
「クリップボードの内容がEXCELのセルをコピーしたもの」とういう判定方法はございますでしょうか?
100%の判定は多分無理だと思いますが、断定できなくても、「多分そうだろう」の確率でもいいです。
自分で考えたのは、EXCELのセルをコピーした際、以下の形式がクリップボードに格納されていたので
これと一致するなら「多分、EXCELからのものだろう」という考え方です。
EXCELのVersionによりこれも変動するかも(↓はEXCEL2007での結果)
別案でOffice製品特有のOfficeクリップボードを利用するとか、方法にはこだわりません。
アドバイスをお願いします。