最近接到一个把数据导出到excel的任务,我使用的方法是纯API的方法,贴一段初始化代码,内行人一下就明了
CoInitialize(NULL); // 获得EXCEL的CLSID
CLSID clsid;
HRESULT hr = CLSIDFromProgID(L"Excel.Application", &clsid); if(FAILED(hr)) 
{
::MessageBox(NULL, "Excel初始化失败!", "错误", 0x10010);
return;
} // 创建实例
hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&m_pXlApp);
if(FAILED(hr)) 
{
::MessageBox(NULL, "请检查是否已经安装EXCEL!", "错误", 0x10010);
return;
}
但是在网上我发现了很多用另一种方法的,可能是我上面的方法的包装,_Application,贴一段网上方法的代码,内行人还是会明白得
_Application ExcelApp;
Workbooks wbsMyBooks;
_Workbook wbMyBook;
Worksheets wssMysheets;
_Worksheet wsMysheet;
Range rgMyRge;
        //用来设置打印格式
PageSetup pageStp;
LPDISPATCH  pPageStp;
//创建Excel 2000/2003服务(启动Excel)
if (!ExcelApp.CreateDispatch("Excel.Application",NULL))
{
AfxMessageBox("创建Excel服务失败!");
exit(1);
}
这两种方法怎么用术语表达,即我用的是什么方法,网上这种是什么方法,有什么不同,
网上的方法是不是只能在MFC下才能用。
最主要的问题是在vs2008下怎么才能用网上的这种方法,好像要添加好多文件,但不是很清楚,请高人赐教。

解决方案 »

  1.   

    VS2008使用的是Unicode字符集
    在所有的双引号前面加上L,例如
    AfxMessageBox(L"创建Excel服务失败!");
      

  2.   

    1) 两种方法本质相同,可以理解为,前者是运行期绑定对象,或者是编译期绑定对象。
    2)你的方法就是直接通过COM API访问Excel,另一种是通过类型库生成相关的类和方法声明,
    也就是.H文件,然后再调用。
    3)你的方法可以在API,MFC,WTL等各种方式下使用,另一种方法只能MFC。它是用类型库向导
    生成的MFC类,所以只能用于MFC。
    4)2008不清楚,2010下你可以用向导来加入。步骤: IDE-〉解决方案资源管理器-〉右键
    -〉添加类-〉TypeLib中的MFC类-〉相关的Typelib(可通过文件或者注册表),比如找到Excel的
    类型库(typelib)。
      

  3.   

    你的那种方法我没用过,第二种方法是OLE方式