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

Из StringGrid в массив

23.12.2013, 18:02. Показов 4088. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru