書式を指定してクリップボードのテキストを取得する [C#]

書式を指定してクリップボードボードからテキストを取得 Clipboard GetText

C#では、クリップボードを操作するために、Clipboardクラスが用意されています。
クリップボードにコピー(保持)されたのテキストを取得するには、ClipboardクラスのGetText静的メソッドを使用します。
GetText静的メソッドは、パラメーター(引数)を指定せずに呼び出すと、プレーンのテキストを返します。

GetText静的メソッドにはテキストのフォーマット(書式)を指定できるパラメーター(引数)が用意されています。
今回は、GetText静的メソッドを使用してテキストを取得する時に、フォーマットを指定する方法について紹介します。

Clipboardクラスについて

Clipboardクラスは、Windowsフォームアプリケーションと、WPFアプリケーションで利用することができます。
Windowsフォームアプリケーションでは、System.Windows.Forms名前空間にあり、WPFアプリケーションでは、System.Windows名前空間にあります。

本記事に記載のサンプルコードは、以下のusingが行われていることを前提とします。

フォーマット(書式)を指定してテキストを取得

ClipboardクラスのGetText静的メソッドのパラメーター(引数)に、フォーマット(書式)を指定してテキストを取得します。

Windowsフォームアプリケーション

GetText静的メソッドのパラメーター(引数)には、System.Windows.Forms名前空間にあるTextDataFormat列挙型のフィールドを指定します。

TextDataFormat列挙型のフィールド

フィールド 説明
Text 0 標準 ANSI テキスト形式であることを指定します。
UnicodeText 1 標準 Windows Unicode テキスト形式であることを指定します。
Rtf 2 リッチテキスト形式(RTF: Rich Text Format)のデータで構成されるテキストであることを指定します。
Html 3 HTML: HyperText Markup Language のデータで構成されるテキストであることを指定します。
CommaSeparatedValue 4 コンマ(カンマ)区切り (CSV: Comma-Separated Value) 形式のデータで構成されるテキストであることをを指定します。

WPFアプリケーション

GetText静的メソッドのパラメーター(引数)には、System.Windows名前空間にあるTextDataFormat列挙型のフィールドを指定します。

TextDataFormat列挙型のフィールド

フィールド 説明
Text 0 標準 ANSI テキスト形式であることを指定します。
UnicodeText 1 標準 Windows Unicode テキスト形式であることを指定します。
Rtf 2 リッチテキスト形式(RTF: Rich Text Format)のデータで構成されるテキストであることを指定します。
Html 3 HTML: HyperText Markup Language のデータで構成されるテキストであることを指定します。
CommaSeparatedValue 4 コンマ(カンマ)区切り (CSV: Comma-Separated Value) 形式のデータで構成されるテキストであることをを指定します。
Xaml 5 XAML: Extensible Application Markup Language のデータで構成されるテキストであることを指定します。

サンプルプログラム

サンプルとして、Windowsフォームアプリケーションでクリップボードに保持されているテキストを、各フォーマットで取得して表示するプログラムを作成します。

Windowsフォームアプリケーションのプロジェクトを作成する方法については、以下の記事を参照してください。

Windowsフォームアプリケーションのプロジェクト(ソリューション)を作成する。[C#]
Visual StudioでC#のWindowsフォームアプリケーションのプロジェクト(ソリューション)を作成する方法を記載します。 ...

ユーザーインターフェース

サンプルのUI(画面)は以下のフォームを作成します。

フォーマットを指定してクリップボードのテキストを取得するサンプルのフォームデザイン

フォームにはタブコントロール(tabControl1)とクリップボードのテキストを取得・表示するボタン(button1)を配置します。
タブコントロールの各タブページ(tabPage1~5)には、複数行入力を可能にしたテキストボックス(textBox1~5)を配置します。

テキストボックスを複数行入力できるようにする方法については、以下の記事でご紹介していますので参考にしてください。

テキストボックスに複数行の文字列を入力できるように設定する [C#] TextBox
Windowsフォームアプリケーションのテキストボックス(TextBox)に改行(リターン)を入力できるようにする方法を紹介します。 ...

ソースコード

各コントロールの初期化とボタンをクリックした時の処理を実装します。

プログラムの実行

作成したプロジェクトをビルドして実行(デバッグ)します。

フォーマットを指定してクリップボードのテキストを取得するサンプルプログラムを実行

ブラウザーに表示されているWebページ(HTMLページ)をコピーします。

フォーマットを指定してクリップボードのテキストを取得するサンプルでWebページ(HTMLページ)をコピー

クリップボードには、テキスト(プレーンテキスト)、HTMLテキスト、ユニコードテキストの3種類のデータが保持されます。

Text

フォーマットを指定してクリップボードのテキストを取得するサンプルでWebページ(HTMLページ)をコピー Text

Rtf

フォーマットを指定してクリップボードのテキストを取得するサンプルでWebページ(HTMLページ)をコピー Rtf

Html

フォーマットを指定してクリップボードのテキストを取得するサンプルでWebページ(HTMLページ)をコピー Html

CommaSeparatedValue

フォーマットを指定してクリップボードのテキストを取得するサンプルでWebページ(HTMLページ)をコピー CSV

UnicodeText

フォーマットを指定してクリップボードのテキストを取得するサンプルでWebページ(HTMLページ)をコピー Unicode

次にExcelシートをコピーします。

フォーマットを指定してクリップボードのテキストを取得するサンプルでExcelシートをコピー

Excelシートをコピーすると、テキスト(プレーンテキスト)、リッチテキスト、HTMLテキスト、ユニコードテキストの4種類のデータが、クリップボードに保持されます。

Text

フォーマットを指定してクリップボードのテキストを取得するサンプルでExcelシートをコピー Text

Rtf

フォーマットを指定してクリップボードのテキストを取得するサンプルでExcelシートをコピー Rtf

Html

フォーマットを指定してクリップボードのテキストを取得するサンプルでExcelシートをコピー Html

CommaSeparatedValue

フォーマットを指定してクリップボードのテキストを取得するサンプルでExcelシートをコピー CSV

UnicodeText

フォーマットを指定してクリップボードのテキストを取得するサンプルでExcelシートをコピー Unicode

ちなみにExcelシートをコピーした場合は、選択しているセル範囲が画像としてもクリップボードに保持されます。

クリップボードのイメージは、ClipboardクラスのGetImage静的メソッドを使って取得できます。