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

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

09.02.2015, 13:20. Показов 2214. Ответов 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
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
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
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
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
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
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
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
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
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
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
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru