Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663

Передача цвета строк и цвета текста из stringgrid в excel и обратно

15.05.2015, 18:28. Показов 7081. Ответов 70
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня. Интересует вопрос передачи цвета строк и цвета текста из stringgrid в excel и желательно обратно, а так же формирование шапки и ширина страницы excel Помогите плиз, ссылкой или примером. Нагуглил чтото похожее только для дельфи, но в итоге еще больше запутался.

Нашел такое - работает, но как сформировать шапку и передать в эксель цвета - в затруднении...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    WideString str;
    TStringList *sl = new TStringList;
    for(int i = 0 ; i<StringGrid1->RowCount ;++i)
        {
            for(int j = 0; j< StringGrid1->ColCount;++j)
            str +=StringGrid1->Cells[j][i]+ "\t";
            sl->Add(Trim(str));
            str = "\n\r" ;
        }
        if (SaveDialog1->Execute())
            sl->SaveToFile(SaveDialog1->FileName);
            delete sl;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.05.2015, 18:28
Ответы с готовыми решениями:

Изменение цвета текста, когда код цвета берется с сервера
Есть задание : Отправить на сервер название цвета, получить от сервера цвет в формате RGB и изменить цвет текста в поле на полученный от...

ContextMenu изменение цвета выбора и цвета текста
Добрый день подскажите как сделать так что бы после выбора пункта меню цвет текста менялся обратно class...

