Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вытащить Picture из Excel 
V
    Опции темы
deniska
Дата 25.5.2010, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 398
Регистрация: 1.7.2005
Где: Троицк

Репутация: нет
Всего: 0



Один из вариантов вытаскивания картинки из экселя - через буфер обмена методом Copy (я уже скидывал недавно код). проблема в том, что такой способ нестабилен. (Иногда все картинки читаются нормально, иногда на какой-то (любой) эксель спотыкается на методе Copy с сообщением "Out of systen resources"и после этого ни одна картинка несчитывается в данной сессии экселя)

какие еще варианты считывания есть
PM MAIL ICQ   Вверх
Usper
Дата 26.5.2010, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Есть вариант сохранить документ в html, картинки, при этом, сохраняться в подпапку названиефайла.files


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
deniska
Дата 26.5.2010, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 398
Регистрация: 1.7.2005
Где: Троицк

Репутация: нет
Всего: 0



ок, допустим сохраним в отдельные файлы. но мне нужно знать какой рисунок на какой строке какого листа находился. имена картинкам эксель дает не осмысленные, а простым инкрементом index++. не пойдет
PM MAIL ICQ   Вверх
cyberstream
Дата 27.5.2010, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 7.9.2006

Репутация: 2
Всего: 4



Right click, Формат рисунка, Web, Замещающий текст
Заполняем картинкам эти поля 
Код

Pictures(I).ShapeRange.AlternativeText = "<хитрый_ID_[можно_и_формата_какой_рисунок_на_какой_строке_какого_листа_находился]>";
По ним в сохранённой html-ке можно будет выяснить, кому какое имя раздал Excel.
...
  </v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" alt="_our_fine_ID_"
   style='position:absolute;margin-left:28.5pt;margin-top:1.5pt;width:76.5pt;
   height:112.5pt;z-index:2'>
   <v:imagedata src="Книга4.files/image001.jpg"
...
Аналогично можно устанавливать соответствие через 
Код

Pictures(I).ShapeRange.ID //оказалось равным 1026  

И кажись, в документе Picture(i) упорядочены, упорядоченно и сохраняются - Picture(3) будет соответствовать оригинальный image005.jpg, Picture(4) - image007.jpg, ...

А "человеческого" native-метода вроде Picture.Export, похоже, smile

Это сообщение отредактировал(а) cyberstream - 27.5.2010, 00:29
--------------------
Не знаешь кого спросить? - Спроси google!
PM MAIL   Вверх
deniska
Дата 27.5.2010, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 398
Регистрация: 1.7.2005
Где: Троицк

Репутация: нет
Всего: 0



эта зараза еще и по разному сохраняет картинки: то есть для некоторых по одной штуке, а для некоторых по 2. smile 

в общем на данный момент вижу только 1 выход, правда очень кривой:

1. сначала сохраняем книгу как веб-страницу (и сразу вопрос: как это сделать программно) (Save As .... web) да простят меня модераторы за второй вопрос в теме.
2. открываем получившийся html файл, парсим его на предмет всех имеющихся тегов img и в них src с названием файла. это для того чтобы отфильтровать дублированные экселем картинки.
3. берем картинку с именем из src с диска

вот такой наикривейший способ... если кого озарит - велкам...

пс повторю возникший вопрос: как сохранить программно книгу в виде веб страницы. SaveAs метод нашел. просто расширение html? и поймет? 
PM MAIL ICQ   Вверх
Usper
Дата 28.5.2010, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Хм... Сохранение в HTML не сильно отличается от любого другого сохранения:
Код

#include  <ComObj.hpp>
void foo ()
{
    Variant App, Books, Book;
    try
    {
        App=CreateOleObject("Excel.Application");
    }
    catch (...)
    {
        Application->MessageBoxA("Не могу запустить сервер Microsoft Excel. Продолжение невозможно.",
            "Ошибка", MB_ICONERROR);
        return;
    }
    App.OlePropertySet("Visible",true);
    Books=App.OlePropertyGet("Workbooks");
    App.OlePropertySet("SheetsInNewWorkbook",3);
    Books.OleProcedure("Add");
    Book=Books.OlePropertyGet("Item",1);
    .........
    Book.OleFunction("SaveAs","c:\\delme.html",0x2C);
}



--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
deniska
Дата 28.5.2010, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 398
Регистрация: 1.7.2005
Где: Троицк

Репутация: нет
Всего: 0



Usper, как раз собирался написАть решение. собственно основной вопрос был в коде 0x2C
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0485 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.