1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

Тема в разделе "С и С++", создана пользователем master11, 10 апр 2006.

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

    master11 Гость

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

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

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

    ???? Гость

    Репутация:
    0
    Для: 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();
    вырвал пару строк из старого проекта
     
  3. master11

    master11 Гость

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

    ???? Гость

    Репутация:
    0
    <!--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]
    можно. вот набросок с одномерным массивом (не компилил, не проверял, но принцип должен быть понятен):

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

    master11 Гость

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

    master11 Гость

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

    Barmutik Гость

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

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

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

    THuman Гость

    Репутация:
    0
    Пожалуй возродим эту тему!
    Для меня прграммирование офисовских приложений из 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; матюкается!!!!!!!!!!!!!
     
  9. LAW

    LAW Гость

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

    THuman Гость

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

    Programmer_Hard Гость

    Репутация:
    0
    не всегда -> если не на указатель то точка.
     
  12. THuman

    THuman Гость

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

    LAW Гость

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

    THuman Гость

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

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