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

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

15.05.2015, 18:28. Показов 7271. Ответов 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
33459 / 21559 / 8248
Регистрация: 22.10.2011
Сообщений: 37,016
Записей в блоге: 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
33459 / 21559 / 8248
Регистрация: 22.10.2011
Сообщений: 37,016
Записей в блоге: 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
33459 / 21559 / 8248
Регистрация: 22.10.2011
Сообщений: 37,016
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного. 1. Почему показания термометра заряжены целью? Цель заложена в самом. . .
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ По ссылке 403. Не очень информативно такую ссылку постить. Запись от Usaga размещена Сегодня в 06:46 . . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru