Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > BC++ и MSExcel


Автор: SHShadow 5.12.2004, 21:53
Подскажите господа программисты, помню что возможность доступа к XLS есть, но не помню с помощью какого компонента.
Помогите. smile

Автор: azesmcar 6.12.2004, 15:02
Используй COM...
Что под Visual C++, что под билдер, одно и тоже...хотя есть и компоненты, в самом конце...
Office Components что ли, что то похожее, но на самом деле они делают то же самое...просто вместо функций класс написан...вот маленький пример

Заголовок office.h
Код

// Office.h

#define Uses_MSO2000

#ifdef Uses_MSO2000
// for MS Office 2000
#import "C:Program FilesMicrosoft OfficeOfficeMSO9.DLL"
#import "C:Program FilesCommon FilesMicrosoft SharedVBAVBA6VBE6EXT.OLB"
#import "C:Program FilesMicrosoft OfficeOfficeMSWORD9.OLB"
       rename("ExitWindows","_ExitWindows")
#import "C:Program FilesMicrosoft OfficeOfficeEXCEL9.OLB"
       rename("DialogBox","_DialogBox")
       rename("RGB","_RGB")
       exclude("I","IPicture")
#import "C:Program FilesCommon FilesMicrosoft SharedDAODAO360.DLL"
       rename("EOF","EndOfFile") rename("BOF","BegOfFile")
#import "C:Program FilesMicrosoft OfficeOfficeMSACC9.OLB"
#else
// for MS Office 97
#import "C:Program FilesMicrosoft OfficeOfficeMSO97.DLL"
#import "C:Program FilesCommon FilesMicrosoft SharedVBAVBEEXT1.OLB"
#import "C:Program FilesMicrosoft OfficeOfficeMSWORD8.OLB"
       rename("ExitWindows","_ExitWindows")
#import "C:Program FilesMicrosoft OfficeOfficeEXCEL8.OLB"
       rename("DialogBox","_DialogBox")
       rename("RGB","_RGB")
       exclude("I","IPicture")
#import "C:Program FilesCommon FilesMicrosoft SharedDAODAO350.DLL"
       rename("EOF","EndOfFile")
       rename("BOF","BegOfFile")
#import "C:Program FilesMicrosoft OfficeOfficeMSACC8.OLB"
#endif

Заголовок немного надо отредактировать, тут ДЛЛ ки есть которые тебе не нужны конкретно для Excel-а...
Сам пример
Код

//excelapp.cpp
#include "stdafx.h"
#include <stdio.h>
#include "Office.h"

void main()
{
 ::CoInitialize(NULL);
 try {
   using namespace Excel;
   _ApplicationPtr excel("Excel.Application");
   excel->Visible[0] = true;

   // создаём новую книгу
   _WorkbookPtr  book  = excel->Workbooks->Add();
   // получаем первый лист (в VBA нумерация с единицы)
   _WorksheetPtr sheet = book->Worksheets->Item[1L];
                      // Аналогичная конструкция на VBA выглядит так:
                      // book.Worksheets[1]
                      // В библиотеке типов Item объявляется как метод или
                      // свойство по умолчанию (id[0]), поэтому в VB его
                      // можно опускать. На C++ такое, естественно, не пройдёт.

   // заполняем ячейки
   sheet->Range["B2"]->FormulaR1C1 = "Строка 1";
   sheet->Range["C2"]->FormulaR1C1 = 12345L;
   sheet->Range["B3"]->FormulaR1C1 = "Строка 2";
   sheet->Range["C3"]->FormulaR1C1 = 54321L;
   // заполняем и активизируем итоговую строку
   sheet->Range["B4"]->FormulaR1C1 = "Итого:";
   sheet->Range["C4"]->FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)";
   sheet->Range["C4"]->Activate();

   // типа делаем красиво :o)
   sheet->Range["A4:D4"]->->ColorIndex = 27L;
   sheet->Range["A4:D4"]->Interior->ColorIndex = 5L;
            // Постфикс L говорит, что константа является числом типа long.
            // Вы всегда должны приводить числа к типу long или short при
            // преобразованию их к _variant_t, т.к. преобразование типа int
            // к _variant_t не реализовано. Это вызвано не желанием
            // разработчиков компилятора усложнить нам жизнь, а спецификой
            // самого типа int.

 } catch (_com_error& er) {
   char buf[1024];
   sprintf(buf,"_com_error:n"
               "Error       : %08lXn"
               "ErrorMessage: %sn"
               "Description : %sn"
               "Source      : %sn",
               er.Error(),
               (LPCTSTR)_bstr_t(er.ErrorMessage()),
               (LPCTSTR)_bstr_t(er.Description()),
               (LPCTSTR)_bstr_t(er.Source()));

   CharToOem(buf,buf); // только для косольных приложений
   printf(buf);
 }
 ::CoUninitialize();
}

Автор: SHShadow 15.12.2004, 00:10
Огромное тебе спасибки!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)