从Excel 2003剪贴板粘贴图像

时间:2009-09-10 14:52:24

标签: c# excel office-2003

我在excel文件中有图像,我需要手动提取。我编写了一个程序,它可以很好地为我们的用户使用Excel 2007,但不能用于Excel 2003。

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

应用程序代码非常简单。单击按钮时,将调用以下代码:

            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一起使用。

我尝试了以下调试代码,但都失败了:

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

有人认为Excel 2003“Office剪贴板”可能会干扰?但是,MS PAINT粘贴图像没有问题。

帮助?

2 个答案:

答案 0 :(得分:2)

我找到了解决方案。

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

Office绘图形状格式 METAFILEPICT EnhancedMetafile PNG +办公室艺术 JFIF +办公室艺术 GIF +办公室艺术 PNG JFIF GIF ActiveClipboard

为了实现这一点,我在代码中添加了第二个代码块,其中包含以下内容:

        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);
            //...
        }

它有效。

答案 1 :(得分:0)

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

您可以下载免费试用here

免责声明:我拥有SpreadsheetGear LLC