1 / 1 / 0
Регистрация: 23.02.2014
Сообщений: 22
|
|
1 | |
Работа с полями Variant28.02.2015, 23:59. Показов 1943. Ответов 12
Метки нет Все метки)
(
Доброй ночи. Такой вопрос. Есть поле в Excel типа Variant, в нем находится изображение.
Как выгрузить из Excel данные я знаю. Как выгрузить картинку из поля книги Excel в делфи и куда его можно выгрузить? В OleContainer или Image. И как? Или можно через BitMap как-то сделать это(загрузить в BitMap и уже отсюда выгрузить в Image)?
0
|
28.02.2015, 23:59 | |
28.02.2015, 23:59 | |
Ответы с готовыми решениями:
12
Тип variant Тип variant invalid variant operation |
![]() 13108 / 5889 / 1707
Регистрация: 19.09.2009
Сообщений: 8,808
|
|
01.03.2015, 00:40 | 2 |
![]() Решение
1
|
1 / 1 / 0
Регистрация: 23.02.2014
Сообщений: 22
|
||||||
03.03.2015, 10:25 [ТС] | 3 | |||||
Теперь другая проблема. Программа вставляет сначала одну картинку во все поля, затем следующую. В итоге последняя картинка из коллекции объектов во всех полях. Т.Е. идет прорисовка каждой картинки в соответствующей ячейке, а по факту одно изобр. во всех ячейках.
Прилагаю код
Т.е. что получается, вышеуказанный код не прорисовывает картинку в StringGrid, а связывает её с источником, в данном случае с Буфером. И когда меняется содержимое буфера - меняется содержимое StringGrid. Так что ли? Получается мне необходимо все же сохранять изобр. В отдельные файлы и оттуда загружать их в стринггрид? Из буфера выгружать в StringGrid поочередно не выйдет?
0
|
![]() 13108 / 5889 / 1707
Регистрация: 19.09.2009
Сообщений: 8,808
|
||||||
03.03.2015, 15:55 | 4 | |||||
![]() Решение
Вот пример.
1
|
1 / 1 / 0
Регистрация: 23.02.2014
Сообщений: 22
|
||||||
04.03.2015, 00:16 [ТС] | 5 | |||||
Еще раз спасибо большое! Надо было строку
Добавлено через 1 час 56 минут Снова возник вопрос. А как скопировать в буфер уже содержимое ячейки, содержащей рисунок? Добавлено через 2 часа 21 минуту Листинг целой программы не нужен. Только код копирования из ячейки StringGrid в буфер или в Bitmap. Не нашел через поиск.
0
|
![]() 13108 / 5889 / 1707
Регистрация: 19.09.2009
Сообщений: 8,808
|
|||||||||||
04.03.2015, 12:19 | 6 | ||||||||||
На листе Excel рисунок (объект Excel.Shape) привязывается к той ячейке, на которую накладывается его верхний левый угол. Поэтому, получив ссылку на интерфейс объекта Excel.Shape, надо по координатам его верхнего левого угла определить координаты ячейки:
0
|
1 / 1 / 0
Регистрация: 23.02.2014
Сообщений: 22
|
|||||||||||
04.03.2015, 21:09 [ТС] | 7 | ||||||||||
Нее...может я не точно написал. Из ячейки StringGrida выгрузить в буфер. Не из Excel выгружать в буфер, а из StringGrid.Cell[i,j] в буфер.
Добавлено через 1 час 1 минуту Выгрузить изображение из ячейки StringGrida в буфер. Добавлено через 3 минуты Пробовал вот так
Добавлено через 3 часа 13 минут Даже так надо, выгрузить изображение из ячейки StringGrida в буфер и из буфера в Excel поместить Добавлено через 23 минуты Три дня уже вожусь с этой задачей... Подскажите хотя бы где почитать. Добавлено через 12 минут Вставку картинки в Excel сделал с помощью
0
|
![]() 13108 / 5889 / 1707
Регистрация: 19.09.2009
Сообщений: 8,808
|
||||||
04.03.2015, 21:48 | 8 | |||||
А там картинки (экземпляры TBitmap) прикреплены прямо к ячейкам - под видом объектов TStringGrid.Objects[Col, Row]. Вот эти объекты надо брать и в буфер обмена записывать.
Т. е., вот так. Например, пускай надо в буфер обмена скопировать картинку из первой нефиксированной строки:
1
|
1 / 1 / 0
Регистрация: 23.02.2014
Сообщений: 22
|
|
04.03.2015, 21:50 [ТС] | 9 |
Mawrat, где же ты раньше был
![]()
1
|
1 / 1 / 0
Регистрация: 23.02.2014
Сообщений: 22
|
|
27.03.2015, 09:39 [ТС] | 10 |
Товарищи форумчане, а как ускорить весь этот процесс? Если у меня 100 картинок в excel, пусть они небольшие (где 32*32 или 48*48). При загрузке из Excel мы получаем массив изображений, за одно обращение, а как ускорить весь этот процесс при сохранении изображений в Excel. Как сделать так, чтобы не обращаться каждый раз к эксель для сохранения очередной картинки? Как их вставить в диапазон?
0
|
![]() 13108 / 5889 / 1707
Регистрация: 19.09.2009
Сообщений: 8,808
|
|
27.03.2015, 15:27 | 11 |
Из Excel картинки всё же по очереди передаются - во время перебора элементов коллекции Shapes, одна за другой через буфер обмена Windows.
Как я понял, передача в Excel по такой же схеме реализована: Если надо передать 100 небольших изображений - это, вроде, быстро должно выполниться...
0
|
1 / 1 / 0
Регистрация: 23.02.2014
Сообщений: 22
|
|
27.03.2015, 15:52 [ТС] | 12 |
Mawrat, да, уже разобрался. Получается мы всего лишь получаем ссылку на коллекцию изображений и по-прежнему работаем с Excel через эту ссылку.
Ну как сказать... секунд 15 проходит. А если записей 1000 и того больше, около 2 минут Пробовал миновать выгрузку в стринггрид и использовать TObjectList - результат тот же. Есть ли возможность ускорить этот процесс?
0
|
![]() 13108 / 5889 / 1707
Регистрация: 19.09.2009
Сообщений: 8,808
|
|||||||||||
27.03.2015, 17:56 | 13 | ||||||||||
Основные затраты времени идут на выполнение методов MS Excel, COM взаимодействие и работу с буфером обмена.
Надо предпринять меры для ускорения обработки в самом MS Excel. Очень много времени тратится на перерисовку окна MS Excel. Если окно MS Excel сделать невидимым или отключить его перерисовку, то в некоторых случаях обработка ускоряется в сотни раз. Также можно отключить обработку событий.
0
|
27.03.2015, 17:56 | |
27.03.2015, 17:56 | |
Помогаю со студенческими работами здесь
13
Ошибка Invalid variant type
Not convert variant null to double Ошибка Record Array Of Variant Динамический массив of variant, почему ошибка? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Микросервис с нуля на Go с Kafka
stackoverflow 12.02.2025
Когда я впервые столкнулся с необходимостью разделить монолитное приложение на микросервисы, передо мной встал вопрос выбора правильных технологий и подходов. После долгих экспериментов с различными. . .
|
Микросервис с нуля на C# с RabbitMQ
stackoverflow 12.02.2025
Переход от монолитной архитектуры к микросервисной - это не просто модное веяние, а закономерный этап эволюции программных систем. В отличие от монолита, где все компоненты тесно связаны между собой. . .
|
Docker для начинающих
stackoverflow 12.02.2025
В современном мире разработки программного обеспечения все чаще возникает необходимость быстро и надежно разворачивать приложения в различных средах. Разработчики постоянно сталкиваются с проблемой. . .
|
Создание бота для Телеграм на C#
stackoverflow 12.02.2025
В современном мире корпоративных коммуникаций Telegram-боты становятся незаменимым средством автоматизации бизнес-процессов и взаимодействия с сотрудниками. Как создать такого бота, который сможет. . .
|
Операторы сравнения (== и ===) в JavaScript
hw_wired 12.02.2025
JavaScript предоставляет два основных оператора сравнения - оператор нестрогого равенства (==) и оператор строгого равенства (===). На первый взгляд они могут показаться очень похожими, но их. . .
|
Определение адреса, откуда репозиторий Git был клонирован
hw_wired 12.02.2025
Система контроля версий Git хранит всю информацию о репозитории в специальной директории . git, включая данные об удаленных источниках. Эта информация необходима для синхронизации изменений между. . .
|
Объединение нескольких коммитов Git в один
hw_wired 12.02.2025
Представьте, что вы работаете над новой функциональностью и создали десяток небольших коммитов: исправление опечатки, форматирование кода, добавление комментариев, реализация основной логики. Каждый. . .
|
Как добавить локальную ветку в удалённый репозиторий Git
hw_wired 12.02.2025
Локальная ветка в Git - это изолированная линия разработки, существующая только на вашем компьютере. Представьте себе дерево с множеством веток - каждая ветка может расти в своем направлении, не. . .
|
Статическое отражение в C++
stackoverflow 12.02.2025
Статическое отражение представляет собой мощный механизм, позволяющий программам анализировать и манипулировать своей собственной структурой во время компиляции. Эта возможность открывает. . .
|
C++ в 21 веке - Бьярне Страуструп
stackoverflow 12.02.2025
В современном мире разработки программного обеспечения C++ продолжает оставаться одним из ключевых языков программирования, несмотря на свой солидный возраст - более 45 лет с момента создания. За это. . .
|