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

Из StringGrid в массив

23.12.2013, 18:02. Показов 4119. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Я понимаю, что тема уже заезженная, но прошу помочь. Пробовал искать в интернете, ничего путного не получается..
Суть вот в чем: есть файл Excel в котором есть данные (числа, файл data.xlsx data.xlsx), эти данные нужно перенести в StringGrid (с эти я разобрался), переношу так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    Variant Excel = CreateOleObject("Excel.Application");
   //   Excel.OlePropertySet(WideString("Visible"), true);
    Variant Book = Excel.OlePropertyGet(WideString("Workbooks")).OlePropertyGet
        (WideString("Open"), WideString("C:\\data.xlsx"));
    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"));
А дальше из StringGrid нужно перенести в массив с которым в дальнейшем нужно работать.
И никак не получается(
Помогите пожалуйста..
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.12.2013, 18:02
Ответы с готовыми решениями:

Возможность вручную писать данные в ячейки StringGrid и заполнение ячеек StringGrid данными из файла после нажатия кнопки
Здравствуйте! Помогите, пожалуйста. Мне необходимо сделать следующее: реализовать возможность...

Из StringGrid в Excel-> Из Excel в StringGrid
Пишу программу котторая загружала бы таблицу .xls-&gt; редактирование -&gt;save -----.xls Как загружаь...

Сохранение из StringGrid массива в файл и загрузка из файла в StringGrid
Всем доброго времени суток =) У меня есть загрузка массива из StringGrid на Delphi 2010:...

11
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
23.12.2013, 18:10
А почему бы сразу не заполнить массив параллельно с заполнением StrigGrid ?

Проблема в создании 2-мерного массива ?
1
0 / 0 / 0
Регистрация: 26.10.2011
Сообщений: 33
23.12.2013, 19:36  [ТС]
Именно так. Одномерный массив заполняется вроде как нормально,а с двумерный ничего не получается, причем, совсем..

Добавлено через 1 час 16 минут
Цитата Сообщение от Kabak Посмотреть сообщение
А почему бы сразу не заполнить массив параллельно с заполнением StrigGrid ?

Проблема в создании 2-мерного массива ?
Не могли бы вы мне помочь?
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
23.12.2013, 20:10
Какие сложности вызывает заполнение двухмерного массива ? Ваш код заполнения двумерного массива покажите, пожалуйста.
1
0 / 0 / 0
Регистрация: 26.10.2011
Сообщений: 33
23.12.2013, 20:21  [ТС]
Если я не ошибаюсь, то должно выглядеть примерно так..
C++
1
2
3
4
5
for (i=0; i < cols; i++)
for (j=0; j < rows; j++)
    {
         mas[i][j] = StrToFloat(StringGrid1->Cells[i][j]);
    }
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
23.12.2013, 20:45
А как вы объявили массив ?
0
0 / 0 / 0
Регистрация: 26.10.2011
Сообщений: 33
23.12.2013, 20:58  [ТС]
C++
1
float **mas= new float * [cols*rows];
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
23.12.2013, 23:51
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// формируем двумерный массив типа float
float ** mas = new float* [rows];
for( i=0; i<=cols; i++ ){
    mas[i] = new float[cols];
}
 
// присваивание ...
for (i=0; i <= cols; i++)
for (j=0; j <= rows; j++)
    {
         mas[i][j] = StrToFloat(StringGrid1->Cells[i][j]);
    }
 
// Не забываем удалить перед завершением программы или перед созданием нового массива mas
delete [] mas;
1
0 / 0 / 0
Регистрация: 26.10.2011
Сообщений: 33
24.12.2013, 00:43  [ТС]
Спасибо огромное!

Добавлено через 12 секунд
Я только что сделал немного по другому, может кому-то еще пригодиться..
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
    Variant Excel = CreateOleObject("Excel.Application");
   //   Excel.OlePropertySet(WideString("Visible"), true);
    Variant Book = Excel.OlePropertyGet(WideString("Workbooks")).OlePropertyGet
        (WideString("Open"), WideString("C:\\data2.xlsx"));
    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);
                nmas[i][j]=StrToFloat(StringGrid1->Cells[i][j]);
        }
        /*
        for (int j = 0; j < rows; j++)
        for (int i = 0; i < cols; i++)
        {
            StringGrid2->Cells[i][j]=FloatToStr(nmas[i][j]);
        }
        */
    Excel.OleProcedure(WideString("Quit"));
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
24.12.2013, 09:40
Цитата Сообщение от Kabak Посмотреть сообщение
C++
1
2
// Не забываем удалить перед завершением программы или перед созданием нового массива mas
delete [] mas;
Такое удаление корректно освободит память для двумерного массива? для N-мерного?
1
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
24.12.2013, 10:51
Kulgar, спасибо что нашли ошибку.

C++
1
2
3
4
5
6
// Освобождаем память
for(int i = cols; 0 <= i; i-- ){
delete [] mas[i];
}
delete [] mas;
}
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
24.12.2013, 10:52
Цитата Сообщение от Kabak Посмотреть сообщение
Kulgar, спасибо что нашли ошибку.
Я и не знал, что это ошибка. Решил, что есть недокументированная возможность, о которой я не знаю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.12.2013, 10:52
Помогаю со студенческими работами здесь

Есть 2 StringGrid в С++ Builder, и нужно взять оттуда данные и заполнить ими 3 StringGrid, как бы сложить 2 та
Код C++ void __fastcall TForm1::Button1Click(TObject *Sender) { int i,j; float p,p1; for (i =...

Как соединить StringGrid с другим StringGrid (Rad xe8)
Здраствуйте. Проблема заключается в следующем: Есть таблица которая указана на 1 изображении ...

Вывести данные из StringGrid-ов на двух формах в StringGrid на третьей форме
Помогите,не разбираюсь,только учусь:(:wall:...Вообщем,имеется программа с 3 формами. На первой из...

Перенос данных из одного StringGrid в другой StringGrid
Здравствуйте . Есть очередной вопрос с матрицами. Есть два StringGrid. В одном столбце первой...

Перенос матрицы из одного StringGrid во второй StringGrid
Доброго времени суток. В обоих StringGrid убрал шапки и аннулировал. Такая проблема если при...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru