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

Из Excel в StringGrid

19.12.2013, 14:38. Показов 6856. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Такая проблема: не могу перенести данные из Excel в StringGrid, выдает ошибку "Неверный тип переменной".
Код в кнопке:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char* a = "C:\\dannie.xls";
 Variant cnn;
 bool st = false;
 try
 {
  cnn = CreateOleObject("EXCEL.Application");
  st = true;
 }
 catch(...)
 {
  ShowMessage("Error open file");
  return;
 }
 
 cnn.OlePropertyGet("Workbooks").OlePropertyGet("open",a);
 this->StringGrid1->Cells[0][0] = cnn.OlePropertyGet("Cells",1,1);
Пробовал еще и так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
Variant Excel;
Variant Book;
Variant Sheet;
 
Excel=CreateOleObject("Excel.Application");
//Excel.OlePropertySet("Visible",true);  
Book=Excel.OlePropertyGet("Workbooks").OlePropertyGet("Open", "C:\\dannie");
Sheet=Book.OlePropertyGet("Worksheets", 1); 
 
this->StringGrid1->Cells[0][0]=Sheet.OlePropertyGet("Range", "A1"); 
 
Excel.OleProcedure("Quit");

Учусь в RAD XE2.
Помогите пожалуйста! Заранее спасибо!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.12.2013, 14:38
Ответы с готовыми решениями:

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

Из Excel в StringGrid
Подскажите как можно считать данные из Excel в StringGrid

Записать из StringGrid в Excel
Доброго времени суток, уважаемые форумчане! Пытаюсь записать из StringGrid в Excel. Записывается, но записывается не соответственно...

11
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
19.12.2013, 17:45
Тебе жалко проект выложить?
Я пробовал тебе помочь, только мой компилятор не знает функции CreateOleObject
А вручную искать недостающий хидер мне влом.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
19.12.2013, 18:24
Ises,
C++
1
2
3
4
5
6
7
8
9
10
11
//
    Variant Excel = CreateOleObject("Excel.Application");
    Excel.OlePropertySet(WideString("Visible"), true);
    Variant Book = Excel.OlePropertyGet(WideString("Workbooks")).OlePropertyGet
        (WideString("Open"), WideString("D:\\test\\book1.xls"));
    Variant Sheet = Book.OlePropertyGet("Worksheets", 1);
 
    this->StringGrid1->Cells[0][0] = Sheet.OlePropertyGet(WideString("Range"),
        WideString("A1"));
 
    Excel.OleProcedure(WideString("Quit"));
1
0 / 0 / 0
Регистрация: 26.10.2011
Сообщений: 33
19.12.2013, 18:41  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Ises,
C++
1
2
3
4
5
6
7
8
9
10
11
//
    Variant Excel = CreateOleObject("Excel.Application");
    Excel.OlePropertySet(WideString("Visible"), true);
    Variant Book = Excel.OlePropertyGet(WideString("Workbooks")).OlePropertyGet
        (WideString("Open"), WideString("D:\\test\\book1.xls"));
    Variant Sheet = Book.OlePropertyGet("Worksheets", 1);
 
    this->StringGrid1->Cells[0][0] = Sheet.OlePropertyGet(WideString("Range"),
        WideString("A1"));
 
    Excel.OleProcedure(WideString("Quit"));
