MS Word, C / C + +, Програмування, статті

// 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>

*

*