MFC对Excel的操作

2026/1/27 19:16:41

MFC对excel的操作 VC操作Excel

1、Excel的层次结构: Application Workbooks Workbook ......

Worksheets Worksheet ...... Range Font Borders ...... .......

2、插入类型库 (1)、在一个已有的MFC工程按Ctrl + W 弹出ClassWizard对话框。 (2)、Add Class...\\From a type Library... 在 Office 目录中,找到你想使用的Excel类型库(Offce2000下,此目录在C:\\Program Files\\Microsoft Office\\Office\\EXCEL9.OLB;Offce2003下,此目录在C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE)。选择EXCEL9.OLB或EXCEL.EXE; (3)、在弹出的对话框中选择要添加的类,具体选那些类要根据实际情况而定。当然你也可以全选

3、基本操作

当你要选用Excel生成报表时,表的结构可能有固定的部分,这时做一个模板,这样可以减少编码的负担。加载Excel模板的代码如下:

//(1)定义变量:下面的类型都是通过加入EXCEL类型库之后自动定义的C++类,你可以自由使用。(_Application,Workbook……等) _Application ExcelApp; // 定义Excel应用程序 Workbooks wbsBooks; _Workbook wbBook; Worksheets wssSheets; _Worksheet wsSheet; Range rngXls;

FontXls font; // 字体

BordersXls border; // 边框 //(2) 初始化Com,一般放在应用程序类的初始化函数中,并在结束时使用::CoUninitialize();释放COM库。

if (::CoInitialize( NULL ) == E_INVALIDARG) {

AfxMessageBox(_T(\初始化Com失败!\ }

//(3)创建Excel2000服务器(启动Excel)

if ( !ExcelApp.CreateDispatch(_T(\

{

AfxMessageBox(_T(\创建Excel2000服务失败!\ ::CoUninitialize(); }

ExcelApp.SetVisible(FALSE); // 隐藏 //(4)打开模板 CString strPath;

strPath += \模板的路径 CFileFind filefind;

if( !filefind.FindFile( strPath ) ) {

AfxMessageBox( \没有找到模版文档,请其查找\ CFileDialog dlg (TRUE, NULL, NULL,

OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, \模版||*.xlt||\ NULL );

if (IDOK == dlg.DoModal()) {

strPath = dlg.GetPathName(); } }

//(5)操作strPath模板路径

COleVariant vOptional( (long)DISP_E_PARAMNOTFOUND, VT_ERROR ); try {

wbsBooks.AttachDispatch(ExcelApp.GetWorkbooks(), TRUE);

wbBook.AttachDispatch(wbsBooks.Add(COleVariant(strPath)), TRUE );

wssSheets = wbBook.GetWorksheets();

wsSheet = wssSheets.GetItem(_variant_t(\ wsSheet.SetName( \改名

// 得到全部Cells,此时,rngXls 是cells的集合 rngXls = wsSheetAcc.GetCells(); }

catch (CException e) {

AfxMessageBox( \ }

我们知道在Excel中每个单元格可以用A1,A2,C3的形式来表示。譬如获得A1到C5之间单元格集可以这样实现,rngXls = rngXls.GetRange( COleVariant(_T(“A1“)),COleVariant(_T(“C5“)) );但是我们习惯用坐标形式如(1,1),(2,1)来表示每个单元格,在上述操作中,就没有办法用我们习惯的坐标的形式实现。它们之间如何转换那?这个用如下函数实现.

// Converts (row,col) indices to an Excel-style A1:C1 string in Excel void CPrintInExcel::IndexToString( int row, int col, char* strResult ) {

if( col > 26 ) {

sprintf( strResult,\ } else {

sprintf( strResult,\ } }

//(6)又一个具体操作,里面学习了几个基本操作------------------------------------- 创建Excel服务;

if(!m_ExlApp.CreateDispatch(\ {

AfxMessageBox(\创建Excel服务失败!\ return; }

//设置为可见

m_ExlApp.SetVisible(TRUE);

下面得到应用程序所在的路径,然后得到了模板的路径,因为模板所在目录就是本应用程序的目录,///////////////////

CString theAppPath,theAppName; char Path[MAX_PATH];

GetModuleFileName(NULL,Path,MAX_PATH);//得到应用程序的全路径 theAppPath=(CString)Path;

theAppName=AfxGetApp()->m_pszAppName; theAppName+=\

//把最后的文件名去掉 int length1,length2;

length1=theAppPath.GetLength(); length2=theAppName.GetLength();

theAppPath.Delete(length1-length2,length2); ////////////////////////////////////////////////////////////////

CString TempPath=\

TempPath=theAppPath+\模板的路径

m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks(),TRUE);

m_ExlBook.AttachDispatch(m_ExlBooks.Add((_variant_t)TempPath),TRUE);//加载EXCEL模板

m_ExlSheets.AttachDispatch(m_ExlBook.GetSheets(),TRUE);//加载Sheet页面

//添加新的Sheet页面

m_ExlSheets.Add(vtMissing,vtMissing,_variant_t((long)1),vtMissing);

//删除第二个Sheet页面

m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)2)),TRUE); m_ExlSheet.Delete();

//把第一个Sheet页面的名字改变为TestSheet

m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)1)),TRUE); m_ExlSheet.SetName(\

///////合并第一行单元格A1至D1//////

//加载要合并的单元格

m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t(\

m_ExlRge.Merge(_variant_t((long)0));

////////设置表格内容////////

m_ExlRge.AttachDispatch(m_ExlSheet.GetCells(),TRUE);//加载所有单元格

m_ExlRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t(\数学系研究生课程统计\

m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t(\课程名\ m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)2),_variant_t(\课时\ m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)3),_variant_t(\难度\ m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)4),_variant_t(\教学方式\

m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)1),_variant_t(\泛函分析\ m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)2),_variant_t(\


MFC对Excel的操作.doc 将本文的Word文档下载到电脑
搜索更多关于: MFC对Excel的操作 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219