ExcelとかWordの形式を調べて結果をまとめようかと思ったが、面倒すぎたので、調べるために作ったツールだけ置いてみる。
画面キャプチャ
Excel2016で、
を選択してコピーした場合の結果が下図。Csv
はなぜかString
ではなくMemoryStream
らしい。
ソースコード
usingSystem;usingSystem.Drawing;usingSystem.Drawing.Imaging;usingSystem.IO;usingSystem.Windows.Forms;classClipboardTest:Form{ListViewlsv;TextBoxtxtDestFilepath;ButtonbtnGetList;ButtonbtnSaveFile;ClipboardTest(){txtDestFilepath=newTextBox();txtDestFilepath.Text=(newFileInfo("out_dat")).FullName;txtDestFilepath.ReadOnly=true;txtDestFilepath.Width=400;Controls.Add(txtDestFilepath);btnGetList=newButton();btnGetList.Text="Get Format List";btnGetList.Size=newSize(150,30);btnGetList.Location=newPoint(0,40);btnGetList.Click+=(sender,e)=>{ListupClipboardFormat();};Controls.Add(btnGetList);btnSaveFile=newButton();btnSaveFile.Text="Save as selected format";btnSaveFile.Size=newSize(150,30);btnSaveFile.Location=newPoint(0,80);btnSaveFile.Click+=(sender,e)=>{SaveClipboardData();};btnSaveFile.Enabled=false;Controls.Add(btnSaveFile);lsv=newListView();lsv.Location=newPoint(0,120);lsv.Size=newSize(400,400);lsv.View=View.Details;lsv.FullRowSelect=true;lsv.GridLines=true;lsv.HideSelection=false;lsv.Columns.Add("Format",200);lsv.Columns.Add("Class",180);Controls.Add(lsv);ClientSize=newSize(400,560);}voidSaveClipboardData(){varitems=lsv.SelectedItems;if(items.Count!=1){return;}try{btnSaveFile.Enabled=false;stringfmt=items[0].SubItems[0].Text;//Console.WriteLine(fmt);SaveClipboardDataAs(txtDestFilepath.Text,fmt);}finally{btnSaveFile.Enabled=true;}}staticvoidSaveClipboardDataAs(stringdestPath,stringfmt){IDataObjectdata=Clipboard.GetDataObject();objectt=data.GetData(fmt);if(tisstring){File.WriteAllText(destPath+".txt",tasstring);//Console.WriteLine(t);}elseif(tisMemoryStream){varms=tasMemoryStream;using(varfs=newFileStream(destPath+".dat",FileMode.Create)){ms.WriteTo(fs);}}elseif(tisBitmap){Bitmapbmp=tasBitmap;bmp.Save(destPath+".png",ImageFormat.Png);}else{MessageBox.Show("Not supported.");}}voidListupClipboardFormat(){lsv.Items.Clear();lsv.BeginUpdate();try{IDataObjectdata=Clipboard.GetDataObject();if(data!=null){foreach(stringfmtindata.GetFormats()){objecttmp=data.GetData(fmt);stringtypeName="<null>";if(tmp!=null){typeName=tmp.GetType().ToString();}lsv.Items.Add(newListViewItem(newstring[]{fmt,typeName}));Console.WriteLine(fmt+"\t"+typeName);}}}finally{lsv.EndUpdate();}if(lsv.Items.Count>=1){btnSaveFile.Enabled=true;}}[STAThread]staticvoidMain(string[]args){Application.Run(newClipboardTest());}}