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

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

15.05.2015, 18:28. Показов 7569. Ответов 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
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 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
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 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
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru