Использование директивы #import в Visual C++ - MS Excel
ОГЛАВЛЕНИЕ
Страница 4 из 7
MS Excel
// console.cpp : Defines the entry point for the console application.
#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 : %08lX\n"
"ErrorMessage: %s\n"
"Description : %s\n"
"Source : %s\n",
er.Error(),
(LPCTSTR)_bstr_t(er.ErrorMessage()),
(LPCTSTR)_bstr_t(er.Description()),
(LPCTSTR)_bstr_t(er.Source()));
CharToOem(buf,buf); // только для косольных приложений
printf(buf);
}
::CoUninitialize();
}