在MFC中对Excel的一些操作

首先要在程序中加载CExcel.h和CExcel.cpp文件,这里面包装了很多函数和对Excel文件的操作,下面所有程序中的m_excel都是类CExcel的对象,如:

private:

_Application pApp;
Workbooks pBooks ;
_Workbook pBook ;
Worksheets pSheets ;
_Worksheet pSheet;
Range pRange;
Interior pInterior;
FontPtr pFont;

首先在BOOL CVCExcelApp::InitInstance()之中,int nResponse = dlg.DoModal()语句之后加入如下代码:

if(CoInitialize(NULL)==0)//初始化COM库 

     AfxMessageBox( "初始化COM失败!" ); 
     exit (1); 
}
然后在return FALSE;语句之前加入:
::CoUninitialize();//释放COM库

使用Excel模板来新建一个excel文件,并保存在指定的地址上

UpdateData();//外部有对话框,此时可以将对话框中数据拷贝给与对话框绑定的变量
CString modPath = _T("C:\\Users\\军\\Desktop\\excel.xls");//模板所在的地址
CString strName = m_fileName + _T(".xlsx");//新建的Excel文件的文件名
CString pathName = m_saveAddr + strName;//新建的Excel文件的保存地址
//启动Excel服务
CoInitialize(NULL);
if (!m_execl.pApp.CreateDispatch(_T("Excel.Application"), NULL))
{
AfxMessageBox(_T("创建Excel服务失败!"));
return;
}
m_execl.pApp.put_Visible(FALSE);//设置Excel文件不打开
m_execl.pBooks.AttachDispatch(m_execl.pApp.get_Workbooks(), TRUE);
m_execl.pBook.AttachDispatch(m_execl.pBooks.Add((_variant_t)modPath), TRUE);
//加载模板Excel文件
m_execl.pSheets.AttachDispatch(m_execl.pBook.get_Worksheets(), true);//加载sheet页面
m_execl.pSheet.AttachDispatch(m_execl.pSheets.get_Item(_variant_t("Sheet1")), true);

//将新建的Excel文件保存到指定的地址中,此时保存在pathName地址中
m_execl.pSheet.SaveAs(pathName, vtMissing, vtMissing, vtMissing, vtMissing,
vtMissing, vtMissing, vtMissing, vtMissing, vtMissing);

//释放Excel实例
//释放对象
m_execl.pRange.ReleaseDispatch();
m_execl.pSheet.ReleaseDispatch();
m_execl.pSheets.ReleaseDispatch();
m_execl.pBook.ReleaseDispatch();
m_execl.pBooks.ReleaseDispatch();
//退出程序
m_execl.pApp.Quit();
//pApp一定要释放,否侧程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候回出错
m_execl.pApp.ReleaseDispatch();

注:本程序里面的Excel文件后缀名为.xlsx,这个要依据情况定,有时可能是.xls

/

下面介绍怎么向指定路径下的Excel文件中写入数据

CoInitialize(NULL);
if (!m_execl.pApp.CreateDispatch(_T("Excel.Application")))
{
MessageBox(_T("创建Excell服务失败!"));
exit(1);
}
m_execl.pApp.put_Visible(FALSE);
m_execl.pBooks.AttachDispatch(m_execl.pApp.get_Workbooks(), true);
//打开要写数据的Excel文件,其中excelPath为该Excel文件的保存路径
m_execl.pBook.AttachDispatch(m_execl.pBooks.Open(excelPath, vtMissing, vtMissing,vtMissing,
vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing,
vtMissing, vtMissing, vtMissing,vtMissing));
m_execl.pSheets.AttachDispatch(m_execl.pBook.get_Worksheets(), true);
m_execl.pSheet.AttachDispatch(m_execl.pSheets.get_Item(_variant_t("sheet1")), true);
m_execl.pRange.AttachDispatch(m_execl.pSheet.get_Cells(), true);

//获得Excel文件中已经使用了的行数和列数

//得到该Excel文档中已经使用了的列数
m_execl.pRange = m_execl.pSheet.get_UsedRange();
m_execl.pRange = m_execl.pRange.get_Columns();
long icul = m_execl.pRange.get_Count();

//得到Excel文档中已经使用了的行数
m_execl.pRange = m_execl.pSheet.get_UsedRange();
m_execl.pRange = m_execl.pRange.get_Rows();
long iRow = m_execl.pRange.get_Count();

long iRows = iRow + 1;//这里当我们要写数据时,都是从已经使用了的下一行开始写数据,所以要将已经使用的行数+1来得到下一行

for (int c = 1; c <= icul; )//这里我是使用了CExcel类中自带的写数据的函数
{

m_execl.PutValue(c, iRows, strNum);//c表示要写数据的列,iRow表示要写数据的行,strNum表示写入的字符串,这里是CString型

c++

}

/下面是较一般的写数据的方便

 m_pRang.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("数学系研究生课程统计")); //往第一行第一列的单元格中写数据

  m_pRang.SetItem(_variant_t(( long )2),_variant_t(( long )1),_variant_t( "课程名" )); //往第二行第一列的单元格中写数据
//数据写完后就是设置格式

//加载已经使用的单元格
m_execl.pRange.AttachDispatch(m_execl.pSheet.get_UsedRange());

//水平对齐:默认=1,居中=-4108,左=-4131,右=-4152 
//垂直对齐:默认=2,居中=-4108,左=-4160,右=-4107 

m_execl.pRange.put_HorizontalAlignment(_variant_t((long)-4108));
m_execl.pRange.put_VerticalAlignment(_variant_t((long)-4108));

//写完数据后注意一定要释放对象,关闭应用
m_execl.pRange.ReleaseDispatch();
m_execl.pSheet.ReleaseDispatch();
m_execl.pSheets.ReleaseDispatch();
m_execl.pBook.ReleaseDispatch();
m_execl.pBooks.ReleaseDispatch();
//退出程序
m_execl.pApp.Quit();
m_execl.pApp.ReleaseDispatch();

转载于:https://www.cnblogs.com/pengjun-shanghai/p/4835910.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在VS2019,我们可以使用MFC操作Excel文件。MFC(Microsoft Foundation Class)是一个Microsoft Windows的C++类库,它提供了开发Windows应用程序的框架和工具。 要操作Excel文件,我们需要添加以下头文件: #include <afxdb.h> #include <afxdao.h> 然后,我们可以使用CDaoDatabase类来连接Excel文件: CDaoDatabase db; CString strConnect = _T("Excel 12.0;HDR=Yes;IMEX=1;DATABASE=C:\\Path\\To\\Your\\ExcelFile.xlsx"); db.Open(strConnect); 接下来,我们可以使用SQL查询来执行各种操作。例如,我们可以使用CDaoRecordset类来获取数据: CDaoRecordset rs(&db); rs.Open(_T("SELECT * FROM [Sheet1$]")); 然后,我们可以使用rs.GetFieldValue方法来获取特定单元格的值: CString strValue; rs.GetFieldValue(_T("ColumnName"), strValue); 或者,我们可以使用rs.GetFieldValueAsDouble或rs.GetFieldValueAsInt等方法来获取数值类型的数据。 如果我们想要更新或插入数据,我们可以使用rs.Edit和rs.Update方法: rs.Edit(); rs.SetFieldValue(_T("ColumnName"), strValue); rs.Update(); 当我们完成操作后,记得关闭数据库连接: db.Close(); 需要注意的是,MFC操作Excel文件的功能相对较为有限,对于复杂的操作可能不够灵活。此外,操作Excel文件可能需要安装相应的驱动程序或Excel软件本身。 总之,使用VS2019MFC可以方便地操作Excel文件,但需要注意其功能的限制和对相关依赖的处理。 ### 回答2: VS2019 MFC是一种用于创建Windows桌面应用程序的开发工具。它提供了许多功能强大的库和类,使开发人员能够轻松地操作Excel文件。 在VS2019 MFC操作Excel文件的第一步是添加MFC应用程序项目,并设置项目属性以包括“Microsoft Office Excel”组件。然后,您可以使用类库的一些类和函数来处理Excel文件。 首先,您需要使用CExcelApplication类的实例来打开Excel应用程序。然后,使用CExcelWorkbook类的实例打开特定的Excel文件。您还可以使用CExcelWorksheet类的实例选择要操作的工作表。 接下来,您可以使用类的一些函数来读取或写入Excel文件的数据。例如,使用CExcelWorksheet类的GetCell函数可以获取单元格的内容,使用SetCell函数可以设置单元格的值。 此外,您还可以使用MFC类库提供的其他功能来处理Excel文件,例如合并单元格、设置格式、创建图表等。 在处理完Excel文件后,您需要记得关闭工作簿和应用程序,以释放资源并确保文件已保存。 总而言之,通过使用VS2019 MFC可以很方便地操作Excel文件。无论是读取还是写入数据,设置格式还是创建图表,这个开发工具提供了一整套强大的类和函数,使开发人员能够轻松地处理Excel文件。 ### 回答3: 在VS2019,带有MFC(Microsoft Foundation Class)的应用程序可以通过使用Microsoft Office提供的COM接口来操作Excel。 首先,我们需要在MFC应用程序导入Excel相关的头文件,如afxdao.h和afxisapi.h。 接下来,我们可以使用COleVariant类来表示任何类型的数据,因为Excel单元格的数据类型可以是字符串、整数、浮点数等。 要操作Excel,我们需要创建一个Excel应用程序对象,可以使用COleDispatchDriver类来处理和管理COM对象的生命周期。我们可以通过以下代码创建一个Excel应用程序对象: ```cpp COleDispatchDriver excelApp; if (!excelApp.CreateDispatch("Excel.Application")) { // 创建失败的处理代码 return; } ``` 接下来,我们可以使用excelApp对象打开或新建一个工作簿,并操作的工作表。例如,要打开一个名为"MyBook.xlsx"的工作簿,我们可以使用以下代码: ```cpp COleDispatchDriver workbooks; workbooks = excelApp.GetIDispatch(); workbooks.InvokeHelper(L"Open", DISPATCH_METHOD, NULL, L"MyBook.xlsx"); ``` 然后,我们可以使用COleDispatchDriver类的InvokeHelper方法来调用Excel的各种功能。例如,要读取A1单元格的值,可以使用以下代码: ```cpp COleDispatchDriver activeSheet; activeSheet = workbooks.InvokeHelper(L"ActiveSheet", DISPATCH_PROPERTYGET); COleDispatchDriver cell; cell.CreateDispatch("Excel.Range", activeSheet.InvokeHelper(L"Range", DISPATCH_PROPERTYGET, L"A1")); COleVariant value; cell.InvokeHelper(L"Value", DISPATCH_PROPERTYGET, value.GetAddress(), 0); ``` 同样,我们也可以使用InvokeHelper方法来修改单元格的值。例如,要将"Hello World"写入B2单元格,可以使用以下代码: ```cpp cell = workbooks.InvokeHelper(L"ActiveSheet", DISPATCH_PROPERTYGET).InvokeHelper(L"Range", DISPATCH_PROPERTYGET, L"B2"); cell.InvokeHelper(L"Value", DISPATCH_PROPERTYPUT, NULL, L"Hello World"); ``` 最后,当我们完成Excel操作后,我们需要释放和关闭Excel应用程序。我们可以使用以下代码进行释放和关闭: ```cpp if (workbooks != NULL) { workbooks.InvokeHelper(L"Close", DISPATCH_METHOD); workbooks.ReleaseDispatch(); } excelApp.InvokeHelper(L"Quit", DISPATCH_METHOD); excelApp.ReleaseDispatch(); ``` 这是使用VS2019MFC操作Excel的基本步骤。我们可以根据需要调用更多的Excel功能来完成更复杂的操作,例如合并单元格、设置样式和格式等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值