Используй 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(); }
|
|