我試圖訪問Excel 2003圖表複製到剪貼板。Excel 2003 Windows窗體剪貼板數據對象
圖表圖像粘貼到mspaint或wordpad中。
問題是我在我的System.Windows.Forms.Clipboard對象上看不到圖表的數據。
我讀過下面的帖子:
Pasting Image from Excel 2003 Clipboard
,並在我的特殊情況下的唯一一次PNG,JFIF,或GIF格式出現在剪貼板數據對象是格式時,我去Excel剪貼板管理器(在Excel應用程序中)並在打開時重新複製圖表。 。
也就是說,如果清除我的剪貼板,打開Excel 2003,創建圖表,右鍵單擊它,打副本,然後檢查Clipboard.GetDataObject()GetFormats(),我看到的是:
Clipboard.GetDataObject().GetFormats()
{string[6]}
[0]: "EnhancedMetafile" // is null
[1]: "Embed Source" // is a MemoryStream of about 10KB which seems to be an OLE representation for the whole workbook
[2]: "Object Descriptor" // a very short (10 bytes) MemoryStream
[3]: "Link Source" // a very short (10 bytes) MemoryStream
[4]: "Link Source Descriptor" // a very short (10 bytes) MemoryStream
[5]: "Link" // null
如果我編輯下打開Excel剪貼板管理> Office剪貼板然後複製同一個圖表,即使Clipboard.ContainsImage()返回false,我看到:
Clipboard.GetDataObject().GetFormats()
{string[10]}
[0]: "Office Drawing Shape Format"
[1]: "MetaFilePict"
[2]: "EnhancedMetafile"
[3]: "PNG+Office Art" // can read with Image.FromStream
[4]: "JFIF+Office Art" // can read with Image.FromStream
[5]: "GIF+Office Art" // can read with Image.FromStream
[6]: "PNG" // can read with Image.FromStream
[7]: "JFIF" // can read with Image.FromStream
[8]: "GIF" // can read with Image.FromStream
[9]: "ActiveClipBoard"
,可以在圖像中的任何一個獲得格式化爲MemoryStream沒有任何問題。
我需要這個工作,而不必打開Excel剪貼板管理器。它在2007年和2010年工作正常(其中還包括一個常規的位圖格式,以方便我的Clipboard.ContainsImage()返回true)...
我已驗證多個工作站上的此行爲。
我在想接下來的步驟可能是在本機System.Runtime.InteropServices.ComTypes.IDataObject
或更糟糕的是得到一個COM對象的運行實例的Excel ......但我寧願不必。
感謝您的幫助......
所以,你會得到不同的行爲取決於你是否從'System.Windows.Forms.Clipboard',與'System.Windows.Clipboard'讀取剪貼板!? - 瘋狂! - 但也很高興知道。僅此而已Upvoted! :-) – BrainSlugs83 2016-05-04 23:14:36