从Excel 2003剪贴板粘贴图像

我有一个Excel文件中的图像,我需要手动提取。 我已经编写了一个程序,它对Excel 2007用户来说function非常好,但是不能用于Excel 2003。

过程:用户打开Excel文件,将相关图像复制到剪贴板用户打开C#应用程序,单击从剪贴板收集图像的button,然后收集用户的附加信息。

应用程序代码非常简单。 点击button后,下面的代码被调用:

if (Clipboard.GetImage() != null) { pictureBox1.Width = Clipboard.GetImage().Width; pictureBox1.Height = Clipboard.GetImage().Height; pictureBox1.Image = Clipboard.GetImage(); //...more misc. code... } 

这与Excel 2007,完美的工作,但不能与Excel 2003的function。

我已经尝试了以下debugging代码,所有这些都失败了:

Clipboard.ContainsImage()>>返回false Clipboard.GetDataObject()。GetDataPresent(DataFormats.Bitmap)>> false

一个想法是,Excel 2003“Office剪贴板”可能会干扰? MS PAINT没有粘贴图像的问题。

帮帮我?

我find了解决scheme。

显然,Excel 2007不会以相同的文件格式将图像复制到剪贴板。 我通过Clipboard.GetDataObject()。GetFormats()迭代,发现它包含以下内容:

办公室绘graphics状格式MetaFilePict EnhancedMetafile PNG +办公室艺术JFIF +办公室艺术GIF +办公室艺术PNG JFIF GIF ActiveClipboard

为了使这个工作,我已经添加了第二个codeblock到我的代码与以下内容:

  if (Clipboard.GetImage() != null) //Excel 2007 { pictureBox1.Width = Clipboard.GetImage().Width; pictureBox1.Height = Clipboard.GetImage().Height; pictureBox1.Image = Clipboard.GetImage(); //... } else if(Clipboard.GetDataObject().GetDataPresent("PNG")) //Excel 2003 { Clipboard.GetDataObject().GetFormats() IDataObject data = Clipboard.GetDataObject(); MemoryStream ms = (MemoryStream)data.GetData("PNG"); pictureBox1.Width = Image.FromStream(ms).Width; pictureBox1.Height = Image.FromStream(ms).Height; pictureBox1.Image = Image.FromStream(ms); //... } 

它工作。

用于.NET的SpreadsheetGear可以打开Excel工作簿,并从这些示例演示的单元格或图表中获取图像(这些示例适用于ASP.NET,但适用于WinForms应用程序,控制台应用程序等)。 SpreadsheetGear不依赖于Excel,因此它可以在安装Excel 2003,安装Excel 2007或不安装Excel的情况下使用。

你可以在这里下载免费试用版。

免责声明:我自己的SpreadsheetGear LLC