私が達成しようとしていること
- 私のアプリはいくつかの表形式のデータを生成します
- ユーザーが Excel を起動し、[貼り付け] をクリックしてデータを Excel のセルとして配置できるようにしたい
- Windows は、その API で使用される「CommaSeparatedValue」と呼ばれる形式を受け入れるため、これは可能であると思われます
- 生のテキストをクリップボードに入れることはできますが、この形式を使用しようとすると機能しません
- 注: クリップボードから CSV データを正しく取得できます。問題は、CSV データをクリップボードに貼り付けることです。
私が試したことはうまくいきません
クリップボード.SetText()
System.Windows.Forms.Clipboard.SetText(
"1,2,3,4\n5,6,7,8",
System.Windows.Forms.TextDataFormat.CommaSeparatedValue
);
クリップボード.SetData()
System.Windows.Forms.Clipboard.SetData(
System.Windows.Forms.DataFormats.CommaSeparatedValue,
"1,2,3,4\n5,6,7,8",
);
どちらの場合も、何かがクリップボードに配置されますが、Excel に貼り付けると、"–§žý;pC¦yVk²ˆû" という 1 つのセルのガーバージ テキストとして表示されます。
更新 1: SetText() を使用した回避策
BFree's answer が示しているように、 TextDataFormatを使用したSetTextは回避策として機能します
System.Windows.Forms.Clipboard.SetText(
"1\t2\t3\t4\n5\t6\t7\t8",
System.Windows.Forms.TextDataFormat.Text
);
これを試してみたところ、Excel と Word への貼り付けが正しく機能することが確認されました。いずれの場合も、プレーンテキストではなくセルを含むテーブルとして貼り付けられます。
なぜ CommaSeparatedValue が機能しないのか、まだ興味があります。