您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页VC2010操作Excel

VC2010操作Excel

来源:五一七教育网
VC2010对Excel的操作

1. 创建新的C++工程

创建基于对话框的MFC程序 2. 添加库、添加Excel类库

在工程名上右键,选择“添加”—“类”(或者点击菜单栏的“项目”->“添加类”),选择“TypeLib中的MFC类”(MFC Class From TypeLib)

类来源选“注册表”,在可用的类型库中选择“Microsoft Excel 11.0 Object Library<1.5>”在接口列表框中选择需要的类,在此,我们选择

_Application,_Workbook,Worksheet,Range,Workbooks,Worksheets这六个就可以了。

可以看到,六个类被添加了进来。 3. 修改头文件

分别将加进来的六个头文件上面的“#import \"C:\\\\Program

Files\\\\Microsoft Office\\\\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): warning C4003: “DialogBoxW”宏的实参不足 …\\crange.h(335): error C2059: 语法错误:“,” 双击错误提示,定位在错误行,

VARIANT DialogBox() { }

VARIANT result;

InvokeHelper(0xf5, DISPATCH_METHOD, VT_VARIANT, (void*)&result, NULL); return result;

将该函数名“DialogBox()”前面加“_”下划线,即“_DialogBox()”,这样就可以编译成功了。 6. 在对话框中添加一个编辑框,并为其关联一CEdit类型变量m_Path,添加“打开”按钮,

实现打开一已经存在的Excel文件。并将路径显示在编辑框中。实现代码如下。

void CExportToExcelDlg::OnBnClickedButtonOpen() {

CFileDialog file(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, {

CString strPath=file.GetPathName(); m_Path.SetWindowTextW(strPath); CApplication app; CWorkbook book; CWorkbooks books;

if (!app.CreateDispatch(_T(\"Excel.Application\"))) { }

//books.AttachDispatch(app.get_Workbooks(),true);

MessageBox(_T(\"Error!Creat Excel Application Server Faile!\")); exit(1);

_T(\"EXCEL文件t(*.xls;*.xlsx)|*.xls;*.xlsx||\"),AfxGetMainWnd());

if(file.DoModal()==IDOK)

} }

//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文件(存在则覆盖),并向文件中写入

数据。实现代码如下。

void CExportToExcelDlg::OnBnClickedButtonWrite() {

CString strFile = _T(\"D:\\\\WriteToExcelTest.xlsx\");

COleVariant

CApplication app; CWorkbook book; CWorkbooks books; CWorksheet sheet; CWorksheets sheets; CRange range; CFont font;

if (!app.CreateDispatch(_T(\"Excel.Application\"))) { }

books = app.get_Workbooks();

//books.AttachDispatch(app.get_Workbooks());可代替上面一行 book = books.Add(covOptional);

//book.AttachDispatch(books.Add(covOptional),true); 可代替上面一行 sheets=book.get_Worksheets();

MessageBox(_T(\"Error!Creat Excel Application Server Faile!\")); covTrue((short)TRUE), covFalse((short)FALSE),

covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

//sheets.AttachDispatch(book.get_Worksheets(),true); 可代替上面一行 sheet = sheets.get_Item(COleVariant((short)1));

//sheet.AttachDispatch(sheets.get_Item(_variant_t(\"sheet1\")),true); 可代替上面一行 //下面两行,是向A1中写入\"Yeah!I can write data to excel!\"

range = sheet.get_Range(COleVariant(_T(\"A1\")),COleVariant(_T(\"A1\"))); range.put_Value2(COleVariant(_T(\"Yeah!I can write data to excel!\")));

//下面是向第二行的前十个单元格中输入1到10,十个数字 for(long i=1;i<11;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(); }

range.put_Item(_variant_t((long)2),_variant_t((long)i),_variant_t((long)i));

8. 在对话框中添加列表控件,并关联变量m_Grid,并设置显示为报表样式。在对话框中

添加“写入列表”按钮,实现将对话框中已有的表写入到Excel中。实现代码如下。 在初始化函数中,先初始化列表。

//设置列表视图的扩展风格

m_Grid.SetExtendedStyle(LVS_EX_FLATSB

|LVS_EX_FULLROWSELECT |LVS_EX_HEADERDRAGDROP |LVS_EX_GRIDLINES);

//扁平风格显示滚动条 //允许整行选中 //允许整列拖动

//单击选中项

//画出网格线

|LVS_EX_ONECLICKACTIVATE

//设置表头

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); //向列表中插入数据

int count = 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(\"宣传部\"));

再编写按钮的响应函数

void CExportToExcelDlg::OnBnClickedButtonWritelist() {

// TODO: 在此添加控件通知处理程序代码

CString strFile = _T(\"D:\\\\WriteListToExcelTest.xlsx\");

COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); CApplication app; CWorkbook book; CWorkbooks books; CWorksheet sheet; CWorksheets sheets; CRange range;

if (!app.CreateDispatch(_T(\"Excel.Application\"))) { MessageBox(_T(\"Error!Creat Excel Application Server Faile!\")); 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());

CString sText[]={_T(\"编号\"),_T(\"姓名\"),_T(\"所属部门\")};

for (int setnum=0;setnum//保存 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文件。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务