Clipboard и все изображения

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

GoodWin
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 09.04.2009 (Чт) 16:53

Clipboard и все изображения

Сообщение GoodWin » 14.07.2012 (Сб) 23:45

Здравствуйте! Очень нужна Ваша помощь. Не могу найти ответ на вопрос: Каким образом можно извлечь из буфера обмена все изображения отдельно от текста и от друг друга?
GetImage например при копирование ячеек из Excel, где и текст и изображения, выдает просто скриншот выделенной области. Возможно ли получать изображения отдельно от текста, и например в виде массива, где каждый элемент типа Bitmap. Или есть может другой способ?
Буду очень благодарен, ищу уже неделю, не могу найти.

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Clipboard и все изображения

Сообщение Admiralisimys » 15.07.2012 (Вс) 21:49

GoodWin если не попытаться проанализировать формат данных Excel который находится в буфере, то с под WinForm доступны только форматы данных определённые в классе DataFormats
То что доступно как картинка из буфера это результат PrintScreen'а проделанного Excel.

Можно посмотреть как вытянуть данные с буфера например изучив форматы данных через пример ftp://charlespetzold.com/ProgWinVB/Clip%20Drag%20and%20Drop/ClipView/

GoodWin
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 09.04.2009 (Чт) 16:53

Re: Clipboard и все изображения

Сообщение GoodWin » 15.07.2012 (Вс) 22:11

Может тогда возможно вытянуть, данные из Excel другим способом.
Под "данными" я имею ввиду и текст и изображения.

Просто в парсинг Excel файлов не углублялся не когда и не имею представления об этом.
Вообще изначально задача была вытянуть весь текст и изображением. В таком же порядке в каком они находятся в Excel.
И уже в программе форматировать их и перетащить после форматирования в БД(MySql)

Формат данных Excel которые приходят от поставщика в магазин такой:
Код: Выделить всё
| Артикул  | Цена  |
+----------+-------+
|Фото, 1   | 1234р.|
|Фото, 2   | 1234р.|
|Фото, 3   | 1234р.|
|...       |...    |

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 15.07.2012 (Вс) 22:25

Какой формат? Если xlsx, то это заархивированный xml.

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Clipboard и все изображения

Сообщение Admiralisimys » 15.07.2012 (Вс) 22:53

Если продолжать развитие в сторону буфера обмена, то я бы остановился на формате данных DataFormats::Html
После копирования выделенной области с Excel в буфере будет так же HTML представление, где помимо прочего будут ссылки на картинки (предположительно в папку %TEMP%\msohtmlclip (вместо msohtmlclip может быть msohtmlclip1 и т.д.)).

А так поддерживаю вопрос Qwertiy, если формат действительно от Office 2007 и выше (xlsx) то для этого есть спец средства - http://msdn.microsoft.com/ru-ru/library/bb448854.aspx и можно обойтись без буфера обмена.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 15.07.2012 (Вс) 23:07

Admiralisimys писал(а):где помимо прочего будут ссылки на картинки

Думаешь, ссылки? Я за base64. Хотя и не знаю :)

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Clipboard и все изображения

Сообщение Admiralisimys » 15.07.2012 (Вс) 23:15

Qwertiy я проверял через ClipView, там при указании HTML представления появляется код который и содержит указанное (например <v:imagedata src="file:///C:\Users\User\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png" o:title=""/>).

P.S.
Но там же есть код вида
Код: Выделить всё
<v:shape id="Рисунок_x0020_5" o:spid="_x0000_s1026" type="#_x0000_t75"     style='position:absolute;margin-left:0;margin-top:102.75pt;width:96pt;     height:96pt;z-index:2;visibility:visible' o:gfxdata="UEsDBBQAB...

GoodWin
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 09.04.2009 (Чт) 16:53

Re: Clipboard и все изображения

Сообщение GoodWin » 16.07.2012 (Пн) 1:09

Формат приходит старый xls. Я выбрал буфер обмена - подумав, что легче будет это всего реализовать через него. Так как с библиотеками сторонними не очень охота связываться. Тем более сроки поджимают :)
DataFormats HTML пробовал там бред какой-то.
Изображения в порядке расположения в Excel пока удалось только вытащить преобразованием xls в xlsx и сохранив в html

raserg
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 24.01.2009 (Сб) 0:35
Откуда: Одесса

Re: Clipboard и все изображения

Сообщение raserg » 01.08.2012 (Ср) 0:40

Можно например та

Код: Выделить всё
Dim Apx As New Microsoft.Office.Interop.Excel.Application
        Dim book As Microsoft.Office.Interop.Excel.Workbook = Apx.Workbooks.Open(snam)
        Dim Shaap As Microsoft.Office.Interop.Excel.Shape
        Dim Sheets As Excel.Worksheet = CType(book.Worksheets(1), Excel.Worksheet)
        For Each Shaap In Sheets.Shapes
            Dim Артикул As String = ""
            Dim Цена As Decimal = 0
            Try
                Shaap.Copy()
            Catch ex As Exception
                '  MsgBox("ошибка копирования  + " & ex.Message)
            End Try

            If Shaap.Name.LastIndexOf("Comment") = -1 Then
                Try

                    If My.Computer.Clipboard.GetDataObject.GetDataPresent("PNG", False) Then
                        Dim bm1 = My.Computer.Clipboard.GetData("PNG")

                        Dim kkl = Image.FromStream(bm1)
                        Артикул = Sheets.Cells(Shaap.TopLeftCell.Cells.Row, 1)
                        Цена = Sheets.Cells(Shaap.TopLeftCell.Cells.Row, 2)
                        kkl.Save(Temp & "\" & Артикул & ".jpg")
                    End If

                Catch ex As Exception

                End Try
            End If

        Next
TopLeftCell


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

    TopList