С помощью языка C++ можно работать со сторонними программами. Требуется только библиотека-парсер, в которой будут описаны способы взаимодействия с этой программой. Для примера рассмотрим работу с Microsoft Office Excel и компиляторы Borland C++ Builder и Microsoft Visual C++.
В Borland C++ Builder для взаимодействия с Excel достаточно подключения одной библиотеки ComObj.hpp, которая дает возможность оперирования с Ole, благодаря чему и возможно принимать и посылать данные Excel.
Рассмотрим пример такой программы:
1 2 3 4 5 6 7 8 9 10 |
{ string word; Variant exl; exl = CreateOleObject("Excel.Application"); exl.OlePropertyGet("Workbooks").OleProcedure("Open", "D:\\1.xls"); for(int i = 1 ; i < 5; i++) for(int j = 1; j < 4; j++) word=exl.OlePropertyGet("Cells", i, j); } |
Программа выполняет следующую задачу: посредством Ole создает объект (CreateOleObject()), распознаваемый как объект документа Excel. После этого объект exl открывает файл по заданному пути и интерпретирует его (OleProcedure("Open", "D:\\1.xls"). Затем в переменную word выдаются значения клеток.
Итак, при помощи команд OlePropertyGet, OlePropertySet и OleProcedure можно получить доступ ко всем объектам и коллекциям Excel.
Аналогичная программа в Microsoft Visual C++ выглядит следующим образом.
Файл Office.h для версии Excel 2007 года. Для других годов - аналогично.
1 2 3 4 5 6 |
#define Uses_MSO2007 // for MS Office 2007 #import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE12\\MSO.DLL" auto_rename no_namespace #import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB" auto_rename no_namespace #import "C:\\Program Files\\Microsoft Office\\OFFICE12\\EXCEL.EXE" auto_rename |
И файл cpp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
// excel.cpp : main project file. #include "stdafx.h" #include <conio.h> #include <iostream> #include "Office.h" using namespace System; using namespace std; int main(array<System::String ^> ^args) { double t; ::CoInitialize(NULL); using namespace Excel; _ApplicationPtr excel(L"Excel.Application"); excel->Workbooks->Open("D:\\1.xls"); RangePtr pRange = excel->Cells; for(int i = 1 ; i < 5; i++) for(int j = 1; j < 4; j++) { t=pRange->Item[i][j]; cout<<t; } ::CoUninitialize(); getch(); return 0; } |
Не работает код для Visual.
Завожу CLR с++ приложении в visual studio 2015, копирую код полностью, меняю путь к файлам excel 2013 и он выдаёт ниже описанную ошибку
Ошибка C2365 Windows: переопределение; предыдущим определением было "пространство имен"
Нужно переделать немного. Часть правок подсказывает Visual С++.
Сложная правка примерно такая:
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB" auto_rename rename("Windows", "ExcelWindows") no_namespace