отчет в Excel ( C++builder6 )

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем master11, 10 апр 2006.

Статус темы:
Закрыта.
  1. master11

    master11 Гость

    1.создал файлы классов excel_tlb.h, excel_tlb.cpp
    2.включил их в проект
    3. ExcelApplication *app;
    4. как дальше: создать обьект? или как?

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

    а в c++builder6 - не могу разобраться.
    Помогите, спасибо.
     
  2. ????

    ???? Гость

    Для: master11
    в хэдере #include "Excel_2K_SRVR.h"

    Код (Text):
    #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();
    вырвал пару строк из старого проекта
     
  3. master11

    master11 Гость

    спасибо
    скомпилировал, запустил - все получилось!!!
    но тут еще одна проблемка.
    может, подскажете...
    отчетик мой состоит из нескольких сотен строк по 15-20 столбцов
    задержка получается ООЧЧЕЕНННЬЬ приличная :(
    слышал, что можна как-то через массивы работать
    но не знаю как справиться
    буду очень благодарен за подсказку
     
  4. ????

    ???? Гость

    <!--QuoteBegin-master11+10:04:2006, 15:24 -->
    <span class="vbquote">(master11 @ 10:04:2006, 15:24 )</span><!--QuoteEBegin-->слышал, что можна как-то через массивы работать
    [snapback]33320" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    можно. вот набросок с одномерным массивом (не компилил, не проверял, но принцип должен быть понятен):

    Код (Text):
    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 );
    для двумерного массива будет что-то типа

    Код (Text):
    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 );
    пробуй.
     
  5. master11

    master11 Гость

    спасибо
    дальше постараюсь сам разобраться
     
  6. master11

    master11 Гость

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

    Barmutik Гость

    В случае таких затруднений посоветовал бы сделать отчёт в FastReport а потом уже его фукнциями экспортнуть в Эксель... и быстро и легко получится ..

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

    Код (Text):
    ExcelApp.WorkBooks.Add('имя шаблона');
     
  8. master11

    master11 Гость

    спасибо
     
  9. THuman

    THuman Гость

    Пожалуй возродим эту тему!
    Для меня прграммирование офисовских приложений из Delphi милое дело! Но... на работе столкнулся
    с тем же но в деBilder'е C++. Законектился к екселю именно через TExcelAplcation и т.д. как было упомянуто выше, но так же не интиресно!!! Вобщем есть в Delphe и другой способ
    Код (Text):
    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; матюкается!!!!!!!!!!!!!
     
  10. LAW

    LAW Гость

    Ничего подключать не нужно.
    Видимо неправильно обращаешся :)
     
  11. THuman

    THuman Гость

    По логике как и всегда к свойству или методу через "->"! Но если не так то как???? Или в билдере такой способ коннекта не катит??? ;) Если знаеш подскажи!!!!
     
  12. Programmer_Hard

    Programmer_Hard Гость

    не всегда -> если не на указатель то точка.
     
  13. THuman

    THuman Гость

    :D Более дельные советы будут!??? Вчера вроде нашел способ установки значений свойств:
    xl.OlePropertySet("Visible", true);
    получить значение свойства OlePropertyGet
    Но зараза при выполнении вызывает AccesViolation!!!!!!!!!!!!!!!! :( :) :)
     
  14. LAW

    LAW Гость

    Вот мой пример:
    Код (Text):
     // Открываем книгу в 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);
    Удачи!
     
  15. THuman

    THuman Гость

    спасибо!!! заработало!!!
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей