MS Word

 / / 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 Word;
_ApplicationPtr word(L"Word.Application");
word->Visible = true;
word->Activate();

/ / Створюємо новий документ
_DocumentPtr wdoc1 = word->Documents->Add();

/ / Пишемо пару слів
RangePtr range = wdoc1->Content;
range->LanguageID = wdRussian;
range-> InsertAfter ("Пара слів");

/ / Зберігаємо як HTML
wdoc1->SaveAs(&_variant_t("C:MyDoc est.htm"),
&_variant_t(long(wdFormatHTML)));
/ / Іноді доведеться вдаватися до явного перетворення типів,
/ / Тому оператор перетворення char * в VARIANT * не визначений

/ / Відкриває документ test.doc
_DocumentPtr Wdoc2 = word-> Documents-> Open (& _variant_t ("C: MyDoc est.doc"));
/ / Викликаємо макрос
word->Run("Macro1");

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

CharToOem (buf, buf); / / тільки для косольних додатків
printf(buf);
}
::CoUninitialize();
}


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:
"
"Error : %08lX
"
"ErrorMessage: %s
"
"Description : %s
"
"Source : %s
",
er.Error(),
(LPCTSTR)_bstr_t(er.ErrorMessage()),
(LPCTSTR)_bstr_t(er.Description()),
(LPCTSTR)_bstr_t(er.Source()));

CharToOem (buf, buf); / / тільки для косольних додатків
printf(buf);
}
::CoUninitialize();
}


ADO DB

 / / Console.cpp: Defines the entry point for the console application.

#include "stdafx.h"
#include <stdio.h>

# Import "C: Program FilesCommon FilesSystemadomsado20.tlb"
rename ("EOF", "ADOEOF") rename ("BOF", "ADOBOF")
/ / Оператор rename необхідний, тому що EOF визначений як макрос
/ / У файлі stdio.h
using namespace ADODB;

void main()
{
::CoInitialize(NULL);
try {
/ / Відкриваємо з'єднання з БД
_ConnectionPtr con("ADODB.Connection");
con-> Open (L "Provider = Microsoft.Jet.OLEDB.3.51;"
L "Data Source = Elections.mdb ","","", 0);

/ / Відкриваємо таблицю
_RecordsetPtr rset("ADODB.Recordset");
rset->Open(L"ElectTbl",(IDispatch*)con,
adOpenDynamic,adLockOptimistic,adCmdTable);

FieldsPtr flds = rset->Fields;

/ / Додаємо
rset->AddNew();
flds-> Item [L "Прізвище"] -> Value = L "Пупкін";
flds-> Item [L "Ім'я"] -> Value = L "Василь";
flds-> Item [L "По батькові"] -> Value = L "Карлович";
flds-> Item [L "Голосував чи"] -> Value = false;
flds-> Item [L "За кого проголосував"] -> Value = L "Проти всіх";
rset->Update();

/ / Підміняємо
flds-> Item [L "Голосував чи"] -> Value = true;
flds-> Item [L "За кого проголосував"] -> Value = L "За наших";
rset->Update();

/ / Перегляд
rset->MoveFirst();
while (!rset->ADOEOF) {
char buf[1024];
sprintf(buf,"%s %s %s: %s – %s
",
(LPCTSTR) _bstr_t (flds-> Item [L "Прізвище"] -> Value),
(LPCTSTR) _bstr_t (flds-> Item [L "Ім'я"] -> Value),
(LPCTSTR) _bstr_t (flds-> Item [L "По батькові"] -> Value),
(Bool) flds-> Item [L "Голосував чи"] -> Value? "Так": "Ні",
(LPCTSTR) _bstr_t (flds-> Item [L "За кого проголосував"] -> Value));

CharToOem(buf,buf);
printf(buf);
rset->MoveNext();
}
} catch (_com_error& er) {
char buf[1024];
sprintf(buf,"_com_error:
"
"Error : %08lX
"
"ErrorMessage: %s
"
"Description : %s
"
"Source : %s
",
er.Error(),
(LPCTSTR)_bstr_t(er.ErrorMessage()),
(LPCTSTR)_bstr_t(er.Description()),
(LPCTSTR)_bstr_t(er.Source()));

CharToOem (buf, buf); / / тільки для косольних додатків
printf(buf);
}
::CoUninitialize();
}


AciveX Control


Для цього прикладу нам знадобиться будь віконне додаток.
ActiveX
Control "и вставляються в діалог зазвичай через Components and Controls
Gallery:

Меню-Project-Add_To_Project-Components_and_Controls-Registered_ActiveX_Controls.

Нам як приклад цілком підійде Microsoft FlexGrid Control.
Натисніть кнопку Insert для додавання його в проект, у вікні
Confirm Classes залиште галочку тільки біля елемента CMSFlexGrid
і сміливо тисніть OK. У результаті будуть сформовані два файли msflexgrid.h
і msflexgrid.cpp, Більшу частину вмісту яких нам доведеться видалити.
Після всіх змін ці файли будуть мати наступний вигляд:

msflexgrid.h

// msflexgrid.h

#ifndef __MSFLEXGRID_H__
#define __MSFLEXGRID_H__

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#pragma warning(disable:4146)
#import <MSFLXGRD.OCX>

class CMSFlexGrid : public CWnd
{
protected:
DECLARE_DYNCREATE(CMSFlexGrid)
public:

MSFlexGridLib:: IMSFlexGridPtr I; / / доступ до інтерфейсу
void PreSubclassWindow (); / / ініціалізація I
};

//{{AFX_INSERT_LOCATION}}

#endif


msflexgrid.cpp

// msflexgrid.cpp

#include "stdafx.h"
#include "msflexgrid.h"

IMPLEMENT_DYNCREATE(CMSFlexGrid, CWnd)

void CMSFlexGrid::PreSubclassWindow ()
{
CWnd::PreSubclassWindow();

MSFlexGridLib::IMSFlexGrid *pInterface = NULL;

if (SUCCEEDED (GetControlUnknown () -> QueryInterface (I. GetIID (),
(Void **) & pInterface))) {
ASSERT(pInterface != NULL);
I.Attach(pInterface);
}
}


Тепер вставимо елемент у будь-який діалог, наприклад CAboutDlg. До діалогу
додамо змінну пов'язану з класом CMSFlexGrid і метод
OnInitDialog, Текст якого наведено нижче. При виклику діалогу в наш
FlexGrid будуть додані два елементи:

BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();

m_grid.I->AddItem("12345");
m_grid.I->AddItem("54321");

return TRUE;
}


У висновку, дозволю собі висловити ще кілька зауважень.


Удачи в бою.

Література:


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*