Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/138: Рейтинг темы: голосов - 138, средняя оценка - 4.76
 Аватар для Anest Tasanta
1 / 1 / 0
Регистрация: 10.04.2009
Сообщений: 14

Excel и С++ Builder

10.04.2009, 07:06. Показов 25934. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, проблема такая:

Есть программа на С++, которая копирует файлы...
Как сделать так, чтобы отчет о выполнении сохранялся в .xls? Записывалось имя файла и дату копирования.
Даже не знаю как подойти. Пишите пожалуйста подробно
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.04.2009, 07:06
Ответы с готовыми решениями:

Cpp builder-Ole-Excel. WideString пишет в ячейку Excel минус перед нулем
Здравствуйте! Посмотрите пожалуйста: Когда аргумент val == 0, в ячейку Excel пишется "-0". Без WideString все нормально - в...

Builder and Excel
Чуваки, я извиняюсь))) Помощь нужна) Заключительные штришки остались) Значит такс, есть форма. На ней, я выбираю преподавателей,...

C++ Builder и Excel
Здравстуйте. Задание: написать программу, которая считывает данные из txt-файла и по ним формирует отчет в Excel. Программа...

41
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
07.06.2009, 20:53
Студворк — интернет-сервис помощи студентам
а ну выложи не текст, а именно проект, у меня такое было, когда в хидер помещал эту библиотеку, типа конфикт между двумя классами
0
0 / 0 / 1
Регистрация: 03.06.2009
Сообщений: 19
07.06.2009, 20:56
напиши мыло отправлю
0
0 / 0 / 1
Регистрация: 03.06.2009
Сообщений: 19
07.06.2009, 20:58
вот
Вложения
Тип файла: rar OLE - Excel2.rar (17.9 Кб, 137 просмотров)
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
07.06.2009, 20:58
да сюда прикрепи, в расширенном режиме, удали только tds, obj, exe
0
0 / 0 / 1
Регистрация: 03.06.2009
Сообщений: 19
07.06.2009, 21:00
прикрепил (сообщение выше)
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
07.06.2009, 21:05
C++
1
2
3
4
#include "main.h"
#include <OleServer.hpp>
#include <Excel_2K_SRVR.h>
#include <utilcls.h>
1
0 / 0 / 1
Регистрация: 03.06.2009
Сообщений: 19
07.06.2009, 21:09
Excel_2K_SRVR.h ну с этой штукой проблем больше нет, но с остальным осталось
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
07.06.2009, 21:18
ну а там уже ошибки в коде за тобой, главное, что эксель в проект сел
0
0 / 0 / 1
Регистрация: 03.06.2009
Сообщений: 19
08.06.2009, 21:58
ну дело в том что он и сидел, а ошибки те и были и с тем h файлом и без него

Добавлено через 5 часов 16 минут 35 секунд
Excel_2K_SRVR.h
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.06.2009, 09:55
у тебя он конфликтовал, конфликты я устранил, но править весь код, извини, не хочется, тем более там уже не так уж все и сложно, ты переменную sh (вроде бы) объяви там со звездочкой, тогда еще часть ошибок уйдет
0
0 / 0 / 0
Регистрация: 13.03.2009
Сообщений: 27
10.06.2009, 13:53
[BCC32 Error] Unit1.cpp(374): E2451 Undefined symbol 'RangePtr'

скажите отчего эта ошибка возникает с вышеизложенным кодом?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
10.06.2009, 13:59
ну вообще пишет, что вроде бы нет точки с запятой, покажи сам кусок с ошибкой
0
0 / 0 / 0
Регистрация: 13.03.2009
Сообщений: 27
10.06.2009, 15:29
C++
1
RangePtr my_range;
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
10.06.2009, 15:46
да весь покажи, иногда билдер пишет массу ошибок, но большинство это как следствие той одной самой важной
0
0 / 0 / 0
Регистрация: 13.03.2009
Сообщений: 27
10.06.2009, 15:49
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
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include <Excel_2K_SRVR.h>
 
#pragma package(smart_init)
#pragma link "Excel_2K_SRVR"
#pragma resource "*.dfm"
 
void __fastcall TForm1::BitBtn7Click(TObject *Sender)
{
    RangePtr my_range;
    AnsiString r = "";
    TExcelApplication* ExcelApplication1 = new TExcelApplication(NULL);
    TExcelWorkbook* ExcelWorkbook1 = new TExcelWorkbook(NULL);
    TExcelWorksheet* ExcelWorksheet1 = new TExcelWorksheet(NULL);
    ExcelApplication1->Connect();
    ExcelApplication1->Workbooks->Add();
    ExcelWorkbook1->ConnectTo(ExcelApplication1->Workbooks->get_Item(TVariant(1)));
    ExcelWorkbook1->Activate(0);
    ExcelWorksheet1->ConnectTo(ExcelWorkbook1->Sheets->get_Item(TVariant(1)));
    ExcelWorksheet1->Activate(0);
 
    ExcelApplication1->set_Visible(1,1);
}
ошибки:
[BCC32 Error] Unit1.cpp(376): E2451 Undefined symbol 'RangePtr'
[BCC32 Error] Unit1.cpp(376): E2379 Statement missing ;
0
1 / 1 / 0
Регистрация: 19.05.2010
Сообщений: 9
12.06.2010, 17:19
а можно по подробнее Lord_Voodoo,а то ничего в коде не понятно, пробывал использовать код указанный в ссылке:
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
Variant App, Sh;
TDate Today = Now();
 
// устанавливаем путь к файлу шаблона
AnsiString sFile = GetCurrentDir()+"\\NaclSf.xlt";
 
// инициализируем Excel, открываем этот шаблон
try {
App=Variant::GetActiveObject("Excel.Application");
} catch(...) {
try { App=Variant::CreateObject("Excel.Application"); }
catch (...) {
Application->MessageBox("Невозможно открыть Microsoft Excel!"
" Возможно этого приложения на компьютере не установлено.","Ошибка",MB_OK+MB_ICONERROR);
}}
try {
App.OlePropertyGet("WorkBooks").OleProcedure("Open",sFile.c_str(),0,false,1);
Sh=App.OlePropertyGet("WorkSheets",1);
} catch(...) {
Application->MessageBox("Ошибка открытия книги Microsoft Excel!","Ошибка",MB_OK+MB_ICONERROR);
}
 
// выводим в шаблон данные
// сначала заголовок
toExcel(App,"НомерНАКЛ",SaleManID->Value);
toExcel(App,"ДатаНАКЛ",Today.DateString());
toExcel(App,"ПоставщикНАКЛ",SaleManOrg->Value.c_str());
toExcel(App,"ИННПНАКЛ",SaleManInn->Value.c_str());
 
toExcel(App,"НомерСФ",SaleManID->Value);
toExcel(App,"ДатаСФ",Today.DateString());
toExcel(App,"АдресПСФ",SaleManAddr->Value.c_str());
toExcel(App,"ПоставщикСФ",SaleManOrg->Value.c_str());
toExcel(App,"ИННПСФ",SaleManInn->Value.c_str());
 
// определяем в n количество товара (строк для ввода в шаблон)
Goods->First();
int n = 0; while(!Goods->Eof) { n++; Goods->Next(); }
// или int n = Goods->RecordCount;
 
// вставляем в шаблон нужное количество строк
Variant C;
App.OlePropertyGet("WorkSheets",1).OleProcedure("Select");
C=App.OlePropertyGet("Range","ТоварСФ");
C=App.OlePropertyGet("Rows",(int) C.OlePropertyGet("Row")+1);
for(int i=1;i<n;i++) C.OleProcedure("Insert");
 
App.OlePropertyGet("WorkSheets",2).OleProcedure("Select");
C=App.OlePropertyGet("Range","ТоварНАКЛ");
C=App.OlePropertyGet("Rows",(int) C.OlePropertyGet("Row")+1);
for(int i=1;i<n;i++) C.OleProcedure("Insert");
 
// вывод данных из накладной в эти строки
Goods->First();
int i = 0;
while(!Goods->Eof){
toExcel(App,"ТоварСФ",i,GoodsName->Value.c_str());
toExcel(App,"ТоварНАКЛ",i,GoodsName->Value.c_str());
toExcel(App,"НомерППНАКЛ",i,i+1);
toExcel(App,"СтранаСФ",i,"Россия");
toExcel(App,"ЕдизмСФ",i,GoodsIzmer->Value.c_str());
toExcel(App,"ЕдизмНАКЛ",i,GoodsIzmer->Value.c_str());
toExcel(App,"КолСФ",i,GoodsCount->Value);
toExcel(App,"КолНАКЛ",i,GoodsCount->Value);
toExcel(App,"ЦенаСФ",i,GoodsPrice->Value);
toExcel(App,"ЦенаНАКЛ",i,GoodsPrice->Value);
toExcel(App,"СтоимСФ",i,GoodsPrice->Value*GoodsCount->Value);
toExcel(App,"СтоимостьСНДССФ",i,(GoodsPrice->Value*GoodsCount->Value*5)/100.);
toExcel(App,"ВсегоНАКЛ",i,GoodsPrice->Value*GoodsCount->Value);
toExcel(App,"СуммаНДССФ",i,(GoodsPrice->Value*GoodsCount->Value*5)/100.);
toExcel(App,"СуммаНДСНАКЛ",i,(GoodsPrice->Value*GoodsCount->Value*5)/100.);
i++; Goods->Next();
}
 
// и наконец, делаем Excel видимым 
App.OlePropertySet("Visible",true);
Но ничего не выходит выдает ошибку : E2268 Call to undefined function 'toExcel'
как исправить??? мне кажется это самый приемлимый вариант но как его довести до ума и использовать в своейпрограмме не пойму, может кто помочь исправить ошибку?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
13.06.2010, 11:27
lordrus, ну а где сама функция toExcel, это явно нестандартная функция
1
1 / 1 / 0
Регистрация: 19.05.2010
Сообщений: 9
13.06.2010, 12:27
в самом примере код слегка другой, но он не рабтает выдает ошибку что нехватает каких то файлов просит их импортировать. а вот сам код программы:
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
 
Variant App, Sh;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::bOpenClick(TObject *Sender)
{
    SaleMan->Close(); Goods->Close();
    DBase->Connected = false;
    AnsiString sWay = GetCurrentDir();
    DBase->Params->Strings[0] = "PATH=" + sWay;
    DBase->Connected = true;
    SaleMan->Open(); Goods->Open();
}
//---------------------------------------------------------------------------
 
Variant toExcel(Variant App,const char *Exc, int off, String data)
{
  try {
    App.OlePropertyGet("Range", Exc).OlePropertyGet("Offset", off).OlePropertySet("Value", data.c_str());
  } catch(...) { ; }
}/* toExcel() */
//---------------------------------------------------------------------------
Variant  toExcel(Variant App,const char *Exc, double data)
{
  try {
    App.OlePropertyGet("Range", Exc).OlePropertySet("Value", data);
  } catch(...) { ; }
}/* toExcel() */
 
//---------------------------------------------------------------------------
Variant  toExcel(Variant App,const char *Exc, int data)
{
  try {
    App.OlePropertyGet("Range", Exc).OlePropertySet("Value", data);
  } catch(...) { ; }
}/* toExcel() */
 
//---------------------------------------------------------------------------
Variant  toExcel(Variant App,const char *Exc, AnsiString data)
{
  try {
    Variant  cur = App.OlePropertyGet("Range", Exc);
    cur.OlePropertySet("Value", data.c_str());
  } catch(...) { ; }
}/* toExcel() */
//---------------------------------------------------------------------------
 
void __fastcall TForm1::bToExcelClick(TObject *Sender)
{
    // получаем сегодняшнюю дату
    TDate Today = Now();
 
    // устанавливаем путь к файлу шаблона
     AnsiString sFile = GetCurrentDir()+"\\NaclSf.xlt";
 
     // инициализируем Excel, открываем этот шаблон
     try {
       App=Variant::GetActiveObject("Excel.Application");
     } catch(...) {
     try { App=Variant::CreateObject("Excel.Application"); }
     catch (...) {
      Application->MessageBox("Невозможно открыть Microsoft Excel!"
      " Возможно этого приложения на компьютере не установлено.","Ошибка",MB_OK+MB_ICONERROR);
        }}
     try {
      App.OlePropertyGet("WorkBooks").OleProcedure("Open",sFile.c_str(),0,false,1);
      Sh=App.OlePropertyGet("WorkSheets",1);
     } catch(...) {
      Application->MessageBox("Ошибка открытия книги Microsoft Excel!","Ошибка",MB_OK+MB_ICONERROR);
     }
 
  // выводим в шаблон данные
  // сначала заголовок
  toExcel(App,"НомерНАКЛ",SaleManID->Value);
  toExcel(App,"ДатаНАКЛ",Today.DateString());
  toExcel(App,"ПоставщикНАКЛ",SaleManOrg->Value.c_str());
  toExcel(App,"ИННПНАКЛ",SaleManInn->Value.c_str());
 
  toExcel(App,"НомерСФ",SaleManID->Value);
  toExcel(App,"ДатаСФ",Today.DateString());
  toExcel(App,"АдресПСФ",SaleManAddr->Value.c_str());
  toExcel(App,"ПоставщикСФ",SaleManOrg->Value.c_str());
  toExcel(App,"ИННПСФ",SaleManInn->Value.c_str());
 
  // определяем в n количество товара (строк для ввода в шаблон)
  Goods->First();
  int n = 0;  while(!Goods->Eof) { n++; Goods->Next(); }
 
  // вставляем в шаблон нужное количество строк
  Variant C;
  App.OlePropertyGet("WorkSheets",1).OleProcedure("Select");
  C=App.OlePropertyGet("Range","ТоварСФ");
  C=App.OlePropertyGet("Rows",(int) C.OlePropertyGet("Row")+1);
  for(int i=1;i<n;i++) C.OleProcedure("Insert");
 
  App.OlePropertyGet("WorkSheets",2).OleProcedure("Select");
  C=App.OlePropertyGet("Range","ТоварНАКЛ");
  C=App.OlePropertyGet("Rows",(int) C.OlePropertyGet("Row")+1);
  for(int i=1;i<n;i++) C.OleProcedure("Insert");
 
  // вывод данных из накладной в эти строки
  Goods->First();
  int i = 0;
  while(!Goods->Eof){
    toExcel(App,"ТоварСФ",i,GoodsName->Value.c_str());
    toExcel(App,"ТоварНАКЛ",i,GoodsName->Value.c_str());
    toExcel(App,"НомерППНАКЛ",i,i+1);
    toExcel(App,"СтранаСФ",i,"Россия");
    toExcel(App,"ЕдизмСФ",i,GoodsIzmer->Value.c_str());
    toExcel(App,"ЕдизмНАКЛ",i,GoodsIzmer->Value.c_str());
    toExcel(App,"КолСФ",i,GoodsCount->Value);
    toExcel(App,"КолНАКЛ",i,GoodsCount->Value);
    toExcel(App,"ЦенаСФ",i,GoodsPrice->Value);
    toExcel(App,"ЦенаНАКЛ",i,GoodsPrice->Value);
    toExcel(App,"СтоимСФ",i,GoodsPrice->Value*GoodsCount->Value);
    toExcel(App,"СтоимостьСНДССФ",i,(GoodsPrice->Value*GoodsCount->Value*5)/100.);
    toExcel(App,"ВсегоНАКЛ",i,GoodsPrice->Value*GoodsCount->Value);
    toExcel(App,"СуммаНДССФ",i,(GoodsPrice->Value*GoodsCount->Value*5)/100.);
    toExcel(App,"СуммаНДСНАКЛ",i,(GoodsPrice->Value*GoodsCount->Value*5)/100.);
    i++; Goods->Next();
     }
 
  App.OlePropertySet("Visible",true);
 
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  App.OleProcedure("Quit");
  Sh.Clear();
  App.Clear();
}
//---------------------------------------------------------------------------
но и здесь я не пойму как работает эта функция и как она вообще связывается с таблицей???
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
13.06.2010, 12:32
lordrus, ну вообще она никак не связана с таблице, данные в нее передаются и она их пишет в экселевский документ, а чего там ему не нравится, что за файлы требует?
0
1 / 1 / 0
Регистрация: 19.05.2010
Сообщений: 9
13.06.2010, 12:37
вкладываю сам пимер может кто разберется и пригодится в будующем.
Вложения
Тип файла: rar xlt2.rar (100.0 Кб, 128 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.06.2010, 12:37

Builder+Excel
Здравствуйте! Вот моя программа, которая считывает из excel данные, делает рассчет, записывает данные в новый лист, потом на еще одном...

C++ Builder и Excel
Всем добрый день. Столкнулся с необходимостью использования Excel в программе (для импорта данных и экспорта в .xls файл). На просторах...

Word и Excel в C++ Builder
Всем привет! Заранее скажу, что только начинаю изучать С++ и поэтому буду рад любой помощи. Появилась необходимость с помощью...

Cpp Builder / Excel
Здравствуйте! Пишу приложение &quot;C++ Builder - OLE Excel&quot; Написал такой код для прорисовки таблицы: vVarCell =...

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru