C++操作EXCEL-功能包含启动,打开,写入,保存和关闭

1.新建一个MFC工程
C++操作EXCEL-功能包含启动,打开,写入,保存和关闭_第1张图片
2.打开类向导进入类向导对话框
C++操作EXCEL-功能包含启动,打开,写入,保存和关闭_第2张图片
3.点击“添加类”的下拉菜单,选择“类型库中的MFC类‘,进入类型库添加类向导
C++操作EXCEL-功能包含启动,打开,写入,保存和关闭_第3张图片
4.在类型库添加类向导,选择文件,在位置中选择Excel.EXE所在的路径,向导会自动显示它的接口C++操作EXCEL-功能包含启动,打开,写入,保存和关闭_第4张图片
5.从接口处选择对应的接口,生成类文件
C++操作EXCEL-功能包含启动,打开,写入,保存和关闭_第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对话框,在其中创建五个按钮,分别为启动,打开文件,写入,读取,保存与退出
C++操作EXCEL-功能包含启动,打开,写入,保存和关闭_第6张图片
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

你可能感兴趣的:(C++操作EXCEL-功能包含启动,打开,写入,保存和关闭)