核心步骤
1、建立一个空的控制台项目
2、在项目中加入一个ExcelImport.h 文件,内容如下:
#pragma once
#import "libid:2DF8D04C-5BFA-101B-BDE5-00AA0044DE52" \
rename("RGB", "MSORGB") \
rename("DocumentProperties", "MSODocumentProperties")
using namespace Office;
#import "libid:0002E157-0000-0000-C000-000000000046"
using namespace VBIDE;
#import "libid:00020813-0000-0000-C000-000000000046" \
rename("DialogBox", "ExcelDialogBox") \
rename("RGB", "ExcelRGB") \
rename("CopyFile", "ExcelCopyFile") \
rename("ReplaceText", "ExcelReplaceText") \
no_auto_exclude
3、建立一个ExcelDriver类,主要代码如下:
ExcelDriver.h的内容如下
#pragma once
#include "ExcelImport.h"
struct ExcelDriver
{
Excel::_ApplicationPtr xl; // Pointer to Excel.
public:
ExcelDriver();
~ExcelDriver();
static ExcelDriver& Instance();
};
ExcelDriver.cpp的内容如下
#include "ExcelDriver.h"
ExcelDriver::ExcelDriver()
{
CoInitialize(NULL);
xl.CreateInstance(L"Excel.Application");
}
ExcelDriver::~ExcelDriver()
{
CoUninitialize();
}
ExcelDriver& ExcelDriver::Instance()
{
static ExcelDriver singleton;
return singleton;
}
4、main.cpp的内容为
#include <iostream>
using namespace std;
#include "ExcelDriver.h"
int main(int argc, char* argv[])
{
cout << "Starting Excel\n";
ExcelDriver& excel = ExcelDriver::Instance();
Excel::_ApplicationPtr& xl = excel.xl;
xl->PutVisible(0, VARIANT_TRUE);
system("pause"); //加上这句才能正常运行,否则的话进程会自动结束,
//然后会自动关闭excel!
return 0;
}
运行之后就可以看到excel 窗口了.
此外,不知道为啥如果不用c++包装,直接在主函数里写如下代码时,运行时会报异常:求大神解释:-(
Excel::_ApplicationPtr xl;
CoInitialize(NULL);
// Start excel application.
xl.CreateInstance(L"Excel.Application");
xl->PutVisible(0, VARIANT_TRUE);
CoUninitialize();