Import Excel TypeLibs

1
2
3
#import "MSO.DLL" rename("RGB", "MsoRGB") rename("DocumnetProperties", "MsoDocumnetProperties")
#import "VBE6EXT.OLB"
#import "EXCEL11.TLB" rename("RGB", "ExcelRGB") rename("DialogBox", "ExcelDialogBox") rename("ReplaceText", "ExcelReplaceText") rename("CopyFile", "ExcelCopyFile") no_auto_exclude

After Compiled, Output files:

  • excel11.tlh
  • excel11.tli
  • mso.tlh
  • mso.tli
  • vbe6ext.tlh
  • vbe6ext.tli

Example

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// testExcel.h
#ifndef TESTTOOLS_TESTEXCEL_H_
#define TESTTOOLS_TESTEXCEL_H_

#include "excel\excelTypeLibs.h"

namespace TEST_EXCEL {
	struct com_t { 
		com_t() { CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); }
		~com_t() { CoUninitialize(); }
	};
	struct wait_cursor_t { 
		HCURSOR cursor; 
		wait_cursor_t() { cursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); } 
		~wait_cursor_t() { SetCursor(cursor); } 
	};
	bool ExportExcel();
}

#endif //TESTTOOLS_TESTEXCEL_H_

// testExcel.cpp
#include "stdafx.h"
#include "testExcel.h"
#include <iostream>

bool TEST_EXCEL::ExportExcel() {
	TEST_EXCEL::com_t com;
	TEST_EXCEL::wait_cursor_t wait;
	try {
		Excel::_ApplicationPtr excel;
		HRESULT hr = excel.CreateInstance(__uuidof(Excel::Application));
		if (FAILED(hr)) throw _com_error(hr);

		auto workbook = excel->Workbooks->Add();
		Excel::SheetsPtr sheets = workbook->GetWorksheets();
		Excel::_WorksheetPtr sheet = sheets->GetItem((short)1);
		sheet->Name = L"testExcelSheet1";
		Excel::RangePtr range = sheet->Cells;

		Excel::RangePtr titleRange = range->GetRange(range->GetItem(1, 1), range->GetItem(1, 4));
		titleRange->Merge();
		titleRange->PutItem(1, 1, L"testExcel");
		titleRange->HorizontalAlignment = Excel::XlHAlign::xlHAlignCenter;
		titleRange->BorderAround(Excel::XlLineStyle::xlContinuous, Excel::XlBorderWeight::xlThin, Excel::XlColorIndex::xlColorIndexNone);
	
		sheet->Columns->AutoFit();
		excel->PutDisplayAlerts(0, variant_t(false));
		workbook->SaveAs(L"G:\\testExcel.xlsx", vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, Excel::XlSaveAsAccessMode::xlNoChange, Excel::XlSaveConflictResolution::xlLocalSessionChanges);
		workbook->Close(true);
		excel->Quit();

		//open excel
		ShellExecute(NULL, L"open", L"G://testExcel.xlsx", NULL, NULL, SW_SHOW);

	}catch (_com_error& err) {
		std::cout << "EXCEL error code:" << err.ErrorMessage() << std::endl;
		return false;
	}
	std::cout << "EXCEL succeeded!" << std::endl;
	return true;
}

Reference