Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577

Экспорт картинки в Excel

09.02.2015, 13:20. Показов 2193. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

На форме имеется image, как отправить содержимое в Excel в указанное место, например: "A1:C10"?

Добавлено через 29 минут
Все перерыл))) ни чего нет. Может я пытаюсь колесо изобрести!?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.02.2015, 13:20
Ответы с готовыми решениями:

Экспорт в Excel
Всем привет, помогите пожалуйста как делать экспорт в excel?) На форме есть ADOTable, DBGrid Нужно при нажатии на кнопку...

Экспорт массива в Excel
Доброго времени суток. Проблемка такая: У меня есть пару гигабайт данных в массиве, которые нужно перегнать в Excel. Все работает пока я...

Экспорт из StringGrid в Excel
Доброго времени суток. Понимаю, что тема заезжанная, но мне нужна подсказка именно в таком контексте, а то я зациклилась. Вот так...

15
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
09.02.2015, 13:25
Через COM вероятнее всего.
0
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
09.02.2015, 13:27  [ТС]
Через OleContainer у меня ни чего не получается(((.
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
09.02.2015, 13:41
Худо.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
09.02.2015, 14:46
Заталкиваешь изображение в Clipboard, и
C++
1
2
    vVarSheet.OlePropertyGet("Cells").OlePropertyGet("Item",1,1).OleProcedure("Select");
    vVarSheet.OleProcedure("PasteSpecial", WideString("CF_BITMAP"));
, а потом выставляешь размер картинки (ширину столбцов/высоту строк тоже несложно получить) через изменение свойств Width/Height последнего элемента коллекции InlineShapes (это именно та картинка, которая только что добавлена на лист)

Где проблема-то?
1
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
09.02.2015, 18:01  [ТС]
Отправил картинку из image в буфер:
C++
1
 Clipboard()->Assign(Image1->Picture);
Предварительно, подключив
C++
1
#include <clipbrd.hpp>
.

Билдер ругается на:
C++
1
2
vVarSheet.OlePropertyGet("Cells").OlePropertyGet("Item",1,1).OleProcedure("Select");
    vVarSheet.OleProcedure("PasteSpecial", WideString("CF_BITMAP"));
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
09.02.2015, 18:06
Как именно ругается, и какой Билдер? У меня на XE2 не ругается, а просто вставляет картинку куда положено. OfficeXP, если что.
0
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
09.02.2015, 18:12  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
и какой Билдер
6-ой
Название: 1.JPG
Просмотров: 96

Размер: 12.9 Кб
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
09.02.2015, 18:58
Рассказывай, как открываешь excel, и сам файл.
0
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
10.02.2015, 06:08  [ТС]
Открытие Excel
.h
C++
1
2
3
4
5
6
7
8
9
private:    // User declarations
Variant  vVarApp,  //приложение
         vVarBooks, //набор книг
         vVarBook, // книга
         vVarSheets,//набор страниц
         vVarSheet, //страница
         vVarCells,//ячейки
         vVarCell; //ячейка
bool     fStart; // служит индикатором того, что сервер запущен
.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 if(!fStart)
 {
  try
   {
     vVarApp=CreateOleObject("Excel.Application");
     fStart=true;
   }
  catch(...)
   {
     MessageBox(0, "Ошибка при открытии сервера Excel", "Ошибка", MB_OK);
     return;
   }
 }
 //установка свойства
 vVarApp.OlePropertySet("Visible",true);
 
 //Переменной vVarBooks присваивается значение Workbooks - свойство
 //объекта Excel.Application, содержащее набор рабочих книг Excel.
 vVarBooks=vVarApp.OlePropertyGet("Workbooks");
 
 //SheetsInNewWorkbook задает количество листов в создаваемой книге,
 //пусть в первой книге их будет 1 страница (лист)
 vVarApp.OlePropertySet("SheetsInNewWorkbook",1);
 
 //Добавляем книгу из 1 листов в объект vVarBooks.
 vVarBooks.OleProcedure("Add");
 
 //Переменная vVarBook содержит ссылку на текущую книгу.
 //(Пусть текущая книга будет первая).
 vVarBook=vVarBooks.OlePropertyGet("Item",1);
 
 //Переменной vVarSheets присваиваем значение
 //Worksheets - свойство объекта Excel.Application,
 //содержащее набор страниц книги Excel.
 vVarSheets=vVarBook.OlePropertyGet("Worksheets");
 
 //берем первый лист
 vVarSheet=vVarSheets.OlePropertyGet("Item",1);
 //задаем новое имя листу
 vVarSheet.OlePropertySet("Name","Имя листа");
 
       Clipboard()->Assign(Image1->Picture);
      vVarSheet.OlePropertyGet("Cells").OlePropertyGet("Item",1,1).OleProcedure("Select");
      vVarSheet.OleProcedure("PasteSpecial", WideString("CF_BITMAP"));
}
Картинка по сути находится в БД, но я ее выгружаю предварительно в Image/
Код выгрузки в Image:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 if(!(TBlobField*)ADOQuery1->FieldByName("foto")->IsNull)
    {
     if(!Form1->Image1->Visible)
        Form1->Image1->Visible=true;
     TMemoryStream* strm = new TMemoryStream;
     TJPEGImage *ptJpg=new TJPEGImage;
     ((TGraphicField*)ADOQuery1->FieldByName("photo"))->SaveToStream(strm);
     strm->Seek(0,0);
     if (*(Word*)strm->Memory == 0xD8FF)
        Form1->Image1->Picture->Graphic=ptJpg;
        Form1->Image1->Picture->Graphic->LoadFromStream(strm);
        delete strm;
        delete ptJpg;
    }
    else
     Form1->Image1->Visible=false;
    }
Как то так)))
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
10.02.2015, 12:34
Не хочется тебя огорчать, но приведенный тобой код работает без сбоев (XE2 + OfficeXP + Win7), за исключением того, что изображение у меня просто назначалось через инспектор объектов, а не вытягивалось из БД. Так что делай выводы. Опять, разумеется, "в Builder 6 нет глюков" (С), это у меня глючит, да?
0
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
10.02.2015, 12:40  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
изображение у меня просто назначалось через инспектор объектов
На отдельном примере я как раз таки и отрабатывал этот код. Создал новый проект, через инспектор добавил изображение и результат в 8 посте.

