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

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

15.05.2015, 18:28. Показов 7420. Ответов 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
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
01.06.2015, 23:10  [ТС]
Студворк — интернет-сервис помощи студентам
Через сейф-диалог у меня перезаписывает файл полностью. Выдает сообщение - файл существует в данном месте -> заменить?
И возможно ли защиту от ошибки поставить, если файл открыт? Если открыт - с ошибкой вылетает при сохранение.
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
02.06.2015, 09:44
Еще про запись в определенную ячейку - тоже известно
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33478 / 21576 / 8250
Регистрация: 22.10.2011
Сообщений: 37,034
Записей в блоге: 12
02.06.2015, 09:57
Цитата Сообщение от Sergey_03 Посмотреть сообщение
Выдает сообщение - файл существует в данном месте -> заменить?
С этой ошибкой несколькими постами раньше вроде разобрались. Надо сохранять не Application, а именно Workbook, тогда ошибки быть не должно. Если она все-таки проявляется - то показывай полный код открытия Excel-я, инициализации всех Variant-переменных (особенно интересует именно получение первого WorkBook-а), и код сохранения (заполнение ячеек можно пропустить, это тут не главное). Полностью, именно то, что делается у тебя, а не "как-то вот так". Всё, включая получение имени файла из SaveDialog-а. Особенно интересует то, с каким расширением то самое имя файла.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
02.06.2015, 17:31  [ТС]
Сейчас выписал, то что касается экселя, пытаюсь все по полкам разложить. Все то, что было раньше - работает, но идут ошибки при сохранении, если файл открыт и ошибка при отказе от сохранения, то есть, если просто нажать крестик в углу формы подтверждения.
Сейчас пытаюсь сделать так, чтобы из грида сохраняло в уже созданный файл эксель в 3-ий лист начиная с 42 столбца и 2-ой строки, не перезаписывая весь эксель, потому-что куча данных на других листах и на листе 3 в том числе.
Даже при таком варианте уже пишет 'ошибка'
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if (SaveDialog1->Execute())
    {
        WideString str;
        Variant Ex = CreateOleObject("Excel.Application");
        Ex.OlePropertySet("Visible", false);
        Ex.OlePropertySet("SheetsInNewWorkbook", 1);
        Ex.OlePropertyGet("WorkBooks").OleFunction("Add", 1);
        Variant Cell;
        Variant WorkSheets = Ex.OlePropertyGet("WorkSheets", 1);
        WorkSheets.OleProcedure("SaveAs", StringToOleStr(SaveDialog1->FileName));
        for (int i = 0; i < StringGrid1->RowCount; ++i)
            {
                for (int j = 1; j < StringGrid1->ColCount; ++j)
                    {
                        Cell = WorkSheets.OlePropertyGet("Cells", i + 2, j + 41);
                        Cell.OlePropertySet("Value", WideString(StringGrid1->Cells[j][i]));
                    }
            }
        WorkSheets.OleProcedure("Save");
        Ex.OleProcedure("Quit");
    }
Ну...ясно, что я неправильно делаю. Хотелось бы сделать правильно не в плане, чтоб как то работало, а чтобы работало и было именно правильно.
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
02.06.2015, 17:50
Может стоит подумать об обработчиках событий ? Например, при закрытии на крестик, писать в обработчике условие - если объект экселя существует, тогда закрываем его.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33478 / 21576 / 8250
Регистрация: 22.10.2011
Сообщений: 37,034
Записей в блоге: 12
02.06.2015, 18:45
Цитата Сообщение от Sergey_03 Посмотреть сообщение
Сейчас пытаюсь сделать так, чтобы из грида сохраняло в уже созданный файл эксель в 3-ий лист начиная с 42 столбца и 2-ой строки, не перезаписывая весь эксель
Пардон, если у тебя уже что-то есть, почему ты создаешь новый файл, и сохраняешь его на место старого? Не лучше будет открыть уже существующий файл, заменить в нем нужные ячейки, и сохранить его?
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
02.06.2015, 18:55  [ТС]
Конечно лучше, но у меня так не получается пока.
Там две задачи. И с новым надо было и с уже существующим. Я так понимаю, что во втором случае(последний код)я создаю новый файл - CreateOleObject("Excel.Application");, вместо того, чтобы открыть уже созданный. А как тогда открывать и закрывать уже созданные файлы без ошибок? Еще хотел попробовать при открытии не иметь возможности открыть что то, кроме эксель файла. А то если с другим расширением тыкнуть - естественно ошибка сразу.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33478 / 21576 / 8250
Регистрация: 22.10.2011
Сообщений: 37,034
Записей в блоге: 12
02.06.2015, 19:15
Цитата Сообщение от Sergey_03 Посмотреть сообщение
А как тогда открывать и закрывать уже созданные файлы без ошибок?
Через
C++
1
Ex.OlePropertyGet("Workbooks").OleFunction("Open", StringToOleStr(OpenDialog1->FileName));
Цитата Сообщение от Sergey_03 Посмотреть сообщение
Еще хотел попробовать при открытии не иметь возможности открыть что то, кроме эксель файла
Ограничь расширения показываемых OpenDialog-ом файлов только теми, которые нужны:



. Другие даже отображаться не будут... А если юзер введет название неЭкселевского файла вручную, то OnCanClose:
C++
1
2
3
4
5
void __fastcall TForm1::OpenDialog1CanClose(TObject *Sender, bool &CanClose)
{
    TOpenDialog *od = static_cast<TOpenDialog*>(Sender);
    CanClose = od->Filter.Pos(ExtractFileExt(od->FileName)) > 0;
}
не даст закрыться диалогу...
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
02.06.2015, 19:43  [ТС]
Точно. Открывать же надо, а не сохранять... Спасибо. Буду пробовать.
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
08.06.2015, 20:41  [ТС]
Переделал - работает. Осталась одна ошибка - возникает, если отказываться от замены(перезаписи) файла. И странное явление. Если файл сохранять под новым именем - все отлично, а если заменять(перезаписывать) существующий - секунд 10 думает о чем-то, потом все таки перезаписывает. Подскажите, в чем проблема может быть - перерыл все, что можно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if (SaveDialog1->Execute())
    {   Variant app, Rang, vCell, sheet, cell;
            app = CreateOleObject("Excel.Application");
            app.OlePropertySet("Visible",0);
            app.OlePropertySet("SheetsInNewWorkbook", 1);
            app.OlePropertyGet("WorkBooks").OleFunction("Add", 1);
            sheet = app.OlePropertyGet("WorkSheets", 1);
            //-----ВСЯКОЕ РАЗНОЕ
            Variant wbs = app.OlePropertyGet("Workbooks").OlePropertyGet("Item", 1);
            try
                {
                           wbs.OleProcedure("SaveAs", StringToOleStr(SaveDialog1->FileName));
                 }
            catch (...)
                {
                            Form1->Message0( "Error open Microsoft Excel!" ,
                         "Error",MB_OK+MB_ICONERROR);
                 }
            //  Form39->Visible = 1;
                wbs.OleProcedure("Save");
        app.OleProcedure("Quit");
         }
Спасибо.
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
10.06.2015, 15:10  [ТС]
вот это отключает сообщения и как следствие - вышеназванные ошибки.
app.OlePropertySet("DisplayAlerts",false );
но хотелось бы написать без этого.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.06.2015, 15:10

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
71
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru