|
|
|
Шаблон .xlt и как с ним работать...???
|
|||
|---|---|---|---|
|
#18+
Допустим есть Excel шаблон: sablon.xlt Как к нему обратиться??? Я пишу такую вешь: AnsiString sFile = GetCurrentDir()+"\\Shablt.xlt"; App = Variant::GetActiveObject("Excel.Application"); App.OlePropertyGet("Workbooks").OleProcedure("Open",sFile.c_str(),0,false,1); Sh = App.OlePropertyGet("Worksheets",1); Builder 6 ругается на строку App = Variant::GetActiveObject("Excel.Application"); И говорит "Невозможная операция" Помогите пожалуйста.... Заранее спасибо...))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2003, 17:29 |
|
||
|
Шаблон .xlt и как с ним работать...???
|
|||
|---|---|---|---|
|
#18+
Я пишу на VC++. и открываю ехель так: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2003, 17:55 |
|
||
|
Шаблон .xlt и как с ним работать...???
|
|||
|---|---|---|---|
|
#18+
А как на Biulder'е ето сделать??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2003, 18:01 |
|
||
|
Шаблон .xlt и как с ним работать...???
|
|||
|---|---|---|---|
|
#18+
вот где-то на сайте находил. кусок кода: Разумеется это крайне обрезанный и упрощенный вариант, удобный для примера. 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); Тут сделано просто перебором в цикле, можно сделать наподобие в массиве. Я не разобрался как в массив это сделать. Если что пиши на мыло. amyulet@yandex.ru, с темой для s.a.a. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2003, 09:15 |
|
||
|
Шаблон .xlt и как с ним работать...???
|
|||
|---|---|---|---|
|
#18+
Я тоже это находил...вот как это не работает...((( Я так подумал (ещё не проверял) что можно сделать так: AnsiString sFile = GetCurrentDir()+"\\Shablt.xlt"; App=CreateOleObject("Excel.Application"); App.OlePropertyGet("WorkBooks").OleProcedure("Open",sFile.c_str(),0,false,1); Sh=App.OlePropertyGet("WorkSheets",1); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2003, 10:41 |
|
||
|
Шаблон .xlt и как с ним работать...???
|
|||
|---|---|---|---|
|
#18+
Что не работает? У меня все работает. Скажи, что не работает у тебя и как пишешь, что хочешь в итоге. Давольно удобно все, вот только при выгрузки записей из БД больше 1 000 000, долго ждать. Нужно переписывать в массив. Если что пиши на мыло: amyulet@ yandex . ru (слитно все:)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2003, 12:20 |
|
||
|
Шаблон .xlt и как с ним работать...???
|
|||
|---|---|---|---|
|
#18+
SAnatoliy Все работает ... я просто написал вот так...))) AnsiString sFile = GetCurrentDir()+"\\Shablt.xlt"; App=CreateOleObject("Excel.Application"); App.OlePropertyGet("WorkBooks").OleProcedure("Open",sFile.c_str(),0,false,1); Sh=App.OlePropertyGet("WorkSheets",1); И все заработало....)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2003, 14:11 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32355867&tid=2035633]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 358ms |

| 0 / 0 |
