Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
 Аватар для FreeWay
84 / 84 / 19
Регистрация: 17.12.2007
Сообщений: 574

Ошибка при работе с экселем

20.07.2009, 19:08. Показов 1945. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!!!!!
Подскажите помогите пж разобраться с ошибкой.
База ацесовская, конект посредством адо, билдер 2009
Есть экселевский файлик, открываю его, загоняю данные, вот и все

рабочий код:

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
void __fastcall Tmain_f::BitBtnSendToExcelClick(TObject *Sender)
{
//*здаем объект
AnsiString WayToXLSFile=ExtractFilePath(Application->ExeName)+"Print.xls";
Variant Excel;
Excel=CreateOleObject("Excel.Application");
Excel.OlePropertyGet("Workbooks").OlePropertyGet("Open",WayToXLSFile.c_str() );
Excel.OlePropertySet("Visible",true);
//*
 
//*Заполняем лист эксель
//*B - колонка блюд
//* id_component - 5 строка
 
int         Row         = 0,
            CountIdComp = 1,
            i           = 112;
 
float        id_comp     = 0;
 
AnsiString  Col         = "",
            Rang        = "";
 
String        Text        = "";
 
 
//*Завтрак
Row=7;   //* 7 строка - первое блюдо завтрака
SQLCommand ("SELECT * FROM Dish WHERE Owner=1", 0, "");
while (!QuerySQLCommand->Eof)
      {
         //название Блюда
         //Col="B";
         Rang.Insert("B",1);
         Rang.Insert(Row,2);
         Text=QuerySQLCommand->FieldByName("Dish_name")->AsString;
         Excel.OlePropertyGet("Range", Rang.c_str()).OlePropertySet("Value", Text.c_str());
 
            while (i > 0)
                {
 
                  id_comp =QuerySQLCommand->FieldByName("Comp_id"+IntToStr(CountIdComp))->AsFloat; //*id_comp выгребаем значение компонента
                     if (id_comp>0)
                        {
                          GetCelComp(CountIdComp);       //* по айдишке компонента выбераем позицию этого компон в экселе
                          CelComp=CelComp+IntToStr(Row); //* позиция колонка+строка
                          Excel.OlePropertyGet("Range", CelComp.c_str()).OlePropertySet("Value", id_comp); //* id_comp - вес компонента
                        }
                  CountIdComp ++;
                  i --;
                }
 
         Row         ++;
         Rang        ="";
         i           = 112;
         CountIdComp = 1;
 
         QuerySQLCommand->Next();
    }
//* конец Завтрак
 
ListBoxDinner->Clear();
SQLCommand ("UPDATE Dish SET Owner=0 ", 1, "");
}
для ясности Owner=1 это признак завтрака, есть грид, по которому пользователь щелкает заполняя меню - завтрак - Owner=1, обед - Owner=2 и т д
этот код отрабатывает правильно
когда добавляю еще обед (далее надо будет добавить ужин, 2 ужин)
вот код:

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
void __fastcall Tmain_f::BitBtnSendToExcelClick(TObject *Sender)
{
//*здаем объект
AnsiString WayToXLSFile=ExtractFilePath(Application->ExeName)+"Print.xls";
Variant Excel;
Excel=CreateOleObject("Excel.Application");
Excel.OlePropertyGet("Workbooks").OlePropertyGet("Open",WayToXLSFile.c_str() );
Excel.OlePropertySet("Visible",true);
//*
 
//*Заполняем лист эксель
//*B - колонка блюд
//* id_component - 5 строка
 
int         Row         = 0,
            CountIdComp = 1,
            i           = 112;
 
float        id_comp     = 0;
 
AnsiString  Col         = "",
            Rang        = "";
 
String        Text        = "";
 
 
//*Завтрак
Row=7;   //* 7 строка - первое блюдо завтрака
SQLCommand ("SELECT * FROM Dish WHERE Owner=1", 0, "");
while (!QuerySQLCommand->Eof)
      {
         //название Блюда
         //Col="B";
         Rang.Insert("B",1);
         Rang.Insert(Row,2);
         Text=QuerySQLCommand->FieldByName("Dish_name")->AsString;
         Excel.OlePropertyGet("Range", Rang.c_str()).OlePropertySet("Value", Text.c_str());
 
            while (i > 0)
                {
 
                  id_comp =QuerySQLCommand->FieldByName("Comp_id"+IntToStr(CountIdComp))->AsFloat; //*id_comp выгребаем значение компонента
                     if (id_comp>0)
                        {
                          GetCelComp(CountIdComp);       //* по айдишке компонента выбераем позицию этого компон в экселе
                          CelComp=CelComp+IntToStr(Row); //* позиция колонка+строка
                          Excel.OlePropertyGet("Range", CelComp.c_str()).OlePropertySet("Value", id_comp); //* id_comp - вес компонента
                        }
                  CountIdComp ++;
                  i --;
                }
 
         Row         ++;
         Rang        ="";
         i           = 112;
         CountIdComp = 1;
 
         QuerySQLCommand->Next();
    }
//* конец Завтрак
 
 
//*обед
Row=19;   //* 19 строка - первое блюдо обеда
SQLCommand ("SELECT * FROM Dish WHERE Owner=2", 0, "");
while (!QuerySQLCommand->Eof)
      {
         //название Блюда
         //Col="B";
         Rang.Insert("B",1);
         Rang.Insert(Row,2);
         Text=QuerySQLCommand->FieldByName("Dish_name")->AsString;
         Excel.OlePropertyGet("Range", Rang.c_str()).OlePropertySet("Value", Text.c_str());
 
            while (i > 0)
                {
 
                  id_comp =QuerySQLCommand->FieldByName("Comp_id"+IntToStr(CountIdComp))->AsFloat; //*id_comp выгребаем значение компонента
                     if (id_comp>0)
                        {
                          GetCelComp(CountIdComp);       //* по айдишке компонента выбераем позицию этого компон в экселе
                          CelComp=CelComp+IntToStr(Row); //* позиция колонка+строка
                          Excel.OlePropertyGet("Range", CelComp.c_str()).OlePropertySet("Value", id_comp); //* id_comp - вес компонента
                        }
                  CountIdComp ++;
                  i --;
                }
 
         Row         ++;
         Rang        ="";
         i           = 112;
         CountIdComp = 1;
 
         QuerySQLCommand->Next();
    }
//* конец обед
 
 
 
 
ListBoxDinner->Clear();
ListBoxBreakFast->Clear();
SQLCommand ("UPDATE Dish SET Owner=0 ", 1, "");
}
при этом коде выдает жуткую ошибку((
ошибка в скрине...

при этом экселевский файлик открывается и первое блюдо завтрака вставляется
Миниатюры
Ошибка при работе с экселем  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.07.2009, 19:08
Ответы с готовыми решениями:

При работе с экселем через VB, ексел виснет в процессаах
Постоянно подвисает Exel в процессах Dim Exl As Object = CreateObject("Excel.Application") Dim Workbook as object =...

Некорректное отображение символов при работе с экселем и вордом
Доброго времени суток, прошу помощи. Не могу разобраться что нужно сделать для корректного отображения символов в Word и Excel. ...

Аппаратная ошибка видео (Ошибка при работе с видеоустройствами привела к некорректной работе Windows).
Аппаратная ошибка видео. Последнее время во время игры Call of Duty: Modern Warfare 2 в мультиплеер, (между сменами карт, как только...

1
 Аватар для FreeWay
84 / 84 / 19
Регистрация: 17.12.2007
Сообщений: 574
28.07.2009, 14:07  [ТС]
разобрался, оказывается в экселе в ячейках (начиная с обеда) в которые я пытался пихать инфу было условие на значение, вот оно и отваливалось.

кстати вот тут:
C++
1
Excel.OlePropertyGet("Range", Rang.c_str()).OlePropertySet("Value", Text.c_str());
нужно использовать
C++
1
 Excel.OlePropertyGet("Range", Rang.c_str()).OlePropertySet("Value", Text.t_str());
чтоб слова не обрезались
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.07.2009, 14:07
Помогаю со студенческими работами здесь

Ошибка при использовании ADODB.CONNECTION при работе с dbf-файлом
Добрый день! Написала макрос с использованием adodb.connection. макрос удаляет строки из файла dbf. На моем компьютере работает, поставила...

Логическая ошибка при выполнении простой модели при работе с очередями с использованием приоритетов
Здравствуйте уважаемые форумчане! работаю в Anylogic 7.0. При построении простой системы массового обслуживания, с использованием...

Не является внутренней или внешней командой - ошибка не при компиляции а при работе программы
В VS скомпилировал код #include <iostream> using namespace std; int main() { int a; cout<<"Hallo"; cin>>a; ...

Ошибка при построении запроса к БД при работе с dateTimePicker
Выдает ошибку при построении запроса в аксессе 2003. Раньше не работал с dateTimePicker и поэтому не понимаю где именно ошибка. Помогите...

Ошибка при работе с ComboBox при использовании FindComponent
Есть комбобокс, список в него загружается из стринггрида. Потом по выбранному значению в комбобоксе лабелю присваивается соответствующее...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru