クリップボードの判定

タグの編集
投稿者   (社会人) 投稿日時 2021/1/30 18:34:34
「クリップボードの内容(文字列)を取得して、その後の処理を行う」という処理があります。
EXCELのセルをコピーしたもの以外は受け付けないようにしたいのですが、
「クリップボードの内容がEXCELのセルをコピーしたもの」とういう判定方法はございますでしょうか?
100%の判定は多分無理だと思いますが、断定できなくても、「多分そうだろう」の確率でもいいです。

自分で考えたのは、EXCELのセルをコピーした際、以下の形式がクリップボードに格納されていたので
これと一致するなら「多分、EXCELからのものだろう」という考え方です。
EXCELのVersionによりこれも変動するかも(↓はEXCEL2007での結果)

別案でOffice製品特有のOfficeクリップボードを利用するとか、方法にはこだわりません。
アドバイスをお願いします。

 
EnhancedMetafile
MetaFilePict
System.Drawing.Bitmap
Bitmap
Biff12
Biff8
Biff5
SymbolicLink
DataInterchangeFormat
XML Spreadsheet
HTML Format
System.String
UnicodeText
Text
Csv
Rich Text Format
Embed Source
Object Descriptor
Link Source
Link Source Descriptor
Link
Format129
投稿者 るきお  (社会人) 投稿日時 2021/1/30 22:16:18
Linkの場合、中に 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からのデータだと判断できると思います。
コピー元のセル範囲まで取得できる事も解ったので、今後、何かで使える場面があるかも。。

どうも、ありがとうございました。