1.新建一个MFC工程
2.打开类向导进入类向导对话框
3.点击“添加类”的下拉菜单,选择“类型库中的MFC类‘,进入类型库添加类向导
4.在类型库添加类向导,选择文件,在位置中选择Excel.EXE所在的路径,向导会自动显示它的接口
5.从接口处选择对应的接口,生成类文件
6.将生成的.h文件中#import “F:\软件安装位置\office2013\Office15\EXCEL.EXE” no_namespace替换成
//为MSO.DLL文件所在路径
#import "C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\OFFICE15\\MSO.DLL" \
rename("RGB", "MSORGB") \
rename("DocumentProperties", "MSODocumentProperties")
using namespace Office;
//为VBE6EXT.OLB文件所在路径
#import "C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB"
using namespace VBIDE;
//为EXCEL.EXE文件所在路径
#import "F:\\软件安装位置\\office2013\\Office15\\EXCEL.EXE" \
rename("DialogBox", "ExcelDialogBox") \
rename("RGB", "ExcelRGB") \
rename("CopyFile", "ExcelCopyFile") \
rename("ReplaceText", "ExcelReplaceText") \
no_auto_exclude
using namespace Excel;
7.创建一个ExcelOpenDlg对话框,在其中创建五个按钮,分别为启动,打开文件,写入,读取,保存与退出
8.在ExcelOpenDlg.h文件中创建
CApplication ExcelApp;
CRange Range;
CWorkbook book;
CWorkbooks books;
CWorksheet sheet;
CWorksheets sheets;
9.双击启动按钮,启动按钮代码
void CExcleOpenDlg::OnBnClickedStart()
{
LPDISPATCH lpDisp = NULL;
//创建Excel 服务器(启动Excel)
if (!ExcelApp.CreateDispatch(_T("Excel.Application"), NULL))
{
AfxMessageBox(_T("启动Excel服务器失败!"));
return;
}
/*判断当前Excel的版本*/
CString strExcelVersion = ExcelApp.get_Version();//获取版本信息
int iStart = 0;
strExcelVersion = strExcelVersion.Tokenize(_T("."), iStart);
if (_T("15") == strExcelVersion)
{
GetDlgItem(IDC_VERSION)->SetWindowText(_T("Excel2013"));
}
else
{
GetDlgItem(IDC_VERSION)->SetWindowText(_T("Excel其他版本"));
}
ExcelApp.put_Visible(TRUE);
ExcelApp.put_UserControl(TRUE);
}
10.打开文件按钮代码
void CExcleOpenDlg::OnBnClickedOpenfile()
{
LPDISPATCH lpDisp = NULL;
/*得到工作簿容器*/
books.AttachDispatch(ExcelApp.get_Workbooks());
/*打开一个工作簿,如不存在,则新增一个工作簿*/
CString strBookPath =_T("G:\\11.xlsx");//打开指定表格路径
try
{
/*打开一个工作簿*/
lpDisp = books.Open(strBookPath,
vtMissing, vtMissing, vtMissing, vtMissing, vtMissing,
vtMissing, vtMissing, vtMissing, vtMissing, vtMissing,
vtMissing, vtMissing, vtMissing, vtMissing);
book.AttachDispatch(lpDisp);
}
catch (...)
{
/*增加一个新的工作簿*/
lpDisp = books.Add(vtMissing);
book.AttachDispatch(lpDisp);
}
/*得到工作簿中的Sheet的容器*/
sheets.AttachDispatch(book.get_Sheets());
/*打开一个Sheet,如不存在,就新增一个Sheet*/
CString strSheetName = _T("NewSheet");
try
{
/*打开一个已有的Sheet*/
lpDisp = sheets.get_Item(_variant_t(strSheetName));
sheet.AttachDispatch(lpDisp);
}
catch (...)
{
/*创建一个新的Sheet*/
lpDisp = sheets.Add(vtMissing, vtMissing, _variant_t((long)1), vtMissing);
sheet.AttachDispatch(lpDisp);
sheet.put_Name(strSheetName);
}
}
11.写入按钮代码
void CExcleOpenDlg::OnBnClickedWrite()
{
LPDISPATCH lpDisp;
//选择需要写入的单元格
lpDisp = sheet.get_Range(COleVariant(_T("A3")), COleVariant(_T("A3")));
//将数据链接到单元格
Range.AttachDispatch(lpDisp);
//将数据写入对应的单元格
Range.put_Value(vtMissing, COleVariant(_T("wo")));
}
12.读取按钮代码
void CExcleOpenDlg::OnBnClickedRead()
{
//获得坐标为(A,1)的单元格
Range = sheet.get_Range(COleVariant(_T("A1")), COleVariant(_T("A1")));
//获得单元格的内容
COleVariant rValue;
rValue = COleVariant(Range.get_Value2());
//转换成宽字符
rValue.ChangeType(VT_BSTR);
//转化格式并输出
this->MessageBox(CString(rValue.bstrVal));
}
13.保存与关闭按钮代码
void CExcleOpenDlg::OnBnClickedSaveandclose()
{
//保存工作簿
book.put_Saved(TRUE);
//退出工作薄
ExcelApp.Quit();
books.ReleaseDispatch();//释放所有工作簿
ExcelApp.ReleaseDispatch();//关闭EXCEL服务器
}
demo链接:https://download.csdn.net/download/weixin_43842146/11694684