Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: отчет в Excel ( C++builder6 )
Форум программистов > Системное программирование > C, С++ и С Builder > Borland C++ Builder & Kylix
master11
1.создал файлы классов excel_tlb.h, excel_tlb.cpp
2.включил их в проект
3. ExcelApplication *app;
4. как дальше: создать обьект? или как?

в с++builder5 - TCOM_Application m_XLApp;
m_XLApp=CoExcelApplication::Create();
и все работает нормально

а в c++builder6 - не могу разобраться.
Помогите, спасибо.
????
Для: master11
в хэдере #include "Excel_2K_SRVR.h"

#pragma link "Excel_2K_SRVR"
.
.

       TExcelApplication *XLApp = new TExcelApplication(this);
       long LCID = LOCALE_USER_DEFAULT;

       XLApp->AutoConnect = false;
       XLApp->AutoQuit = false;
       XLApp->ConnectKind = ckRunningOrNew;
       XLApp->set_DisplayAlerts(LCID, TVariant(false));

       XLApp->Connect();

       ExcelWorksheetPtr XLSheet;
       ExcelWorkbookPtr XLBook;

       String defaultWBook = GetCurrentDir() + "\\template.xls";

       XLBook = XLApp->Workbooks->Open(TVariant(defaultWBook),
                             TNoParam(), TNoParam(), TNoParam(),
                             TNoParam(), TNoParam(), TNoParam(),
                             TNoParam(), TNoParam(), TNoParam(),
                             TNoParam(), TNoParam(), TNoParam(),
                             LCID);

       XLSheet = XLBook->ActiveSheet;

       XLSheet->set_Name(TVariant("asdasd"));

       XLSheet->Cells->set__Default(TVariant(4), TVariant(4), TVariant("test"));

       XLBook->SaveAs(TVariant("test.xls"),
               TVariant(xlNormal), TNoParam(), TNoParam(),
               TNoParam(), TNoParam(), xlNoChange,
               TNoParam(), TNoParam(), TNoParam(),
               TNoParam(), LCID);

       XLBook->Close(TVariant(false), TNoParam(), TNoParam(), LCID);

       XLSheet->Release();
       XLApp->Disconnect();


вырвал пару строк из старого проекта
master11
спасибо
скомпилировал, запустил - все получилось!!!
но тут еще одна проблемка.
может, подскажете...
отчетик мой состоит из нескольких сотен строк по 15-20 столбцов
задержка получается ООЧЧЕЕНННЬЬ приличная sad.gif
слышал, что можна как-то через массивы работать
но не знаю как справиться
буду очень благодарен за подсказку
????
Цитата(master11 @ 10:04:2006, 15:24 )
слышал, что можна как-то через массивы работать
*

можно. вот набросок с одномерным массивом (не компилил, не проверял, но принцип должен быть понятен):

Variant values = VarArrayCreate(OPENARRAY(int, (0, 10)), varVariant);

for( int i=0; i < 10; i++ )
{
 values.PutElement(TVariant(i*2), i);
}

Variant Cell1, Cell2;
Cell1 = XLSheet->Cells->get_Item(TVariant(5), TVariant(1));
Cell2 = XLSheet->Cells->get_Item(TVariant(5), TVariant(11));
XLSheet->get_Range(Cell1, Cell2)->set_Value( values );


для двумерного массива будет что-то типа

Variant values = VarArrayCreate(OPENARRAY(int, (0, 10, 0, 10)), varVariant);

for( int i=0; i < 10; i++ )
{
 for( int j = 0; j < 5; j++ )
 {
   values.PutElement(TVariant(i*2 + j), i, j);
 }
}

Variant Cell1, Cell2;
Cell1 = XLSheet->Cells->get_Item(TVariant(5), TVariant(1));
Cell2 = XLSheet->Cells->get_Item(TVariant(15), TVariant(11));
XLSheet->get_Range(Cell1, Cell2)->set_Value( values );


пробуй.
master11
спасибо
дальше постараюсь сам разобраться
master11
понемножку двигается отчет
но вот такой вопрос: сначала хочу загрузить файл шаблона ( шапка ) а потом уже ячейки заполнять программно
но никак не могу
( если честно, то с ОЛЕ-функциями я не разобрался до конца )
Помогите, плз.
Спасибо
Barmutik
В случае таких затруднений посоветовал бы сделать отчёт в FastReport а потом уже его фукнциями экспортнуть в Эксель... и быстро и легко получится ..

А грузить свой шаблон:

ExcelApp.WorkBooks.Add('имя шаблона');
master11
спасибо
THuman
Пожалуй возродим эту тему!
Для меня прграммирование офисовских приложений из Delphi милое дело! Но... на работе столкнулся
с тем же но в деBilder'е C++. Законектился к екселю именно через TExcelAplcation и т.д. как было упомянуто выше, но так же не интиресно!!! Вобщем есть в Delphe и другой способ
uses ComObj;

procedure TFormButton1Click(Sender: TObject);
var xl:variant;

begin
   xl:=CreateOleObject('Excel.Application');
   xl.WorkBooks.Add;
   xl.Visible:=Ttrue;
end;


Именно этим способом я обычно пользуюсь, но вот как его организовать в билдере???
В делфе используется ComObj а что билдеру подключать???
На саму операцию xl=CreateOleObject("Excel.Application"); билдер не ругается, а вот когда я пытаюсь обратится к какому либо свойству, к примеру xl->Visible=true; матюкается!!!!!!!!!!!!!
LAW
Ничего подключать не нужно.
Видимо неправильно обращаешся smile.gif
THuman
По логике как и всегда к свойству или методу через "->"! Но если не так то как???? Или в билдере такой способ коннекта не катит??? blink.gif Если знаеш подскажи!!!!
Programmer_Hard
не всегда -> если не на указатель то точка.
THuman
mad.gif Более дельные советы будут!??? Вчера вроде нашел способ установки значений свойств:
xl.OlePropertySet("Visible", true);
получить значение свойства OlePropertyGet
Но зараза при выполнении вызывает AccesViolation!!!!!!!!!!!!!!!! sad.gif mad.gif blink.gif
LAW
Вот мой пример:
  // Открываем книгу в EXCELL:
  Variant oXLSObj,VBook;
  oXLSObj = Variant::CreateObject("Excel.Application");
  oXLSObj.OlePropertySet("DisplayAlerts",false);
  oXLSObj.OlePropertySet("Visible", true);
  oXLSObj.OlePropertySet("SheetsInNewWorkbook",3);
  VBook=oXLSObj.OlePropertyGet("WorkBooks");
  VBook.OleProcedure("add");
  VBook=VBook.OlePropertyGet("Item",1);

Удачи!
THuman
спасибо!!! заработало!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.