EXCEL自动化
来源:互联网 发布:dosbox优化 编辑:程序博客网 时间:2024/04/30 00:25
http://hi.baidu.com/%D0%A1%C0%EE%B7%C9%B5%B6%D4%D9%B7%C9%B5%B6/blog/item/5cf24817fb01fb10972b43a7.html
1. 概念
操作别的应用程序提供的对象的程序是automation client.而提供对象供别的应用程序操作的就是automation server。client从server那里获取属性和方法来操作对象有两种方式:static bound和dynamic bound。分别是在编译时和运行时获知。dynamic bound通过IDispach来实现,而static bound是通过COleDispachDriver来实现。
2. 步骤
2.1 在Solution Explorer中右键点击工程,并且选择Add->Add Class,在对话框中选择MFC Class From TypeLib。在Available type libraries下拉列表中选择Microsoft Excel 11.0 Object Library.这时就可以从Interfaces列表中选择我们要生成的Class的接口。这里需要用到的接口有_Application, _Workbook,_Worksheet,Workbooks,Worksheets,Range。对应的向导自动产生了CApplication,CWorkbook,CWorksheet,CWorkbooks,CWorksheets,CRange这几个类。在程序中,我们就用这些类来完成对Excel文件的读入。
2.2 数据读取
创建Excel app ---->获取books ---->获取sheet ---->获取range
CApplication m_excelApp;
CWorkbooks m_books;
CWorkbook m_book;
CWorksheets m_sheets;
CWorksheet m_sheet;
COleSafeArray m_data;
CRange range;
CRange row_range;
CRange col_range;
if (!m_excelApp.CreateDispatch(_T("Excel.Application"),NULL))
{
AfxMessageBox(_T("create Excel server fail!"));
return FALSE;
}
m_books.AttachDispatch(m_excelApp.get_Workbooks());
m_book.AttachDispatch(m_books.Add(_variant_t(lpszPathName)));
m_sheets.AttachDispatch(m_book.get_Sheets());
m_sheet.AttachDispatch(m_sheets.get_Item(_variant_t(1)));
range.AttachDispatch(m_sheet.get_UsedRange());
row_range.AttachDispatch(range.get_Rows());
col_range.AttachDispatch(range.get_Columns());
m_nRow = row_range.get_Count();
m_nCol = col_range.get_Count();
m_data = range.get_Value(COleVariant(DISP_E_PARAMNOTFOUND,VT_ERROR));
row_range.DetachDispatch();
col_range.DetachDispatch();
range.DetachDispatch();
m_sheet.DetachDispatch();
m_sheets.DetachDispatch();
m_book.DetachDispatch();
m_books.DetachDispatch();
m_excelApp.Quit();//注意要先Quit在ReleaseDispatched,否则就会出现excel线程无法退出的情况。这是由于执行这个操作的时候回去查看它的dispatched情况,如果先release了,检查不到就不会执行任何操作。
m_excelApp.ReleaseDispatch();
COleVariant vData;
long index[2];
index[0] = iRow + 1;
index[1] = iCol + 1;
m_data.GetElement(index, vData);
CString str(vData);
在实际使用过程中,如果导入的Excel文件过大,显示会很迟缓,13M的文件显示出来大概需要30sec的时间。
在上面的代码中m_data就存储着第一个sheet中所有的数据,如果要取得(i,j)位置的字符串,就可以用下面的代码来获得:
- EXCEL自动化
- Delphi自动化控制Excel
- Excel自动化公式
- Python自动化Excel操作
- 使用 Excel 对象模型实现 Excel 自动化
- .net 实现excel 自动化操作
- QTP-利用EOM自动化EXCEL
- VC Office 自动化(Word、Excel)
- python+win32com实现excel自动化
- Delphi开发OLE自动化控制器操纵Excel
- C# .NET 中实现 Microsoft Excel 自动化
- 使用MFC自动化操作Excel文档
- 用C实现Excel的OLE自动化
- VB,以及VB.NET自动化EXCEL
- VS2005中使用Excel自动化对象
- excel在QTP中实现自动化
- Ruby实现http自动化测试(三)------Excel
- Badboy自动化测试工具 读取Excel
- eWebEditor在IE8下所有按钮都无效
- Transferring Jobs 工作调动
- 西方祝酒贺词大搜罗
- Java 流(Stream)简介:3、对象序列化
- Beauty
- EXCEL自动化
- Love Your Life
- ucos与uclinux的区别
- DataTable to Entity - DataTable 转 实体类
- Spring配置中的一点错
- 磁珠的作用
- Asp.net页面之间传递参数的几种方法
- Unicode & UTF-8
- php学习共享水印程序