クリップボードの判定 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 るきお  (社会人)
投稿日時
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 18:34:34
「クリップボードの内容(文字列)を取得して、その後の処理を行う」という処理があります。
EXCELのセルをコピーしたもの以外は受け付けないようにしたいのですが、
「クリップボードの内容がEXCELのセルをコピーしたもの」とういう判定方法はございますでしょうか?
100%の判定は多分無理だと思いますが、断定できなくても、「多分そうだろう」の確率でもいいです。
自分で考えたのは、EXCELのセルをコピーした際、以下の形式がクリップボードに格納されていたので
これと一致するなら「多分、EXCELからのものだろう」という考え方です。
EXCELのVersionによりこれも変動するかも(↓はEXCEL2007での結果)
別案でOffice製品特有のOfficeクリップボードを利用するとか、方法にはこだわりません。
アドバイスをお願いします。
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
EXCEL2007でも、同様の方法で判定できました。
私もクリップボードのデータの形式については、Textくらいしか扱った事がないですが、
これなら、かなりの確率でEXCELからのデータだと判断できると思います。
コピー元のセル範囲まで取得できる事も解ったので、今後、何かで使える場面があるかも。。
どうも、ありがとうございました。