Excel编程基础操作汇总


一、变量定义与初始化

	LPDISPATCH		lpDisp;
	CRange			m_myRange;
	CWorkbook		m_myBook;
	CWorkbooks		m_myBooks;
	CWorksheet		m_mySheet;
	CWorksheets		m_mySheets;
	CApplication	m_myApp;

	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
	if(!m_myApp.CreateDispatch(_T("Excel.Application")))
	{
		AfxMessageBox(_T("无法创建Excel应用"));
		return false;
	}

	m_myBooks.AttachDispatch(m_myApp.get_Workbooks());

	CString strFileName("test.xls");
	CString strSheetName("英语四级");

、基础工作簿操作

	///////////////////////////////////////////////////////////////////////////////////////////
	//
	//
	//基础工作簿操作
	//
	//////////////////////////////////////////////////////////////////////////////////////////

	long nItem;	
	long nItemCount;

	//打开工作簿(Excel文件)
	try
	{		
		lpDisp = m_myBooks.Open(strFileName, covOptional, covOptional, 
			covOptional, covOptional, covOptional, covOptional,  
			covOptional, covOptional, covOptional, covOptional, 
			covOptional, covOptional, covOptional, covOptional);
		m_myBook.AttachDispatch(lpDisp);
	}
	catch (_com_error e)
	{
		CString strMsg;
		strMsg.Format("%s", e.ErrorMessage());
		AfxMessageBox(strMsg);
		return false;
	}
	
	//新建工作簿(Excel文件)
	try
	{
		lpDisp = m_myBooks.Add(covOptional);
		m_myBook.AttachDispatch(lpDisp);
	}
	catch (_com_error e)
	{
		CString strMsg;
		strMsg.Format("%s", e.ErrorMessage());
		AfxMessageBox(strMsg);
		return false;
	}

	//保存工作簿(保存Excel文件)--默认保存路径为Excel默认保存路径,不是程序当前路径,这个必须注意
	m_myBook.SaveAs(_variant_t(strFileName), covOptional, covOptional, 
					covOptional, covOptional, covOptional, (long)0, 
					covOptional, covOptional, covOptional, covOptional, 
					covOptional);

	//保存工作簿一个副本
	m_myBook.SaveCopyAs(_variant_t(strFileName));

	//获取当前工作簿数量
	nItemCount = m_myBooks.get_Count();

	//获得指定工作簿
	nItem = 1;	//在Excel中所有的序号都是从1开始,而不是从0开始
	if(nItem <= nItemCount)
	{
		lpDisp = m_myBooks.get_Item(_variant_t(nItem));
		m_myBook.AttachDispatch(lpDisp);
	}
	
	//关闭工作簿
	m_myBook.Close(covOptional, covOptional, covOptional);

三、基础工作表操作

	/////////////////////////////////////////////
	//
	//
	//基础工作表操作
	//
	////////////////////////////////////////////
	long nSheet;
	long nSheetCount;

	//获取当前工作表集
	lpDisp = m_myBook.get_Worksheets();
	m_mySheets.AttachDispatch(lpDisp);

	//获得当前工作表数量
	nSheetCount = m_mySheets.get_Count();
	
	//获得当前工作表
	lpDisp = m_myBook.get_ActiveSheet();
	m_mySheet.AttachDispatch(lpDisp);

	//获得指定工作表
	nSheet = 2;
	lpDisp = m_mySheets.get_Item(_variant_t(nSheet));
	//lpDisp = m_mySheets.get_Item(_variant_t(strSheetName));
	m_mySheet.AttachDispatch(lpDisp);

	//获取当前工作表名称
	strSheetName = m_mySheet.get_Name();

	//设置/更改当前工作表名称
	m_mySheet.put_Name(strSheetName);

	//添加工作表--在所有工作表之后添加一个工作表
	lpDisp = m_mySheets.Add(covOptional, _variant_t(nSheetCount), _variant_t((long)1), covOptional);
	m_mySheet.AttachDispatch(lpDisp);

	//删除指定工作表
	nItem = 5;
	lpDisp = m_mySheets.get_Item(_variant_t(nItem));
	//lpDisp = m_mySheets.get_Item(_variant_t(strSheetName));
	m_mySheet.AttachDispatch(lpDisp);
	m_mySheet.Delete();

四、基础单元格操作

	/////////////////////////////////////////////
	//
	//
	//基本单元格操作
	//
	////////////////////////////////////////////
	long nRow, nCol;
	long nRowCount, nColCount;

	VARIANT vResult;
	CString strValue;

	//获取当前工作表获得区域
	lpDisp = m_mySheet.get_Cells();
	m_myRange.AttachDispatch(lpDisp);

	//获得当前工作表数据的行数
	lpDisp = m_myRange.get_Rows();
	m_myRange.AttachDispatch(lpDisp);
	nRowCount = m_myRange.get_Count();

	//获的当前工作表数据的列数
	lpDisp = m_myRange.get_Columns();
	m_myRange.AttachDispatch(lpDisp);
	nColCount = m_myRange.get_Count();

	//获取指定单元格的数据(字面数据,且以字符的形式读出)
	nRow = 2;
	nCol = 3;
	vResult = m_myRange.get_Item(_variant_t(nRow), _variant_t(nCol));
	if(vResult.vt == VT_DISPATCH)
	{
		VARIANT values;
		m_myRange.AttachDispatch(vResult.pdispVal, TRUE);
		values = m_myRange.get_Text();
		strValue = values.bstrVal;
	}

	//设置/更改指定单元格数据
	nRow = 1;
	nCol = 5;	//特别注意,Excel的所有序号都是从1开始
	m_myRange.put_Item(_variant_t(nRow), _variant_t(nCol), _variant_t(strValue));



你可能感兴趣的:(Excel,CApplication)