Благодарю. Только почему записывается только одно первое число из ячейки А1? Пробовал поменять на
C++
1
this->StringGrid1->Cells[0][0] = Sheet.OlePropertyGet("Cells",1,1);
Все равно..
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
19.12.2013, 19:01
Цитата Сообщение от Ises Посмотреть сообщение
почему записывается только одно первое число из ячейки А1?
Потому что и в первом и во втором случае ты просишь компилятор сделать именно это... Содержимое нескольких разных ячеек XL за один раз в несколько разных ячеек грида записать невозможно. Только циклом...
1
0 / 0 / 0
Регистрация: 26.10.2011
Сообщений: 33
19.12.2013, 21:15  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Потому что и в первом и во втором случае ты просишь компилятор сделать именно это... Содержимое нескольких разных ячеек XL за один раз в несколько разных ячеек грида записать невозможно. Только циклом...
А не могли бы вы подсказать как организовать цикл? От чего до чего..
Если возможно, можно пример..?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
19.12.2013, 22:52
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Цитата Сообщение от Ises Посмотреть сообщение
как организовать цикл? От чего до чего..
Это смотря что тебе нужно читать... Вот так, например, будут прочитаны все заполненные ячейки на листе:

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
#include <Excel_XP.h>
// ...
    Variant Excel = CreateOleObject("Excel.Application");
    Excel.OlePropertySet(WideString("Visible"), true);
    Variant Book = Excel.OlePropertyGet(WideString("Workbooks")).OlePropertyGet
        (WideString("Open"), WideString("D:\\test\\book1.xls"));
    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"));
3
0 / 0 / 0
Регистрация: 26.10.2011
Сообщений: 33
19.12.2013, 23:44  [ТС]
А возможно ли, чтобы файл Excel'я не открывался в окне? Или без этого значения ячеек нельзя записать?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
20.12.2013, 01:08
Строку №4 из приведенного мной фрагмента закомментируй - не будет визуализироваться окно Excel-я.
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.04.2014, 11:22
Цитата Сообщение от UI Посмотреть сообщение
Строку №4 из приведенного мной фрагмента закомментируй - не будет визуализироваться окно Excel-я.
Что-то все равно показывается.
Цитата Сообщение от UI Посмотреть сообщение
C++
1
2
3
4
5
6
    Excel.OlePropertyGet("Cells").OlePropertyGet("SpecialCells",
        XlCellType::xlCellTypeLastCell).OleProcedure("Activate");
    // Получаем значение последней строки
    int rows = Excel.OlePropertyGet("ActiveCell").OlePropertyGet("Row");
    // Получаем значение последней колонки
    int cols = Excel.OlePropertyGet("ActiveCell").OlePropertyGet("Column");
И еще вопросик: как оперировать произвольным листом, а не выделенным?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
16.05.2014, 15:45
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Что-то все равно показывается.
В XP так и будет показываться, совершенно наплевав на свойство Visible. Под семеркой отрабатвает как ожидалось.
Цитата Сообщение от SatanaXIII Посмотреть сообщение
вопросик
Работа с OLE-сервером Excel
0
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
21.05.2016, 19:06
Тоже Определяю количество занятых ячеек (ячеек с информацией) в столбце файл-Excel, точнее номер последнего занятого столбца. При выполнении следующей команды:

C++
1
2
3
4
5
//Активация последней известной ячейки
   v_Var_Sheet.OlePropertyGet("Cells").OlePropertyGet("SpecialCells", 11).OleProcedure("Activate");
 
   //Узнать номер последнего известного столбца
   int i_ColLast = v_Var_Excel.OlePropertyGet("ActiveCell").OlePropertyGet("Column");
возникает ошибка при выполнении первой строки, если лист в Excel защищен. На незащищенном листе все нормально. Что делаю не так? может есть другой метод?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.05.2016, 19:06
Помогаю со студенческими работами здесь

Импорт из Excel в StringGrid
может кто кинуть код, как импортировать значения из ексель в стринггрид. моя задача объявить переменную со значениями из екселевского...

C++ Builder. Из StringGrid в Excel
Доброго времени суток! У меня возникла проблема, нужна ваша помощь. Задание следующее, дан StringGrid в котором фамилии и оценки, при...

Импорт из StringGrid в Excel
Здравствуйте! Я выделила столбец, который нужно заполнить: Cell=Sheet.OlePropertyGet(&quot;Range&quot;,&quot;D2:D201&quot;); ...

Экспорт из StringGrid в Excel
Доброго времени суток. Понимаю, что тема заезжанная, но мне нужна подсказка именно в таком контексте, а то я зациклилась. Вот так...

Вывод StringGrid в Excel
помогите кто может... как вывести StringGrid в Excel


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru