Вставка изображения из буфера обмена Excel 2003 - PullRequest
0 голосов
/ 10 сентября 2009

У меня есть изображения в файле 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) >> false

Можно подумать, что Excel 2003 "Office Clipboard" может мешать? Тем не менее, MS PAINT без проблем вставляет изображение.

Помощь

Ответы [ 2 ]

2 голосов
/ 10 сентября 2009

Я нашел решение.

Очевидно, что Excel 2007 не копирует изображение в буфер обмена в том же формате файла. Я просмотрел Clipboard.GetDataObject (). GetFormats () и обнаружил, что он содержит следующее:

Формат чертежа в офисе 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);
            //...
        }

И это работает.

0 голосов
/ 10 сентября 2009

SpreadsheetGear for .NET может открывать книги Excel и получать изображения из диапазонов ячеек или диаграмм, как показано в этих примерах (эти примеры для ASP.NET, но работают а также с приложениями WinForms, консольными приложениями и т. д.). SpreadsheetGear не использует Excel, поэтому он будет работать с установленным Excel 2003, Excel 2007 или без Excel.

Вы можете скачать бесплатную пробную версию здесь .

Отказ от ответственности: я владею SpreadsheetGear LLC

...