クリップボードの判定 への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者   (社会人) 投稿日時 2021/1/30 23:54:09
るきお様、ありがとうございます。

EXCEL2007でも、同様の方法で判定できました。
私もクリップボードのデータの形式については、Textくらいしか扱った事がないですが、
これなら、かなりの確率でEXCELからのデータだと判断できると思います。
コピー元のセル範囲まで取得できる事も解ったので、今後、何かで使える場面があるかも。。

どうも、ありがとうございました。
投稿者 るきお  (社会人) 投稿日時 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 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