Изменение цвета при клике и обратно
подскажите простенький код. пробую $(&quot;.wpfp-link&quot;).on(&quot;click&quot;, function() { $(&quot;.fa-heart&quot;).css('color') === '#f71e1e' ? ...

70
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
18.05.2015, 22:42
Студворк — интернет-сервис помощи студентам
Не ускорится, это однозначно медленный процесс, и чем больше строк - тем медленнее будет формироваться файл...
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
19.05.2015, 08:54  [ТС]
Ясно, спасибо. Может возможно реализовать индикацию данного процесса - сколько секунд осталось до его конца? Или как то по другому сделать индикацию(прогресс). У меня бывает и по 2000 строк. В принципе для создания норм. отчета можно и подождать, тем более он будет делаться не часто. Но индикация тогда нужна обязательно.
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
19.05.2015, 09:03
Цитата Сообщение от Sergey_03 Посмотреть сообщение
Но индикация тогда нужна обязательно.
Это еще больше нагрузка на производительность . Или же реализовывать в отдельном потоке.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
19.05.2015, 09:21  [ТС]
Незнаю, вряд ли это както сильно скажется на скорости формирования эхсель файла, а если скажется, то очень не значительно. Если отображать некий счетчик в какомнибудь лабеле

Добавлено через 12 минут
Вот так сделал
C++
1
2
3
4
5
6
for (int i = 0; i < Form26->StringGrid1->RowCount; ++i)
    {
          Label16->Caption = Form26->StringGrid1->RowCount;
              Label17->Caption = i;
                  for (int j = 0; j < Form26->StringGrid1->ColCount; ++j)
                             {........................................................
Работает, но может по времени можно? На скорость никак не влияет.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
19.05.2015, 09:28
Хотя... Попробуй вот это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    Variant Rng;
    for (int i = 0; i < StringGrid1->RowCount; ++i)
    {
        for (int j = 0; j < StringGrid1->ColCount; ++j)
        {
 
            Cell = WorkSheets.OlePropertyGet("Cells", i + 1, j + 1);
            Cell.OlePropertySet("Value", WideString(StringGrid1->Cells[j][i]));
        }
        Cell = WorkSheets.OlePropertyGet("Cells", 1, i + 1);
        Cell.OlePropertySet("ColumnWidth", 35);
        Rng = WorkSheets.OlePropertyGet("Range",
          WorkSheets.OlePropertyGet("Cells", i + 1, 1),                       // от этой ячейки
          WorkSheets.OlePropertyGet("Cells", i + 1, StringGrid1->ColCount));  // до этой
        Rng.OlePropertyGet("Interior").OlePropertySet("ColorIndex", 3);       // меняем цвет
        Rng.OlePropertyGet("Borders",9).OlePropertySet("LineStyle", 1);       // рисуем бордер
 
    }
, цвет и бордюр рисуются сразу для всей строки, может, будет чуть быстрее...

По поводу индикации - с секундами не подскажу, а вот процентное соотношение (ProgressBar) всегда добавить можно. Общее число строк в гриде тебе известно, индекс строки, которая сейчас обрабатывается - тоже. Выставляешь прогрессу минимум в 0, максимум в 100, делишь индекс текущей строки грида на общее число строк, умножаешь на 100%, отображаешь полученное значение в ProgressBar-е, и получаешь самую правильную индикацию.

Цитата Сообщение от Почтальен Посмотреть сообщение
еще больше нагрузка на производительность
Ну прямо, поделить одно число на другое - какая ж тут экстра-нагрузка? А в поток эти действия лучше не выносить, баги разгребать замучаешься, работать-то с гридом, он НЕпотокобезопасный, все равно все придется делать через Synchronize, то есть, опять же в контексте главного потока, то есть, смысла от доп.потока - еще меньше, чем без него, только нагрузку увеличишь... Да еще и COM в доп-потоке... Бррр... Лучше не нужно.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
19.05.2015, 17:54  [ТС]
странно, но записав в цикл
C++
1
ProgressBar1->Position = (i/Form26->StringGrid1->RowCount) * 100;
не хочет показывать..Что ему не нравится?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
19.05.2015, 18:16
Целочисленное деление меньшего на большее тебе всегда вернет 0. Приводи к типу double один из операндов:
C++
1
ProgressBar1->Position = ((double)i / Form26->StringGrid1->RowCount) * 100;
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
20.05.2015, 13:04  [ТС]
точно. спасибо!

Добавлено через 18 часов 46 минут
А не подскажите, как вот такую штуку задать для ячеек второго столбца?
Selection.NumberFormat = "dd/mm/yy h:mm;@"
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
20.05.2015, 13:46
C++
1
2
    WorkSheets.OlePropertyGet("Columns", WideString("B:B")).
        OlePropertySet("NumberFormat", WideString("dd/mm/yy h:mm;@"));
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
21.05.2015, 07:52  [ТС]
Спасибо. А вот как это обратно засунуть из экселя в грид? Нашел код на форуме
Из Excel в StringGrid
но не пашет - выдает ошибку библиотеки #include <Excel_XP.h>
может есть альтернатива?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
21.05.2015, 16:57
Что значит "выдает ошибку библиотеки"? Не должно ничего выдавать.
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
21.05.2015, 17:07  [ТС]
Как то не понятно. При подключении #include <Excel_XP.h>
начинается.
В зависимости от места подключения (среди инклюдов формы) выдает ошибки разных инклюдов.
Если поставить в самый верх - пишет
[BCC32 Error] Excel_XP.h(37485): E2040 Declaration terminated incorrectly
может не правильно подключаю?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
21.05.2015, 17:15
Я на кофейной гуще не гадаю. Будет точный текст ошибок - можно будет что-то советовать. Нет - разбирайся сам. Сколько было написано под RAD2009 с использованием этого заголовочного файла - не перечесть. Никогда ошибок не было.
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
21.05.2015, 17:26  [ТС]
При вставке кода на кнопку
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
#include <Excel_XP.h>
// ...
    Variant Excel = CreateOleObject("Excel.Application");
    Excel.OlePropertySet(WideString("Visible"), true);
    Variant Book = Excel.OlePropertyGet(WideString("Workbooks")).OlePropertyGet
        (WideString("Open"), WideString("C:\\test\\book1.xls"));
    Variant Sheet = Book.OlePropertyGet("Worksheets", 1);
 
    // активация последней заполненной ячейки
    Excel.OlePropertyGet("Cells").OlePropertyGet("SpecialCells",
        XlCellType::xlCellTypeLastCell).OleProcedure("Activate");
    // Получаем значение последней строки
    int rows = Excel.OlePropertyGet("ActiveCell").OlePropertyGet("Row");
    // Получаем значение последней колонки
    int cols = Excel.OlePropertyGet("ActiveCell").OlePropertyGet("Column");
    StringGrid1->ColCount = cols;
    StringGrid1->RowCount = rows;
 
    for (int j = 0; j < rows; j++)
        for (int i = 0; i < cols; i++)
            this->StringGrid1->Cells[i][j] =
                Sheet.OlePropertyGet(WideString("Cells"), j + 1, i + 1);
 
    Excel.OleProcedure(WideString("Quit"));
пишет такие ошибки
C++
1
2
3
4
5
6
7
8
[BCC32 Error] Office_XP.h(56): E2141 Declaration syntax error
[BCC32 Error] Office_XP.h(62): E2141 Declaration syntax error
[BCC32 Error] VBIDE_XP.h(60): E2141 Declaration syntax error
[BCC32 Error] VBIDE_XP.h(66): E2141 Declaration syntax error
[BCC32 Error] Excel_XP.h(60): E2141 Declaration syntax error
[BCC32 Error] Excel_XP.h(66): E2141 Declaration syntax error
[BCC32 Error] Unit26_Monitoring.cpp(5192): E2090 Qualifier 'XlCellType' is not a class or namespace name
[BCC32 Error] Unit26_Monitoring.cpp(5192): E2121 Function call missing )
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
21.05.2015, 17:45
Office_XP.h и VBIDE_XP.h - что за файлы? Откуда ты взял Excel_XP.h вообще?
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
21.05.2015, 17:50  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Office_XP.h и VBIDE_XP.h - что за файлы? Откуда ты взял Excel_XP.h вообще?
Excel_XP.h из борланда, Office_XP.h и VBIDE_XP.h тоже. Просто когда пишешь #include <Excel_XP.h> - возникают эти ошибки
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
21.05.2015, 17:52
Полный список всех include-ов можно привести? Потому что ничего подобного (именно на 2009-ой версии Билдера) не происходит, только сейчас открыл старый проект и посмотрел...
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
21.05.2015, 17:55  [ТС]
всех инклюдов откуда? с формы
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
#include "BiDiConverter.hpp"
#include <vcl.h>
#pragma hdrstop
#include "_Search.h"
#include "Unit1.h"
#include "Unit14_AddDevice.h"
#include "Unit21_Wait.h"
#include "Unit26_Monitoring.h"
#include "Unit38.h"
 #include <DateUtils.hpp>
#include "Unit32_Monitor_Option.h"
#include "Unit39_Read_History_def.h"
#include "Unit39_Read_History.h"
#include "../MonitoringTest\define_tm.h"
//#include "ANSII_protocol.h"
    #include "Lang_ru\Text.h"
    #include "Lang_ru\Text_List.h"
    #include "Lang_hb\Text.h"
    #include "Lang_hb\Text_List.h"
    #include "Lang_eng\Text.h"
    #include "Lang_eng\Text_List.h"
    #include "ext_Text_List.h"
#include "IniFiles.hpp"     //*****
 #include <memory>
 #include "mmsystem.h"
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
21.05.2015, 18:00
Ну, и в каком месте тут видно подключение Excel_XP? Просил же, ВСЕХ, а не кусок какой-то непонятный. К тому же, на кой BiDiConverter.hpp подключается в самом верху, еще до VCL? И уж совсем непонятно, зачем он подключается перед #pragma hdrstop. Ты вообще в курсе, что это за прагма, и зачем она нужна?
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
21.05.2015, 18:33  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
что это за прагма,
видимо ставится после инклюдов

Добавлено через 26 минут
Вот весь верх формы. дальше коды. Подскажите, как правильно, какие ошибки и куда поставить #include <Excel_XP.h>

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
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "_Search.h"
#include "Unit1.h"
#include "Unit14_AddDevice.h"
#include "Unit21_Wait.h"
#include "Unit26_Monitoring.h"
#include "BiDiConverter.hpp"
#include "Unit38.h"
#include <DateUtils.hpp>
#include "Unit32_Monitor_Option.h"
#include "Unit39_Read_History_def.h"
#include "Unit39_Read_History.h"
#include "../MonitoringTest\define_tm.h"
#include "Lang_ru\Text.h"
#include "Lang_ru\Text_List.h"
#include "Lang_hb\Text.h"
#include "Lang_hb\Text_List.h"
#include "Lang_eng\Text.h"
#include "Lang_eng\Text_List.h"
#include "ext_Text_List.h"
#include "IniFiles.hpp"     //*****
#include <memory>
#include "mmsystem.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//#pragma link "Excel_XP_srvr"
//#pragma link "FrontPage_XP_srvr"
#pragma link "AdvGrid"
#pragma link "AdvObj"
#pragma link "BaseGrid"
#pragma resource "*.dfm"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.05.2015, 18:33
Помогаю со студенческими работами здесь

Плавное изменение цвета объекта от зеленого до красного и обратно
Пишу программу, которая определяет качество связи с сервером, через посылку пакетов ping. На GUI есть индикатор в виде светодиода,...

Конвертировать формат описания цвета Series TChart в вещественный тип и обратно
Нужно сохранять график (координаты) и цвета, указывать тип серии - в файл, я думаю это будет типизированный файл вещественного типа. ...

Сформировать на экране N кругов (красного цвета) и N ромбов (синего цвета)
с клавиатуры набирается число N. Сформировать на экране N кругов (красного цвета) и N ромбов(синего цвета), заполняющих всё окно по...

Изменение цвета названия файла/папки (либо цвета подсветки)
Привет супер уважаемые супер форумчане!) Очень интересно, есть ли какой-то способ изменить цвет названия файла/папки, либо изменить цвет...

Изменение цвета ячейки StringGrid-a
Нужно изменять цвет ячеек во время работы программы, то есть показывать какая часть массива используется Делаю так var red : array...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru