VC对Excel的操作.docx
- 文档编号:5575700
- 上传时间:2022-12-28
- 格式:DOCX
- 页数:10
- 大小:292.34KB
VC对Excel的操作.docx
《VC对Excel的操作.docx》由会员分享,可在线阅读,更多相关《VC对Excel的操作.docx(10页珍藏版)》请在冰豆网上搜索。
VC对Excel的操作
VC2010对Excel的操作
1.创建新的C++工程
创建基于对话框的MFC程序
2.添加库、添加Excel类库
在工程名上右键,选择“添加”—“类”(或者点击菜单栏的“项目”->“添加类”),选择“TypeLib中的MFC类”(MFCClassFromTypeLib)
类来源选“注册表”,在可用的类型库中选择“MicrosoftExcel11.0ObjectLibrary<1.5>”在接口列表框中选择需要的类,在此,我们选择_Application,_Workbook,Worksheet,Range,Workbooks,Worksheets这六个就可以了。
可以看到,六个类被添加了进来。
3.
修改头文件
分别将加进来的六个头文件上面的“#import"C:
\\ProgramFiles\\MicrosoftOffice\\OFFICE11\\EXCEL.EXE"no_namespace”注释掉。
4.添加头文件
在stdAfx.h头文件中添加加进来的这几个头文件
#include"CApplication.h"
#include"CRange.h"
#include"CWorkbook.h"
#include"CWorkbooks.h"
#include"CWorksheet.h"
#include"CWorksheets.h"
5.修改错误
编译,会出现两个错误:
…\crange.h(335):
warningC4003:
“DialogBoxW”宏的实参不足
…\crange.h(335):
errorC2059:
语法错误:
“,”
双击错误提示,定位在错误行,
VARIANTDialogBox()
{
VARIANTresult;
InvokeHelper(0xf5,DISPATCH_METHOD,VT_VARIANT,(void*)&result,NULL);
returnresult;
}
将该函数名“DialogBox()”前面加“_”下划线,即“_DialogBox()”,这样就可以编译成功了。
6.在对话框中添加一个编辑框,并为其关联一CEdit类型变量m_Path,添加“打开”按钮,实现打开一已经存在的Excel文件。
并将路径显示在编辑框中。
实现代码如下。
voidCExportToExcelDlg:
:
OnBnClickedButtonOpen()
{
CFileDialogfile(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
_T("EXCEL文件t(*.xls;*.xlsx)|*.xls;*.xlsx||"),AfxGetMainWnd());
if(file.DoModal()==IDOK)
{
CStringstrPath=file.GetPathName();
m_Path.SetWindowTextW(strPath);
CApplicationapp;
CWorkbookbook;
CWorkbooksbooks;
if(!
app.CreateDispatch(_T("Excel.Application")))
{
MessageBox(_T("Error!
CreatExcelApplicationServerFaile!
"));
exit
(1);
}
//books.AttachDispatch(app.get_Workbooks(),true);
//book.AttachDispatch(books.Add(_variant_t(strPath)));
books=app.get_Workbooks();
book=books.Add(_variant_t(strPath));
app.put_Visible(true);
//结尾,释放
book.ReleaseDispatch();
books.ReleaseDispatch();
app.ReleaseDispatch();
app.Quit();
}
}
7.在对话框中添加“写入”按钮,实现新建一Excel文件(存在则覆盖),并向文件中写入数据。
实现代码如下。
voidCExportToExcelDlg:
:
OnBnClickedButtonWrite()
{
CStringstrFile=_T("D:
\\WriteToExcelTest.xlsx");
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
CApplicationapp;
CWorkbookbook;
CWorkbooksbooks;
CWorksheetsheet;
CWorksheetssheets;
CRangerange;
CFontfont;
if(!
app.CreateDispatch(_T("Excel.Application")))
{
MessageBox(_T("Error!
CreatExcelApplicationServerFaile!
"));
}
books=app.get_Workbooks();
//books.AttachDispatch(app.get_Workbooks());可代替上面一行
book=books.Add(covOptional);
//book.AttachDispatch(books.Add(covOptional),true);可代替上面一行
sheets=book.get_Worksheets();
//sheets.AttachDispatch(book.get_Worksheets(),true);可代替上面一行
sheet=sheets.get_Item(COleVariant((short)1));
//sheet.AttachDispatch(sheets.get_Item(_variant_t("sheet1")),true);可代替上面一行
//下面两行,是向A1中写入"Yeah!
Icanwritedatatoexcel!
"
range=sheet.get_Range(COleVariant(_T("A1")),COleVariant(_T("A1")));
range.put_Value2(COleVariant(_T("Yeah!
Icanwritedatatoexcel!
")));
//下面是向第二行的前十个单元格中输入1到10,十个数字
for(longi=1;i<11;i++)
range.put_Item(_variant_t((long)2),_variant_t((long)i),_variant_t((long)i));
//设置列宽
range=sheet.get_Range(COleVariant(_T("A1")),COleVariant(_T("J1")));
range.put_ColumnWidth(_variant_t((long)5));
//显示表格
app.put_Visible(TRUE);
//保存
book.SaveCopyAs(COleVariant(strFile));
book.put_Saved(true);
//结尾,释放
book.ReleaseDispatch();
books.ReleaseDispatch();
app.ReleaseDispatch();
app.Quit();
}
8.在对话框中添加列表控件,并关联变量m_Grid,并设置显示为报表样式。
在对话框中添加“写入列表”按钮,实现将对话框中已有的表写入到Excel中。
实现代码如下。
在初始化函数中,先初始化列表。
//设置列表视图的扩展风格
m_Grid.SetExtendedStyle(LVS_EX_FLATSB//扁平风格显示滚动条
|LVS_EX_FULLROWSELECT//允许整行选中
|LVS_EX_HEADERDRAGDROP//允许整列拖动
|LVS_EX_ONECLICKACTIVATE//单击选中项
|LVS_EX_GRIDLINES);//画出网格线
//设置表头
m_Grid.InsertColumn(0,_T("编号"),LVCFMT_LEFT,100,0);
m_Grid.InsertColumn(1,_T("姓名"),LVCFMT_LEFT,100,1);
m_Grid.InsertColumn(2,_T("所属部门"),LVCFMT_LEFT,100,2);
//向列表中插入数据
intcount=0;
m_Grid.InsertItem(count,_T("001"));
m_Grid.SetItemText(count,1,_T("张一"));
m_Grid.SetItemText(count++,2,_T("销售部"));
m_Grid.InsertItem(count,_T("002"));
m_Grid.SetItemText(count,1,_T("列二"));
m_Grid.SetItemText(count++,2,_T("研发部"));
m_Grid.InsertItem(count,_T("003"));
m_Grid.SetItemText(count,1,_T("宇三"));
m_Grid.SetItemText(count++,2,_T("采购部"));
m_Grid.InsertItem(count,_T("004"));
m_Grid.SetItemText(count,1,_T("宙四"));
m_Grid.SetItemText(count,2,_T("宣传部"));
再编写按钮的响应函数
voidCExportToExcelDlg:
:
OnBnClickedButtonWritelist()
{
//TODO:
在此添加控件通知处理程序代码
CStringstrFile=_T("D:
\\WriteListToExcelTest.xlsx");
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
CApplicationapp;
CWorkbookbook;
CWorkbooksbooks;
CWorksheetsheet;
CWorksheetssheets;
CRangerange;
if(!
app.CreateDispatch(_T("Excel.Application")))
{
MessageBox(_T("Error!
CreatExcelApplicationServerFaile!
"));
exit
(1);
}
books=app.get_Workbooks();
book=books.Add(covOptional);
sheets=book.get_Worksheets();
sheet=sheets.get_Item(COleVariant((short)1));
//得到全部Cells
range.AttachDispatch(sheet.get_Cells());
CStringsText[]={_T("编号"),_T("姓名"),_T("所属部门")};
for(intsetnum=0;setnum { for(intnum=0;num<3;num++) { if(! setnum) { range.put_Item(_variant_t((long)(setnum+1)),_variant_t((long)(num+1)), _variant_t(sText[num])); } else { range.put_Item(_variant_t((long)(setnum+1)),_variant_t((long)(num+1)), _variant_t(m_Grid.GetItemText(setnum-1,num))); } } } //保存 book.SaveCopyAs(COleVariant(strFile)); book.put_Saved(true); app.put_Visible(true); //释放对象 range.ReleaseDispatch(); sheet.ReleaseDispatch(); sheets.ReleaseDispatch(); book.ReleaseDispatch(); books.ReleaseDispatch(); app.ReleaseDispatch(); app.Quit(); } 最终结果如下。 按【打开】按钮,出现打开对话框,可选择Excel打开。 按【写入】按钮,打开Excel文件。 按下【写入列表】,打开Excel文件。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC Excel 操作