Добавлено через 38 секунд
Видимо проблема в ОС
0
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
10.02.2015, 12:53  [ТС]
Вот проект, все сделано как и у Вас, но он не фурычит))) и дело тут не в БД.
картинка.7z
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
10.02.2015, 13:07
Странно. Попробуй просто:
C++
1
2
 vVarSheet.OlePropertyGet("Cells").OlePropertyGet("Item",1,1).OleProcedure("Select");
 vVarSheet.OleProcedure("PasteSpecial");
, что скажет?
1
 Аватар для Within_t
34 / 21 / 11
Регистрация: 20.10.2013
Сообщений: 577
10.02.2015, 13:32  [ТС]
Заработало))) теперь нужно с размерами разобраться)))
0
0 / 0 / 0
Регистрация: 09.11.2014
Сообщений: 4
01.02.2019, 04:54
Здравствуйте, ситуация та же самая, однако код из примеров у меня выдает ошибку.

После изучения темы все таки удалось заставить его работать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    vVarApp=CreateOleObject("Excel.Application");
 
   vVarBooks=vVarApp.OlePropertyGet("Workbooks");
 
   vVarApp.OlePropertySet("SheetsInNewWorkbook",9);
   vVarBooks.OleProcedure("Add");
 
   vVarBook=vVarBooks.OlePropertyGet("Item",1);
   vVarSheets=vVarBook.OlePropertyGet("Worksheets");
 
   vVarSheet=vVarSheets.OlePropertyGet("Item",1);
   vVarSheet.OlePropertySet("Name","i");
 
   vVarSheet=vVarSheets.OlePropertyGet("Item",2);
   vVarSheet.OlePropertySet("Name","Draft, 1p");
 
   Clipboard()->Assign(Image1->Picture);
 
   vVarSheet.OlePropertyGet("Cells").OlePropertyGet("Item",1,6).OleProcedure("PasteSpecial");
Моя проблема состоит в следующем, на лист excel вставляется изображение исходного размера (800*800 пикселей), а мне бы хотелось как-то варьировать размерами изображения помещаемого на лист excel, но при этом не меняя размеры изображения в компоненте TImage на форме.

Помогите пожалуйста разобраться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.02.2019, 04:54
Помогаю со студенческими работами здесь

Экспорт в EXCEL
Доброго времени суток всем. Знаю, в интернете полно информации ою экспорте из DBGrid в EXCEL, но я решил сам разобраться и сделать его...

Экспорт из AdoQuery в Excel
Пишу Димпломный проект. ТЗ - БД Учёт технического оборудования, создал бд, теперь мне нужно выгрузить из AdoQuery данные в Excel. Кто...

Экспорт данных в Excel
Добрый день! Знаю что затертая тема, но такая ситуация, сделал все бд, осталось только вывести несколько табличек в Excel или Word (лушче в...

Экспорт из DBGrid в Excel
Здравствуйте!!! кто-нить может подсказать как вывести инфу из DBGrid в excel ???

Экспорт из DBGrid1 в Excel
Здравствуйте дорогие форумчане. Есть рабочая программа, где работает Экспорт в Excel, но только через Мемо: Variant vVarApp,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru