1, 通过添加类选择OLE Type Library, 然后选择文件,添加进相应的olb或exe, 例如C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE

2, 添加相应的类,例如:

CApplication
CWorkbook
CWorkbooks
CWorksheet
CRange
CWorksheets
CPicture
CPictures
CBorder
CBorders
CFont0
Cnterior

3, 实现一个简单的应用:

void CGM_ServerDlg::OnBnClickedOk()
{
 // TODO: 在此添加控件通知处理程序代码
 CApplication m_appExcel;       // Excel应用程序
 CWorkbooks m_books;
 CWorkbook m_book;
 CWorksheets sheets;
 CWorksheet sheet;
 CRange range;          //选择范围
 Cnterior interior;
 CFont0 font;               // 字体
 CBorders borders;         // 边框
 CBorder border;
 CRange column;
 CRange row;
 // 初始化Com
 if (::CoInitialize( NULL ) == E_INVALIDARG)
 {
  MessageBox("初始化Com失败!");
 }

// 启动Excel
 if ( !m_appExcel.CreateDispatch(_T("Excel.Application"), NULL))
 {
  MessageBox(_T("创建Excel失败!"));
  ::CoUninitialize();
 }
 COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
 m_appExcel.put_Visible(TRUE);
 m_books.AttachDispatch(m_appExcel.get_Workbooks());
 m_book.AttachDispatch(m_books.Add(covOptional));
 sheets.AttachDispatch(m_book.get_Worksheets()); //得到Worksheets
 sheet.AttachDispatch(sheets.get_Item(_variant_t("sheet1"))); //得到sheet1
 sheet.put_Name("1234"); //sheet1改名

//所有单元格颜色设为白色
 range.AttachDispatch(sheet.get_Cells());
 interior.AttachDispatch(range.get_Interior());
 interior.put_Color(VT(RGB(255, 255, 255)));
 interior.ReleaseDispatch();

range.ClearContents();
 range.ReleaseDispatch();

range.AttachDispatch(sheet.get_Range(VT("A1"), VT("C1001")));
 range.ClearFormats();
 //插入数据
 range.put_Item(VT(1), VT(1), VT("函数"));
 range.put_Item(VT(1), VT(2), VT("大项目"));
 range.put_Item(VT(1), VT(3), VT("小项目"));
 for (int i = 2; i < 1000; i++)
 {
  range.put_Item(VT(i), VT(2), VT(i - 1));
  range.put_Item(VT(i), VT(3), VT("37122368~37097735~"));
 }

// 为四周和内部加上边框
 borders.AttachDispatch(range.get_Borders());
 for (long i = xlEdgeLeft; i <= xlInsideHorizontal; i++)
 {
  border = borders.get_Item(i);
  border.put_LineStyle(VT(xlContinuous));
  border.ReleaseDispatch();
 }
 borders.ReleaseDispatch();

//调整列宽
 column = range.get_EntireColumn();
 column.put_ColumnWidth(VT(18.63));
 column.ReleaseDispatch();
 range.ReleaseDispatch();

range.AttachDispatch(sheet.get_Range(VT("A10"), VT("A20"))); //选中
 range.Merge(VT(0)); //合并单元格
 range.ReleaseDispatch();

range.AttachDispatch(sheet.get_Range(VT("A1"), VT("C1")));
 interior.AttachDispatch(range.get_Interior());
 interior.put_ColorIndex(VT(7));
 interior.put_Pattern(VT(xlPatternSolid));
 interior.ReleaseDispatch();

font.AttachDispatch(range.get_Font());
 font.put_ColorIndex(VT(6));
 font.get_Bold();
 font.ReleaseDispatch();
 range.ReleaseDispatch();

range.AttachDispatch(sheet.get_Range(VT("A2"), VT("C1001")));  //设置range对象的范围
 interior.AttachDispatch(range.get_Interior());  //选择表格内部
 interior.put_ColorIndex(VT(13));   //颜色
 interior.put_Pattern(VT(xlPatternSolid));  //加粗
 interior.ReleaseDispatch();

font.AttachDispatch(range.get_Font());  //选择字
 font.put_ColorIndex(VT(3));  //设置字颜色
 font.ReleaseDispatch();

row.AttachDispatch(range.get_EntireRow()); //选择range里的全部行
 row.put_RowHeight(VT(24));  //行高
 row.ReleaseDispatch();
 range.ReleaseDispatch();

sheet.ReleaseDispatch();
 sheets.ReleaseDispatch();
 m_book.ReleaseDispatch();
 m_books.ReleaseDispatch();
 m_appExcel.ReleaseDispatch();

}

4, 编译. 报了一大堆错.

解决方法: 打开CApplication.h文件

把原先的import路径注解掉. 例如注解掉//#import "C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE" no_namespace

换成:

#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" raw_interfaces_only  rename_namespace("VBE6")
#import "C:\Program Files\Common Files\Microsoft Shared\OFFICE11\MSO.DLL" raw_interfaces_only  rename_namespace("Office")
#import "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" raw_interfaces_only,named_guids rename("RGB","RGBEx"),rename("DialogBox","DialogBoxEx"),rename_namespace("ExcelEx") exclude("IFont","IPicture")
#import "C:\Program Files\Microsoft Office\OFFICE11\MSWORD.OLB" raw_interfaces_only  rename("ExitWindows","ExitWindowsEx"),named_guids,rename_namespace("MSWord")
using namespace VBE6;
using namespace Office;
using namespace ExcelEx;
using namespace MSWord;

5,  再编译, 发现报_IMsoDispObj未定义基类的错.

怀疑可能是执行次序的问题, 修改如下:

// 从类型库向导中用“添加类”创建的计算机生成的 IDispatch 包装类
#pragma once

//#import "C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE" no_namespace
#import "C:\Program Files\Common Files\Microsoft Shared\OFFICE11\MSO.DLL" raw_interfaces_only  rename_namespace("Office")
using namespace Office;

#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" raw_interfaces_only  rename_namespace("VBE6")
using namespace VBE6;

#import "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" raw_interfaces_only,named_guids rename("RGB","RGBEx"),rename("DialogBox","DialogBoxEx"),rename_namespace("ExcelEx") exclude("IFont","IPicture")
using namespace ExcelEx;

#import "C:\Program Files\Microsoft Office\OFFICE11\MSWORD.OLB" raw_interfaces_only  rename("ExitWindows","ExitWindowsEx"),named_guids,rename_namespace("MSWord")
using namespace MSWord;

6, 再编译. 通过

XP下VS2005导入excel类相关推荐

  1. html文件导入excel 出现乱码,win7系统txt导入excel出现中文乱码的解决方法

    很多小伙伴都遇到过win7系统txt导入excel出现中文乱码的困惑吧,一些朋友看过网上零散的win7系统txt导入excel出现中文乱码的处理方法,并没有完完全全明白win7系统txt导入excel ...

  2. IIS下发布关于Excel导入导出时遇到的问题集锦(转)

    问题描述 1.Excel每个工作薄(sheet)生成记录行数 2.asp.net关于导出Excel的一些问题的集锦 3.下载失败,临时文件或其所在磁盘不可写 4.未能加载文件或程序集"Mic ...

  3. java导出excel,导入excel,导出csv工具类整理

    ===============================================================导出excel============================== ...

  4. SAS导入Excel数据集时报错:“ERROR: 连接: 没有注册类”

    ERROR: 连接: 没有注册类 ERROR: LIBNAME 语句出错. 连接失败.详细信息,请参阅日志. 出现原因:SAS和office数据接口引擎位数不统一 SAS软件导入Microsoft O ...

  5. 在VS2005中 GridView导入Excel的两点小技巧-附源码

    VS2005中 GridView导入Excel的导入需要注意的几点 最近带的项目遇到GridView导入Excel问题,总结出几点: 1.如果出现下面的错误提示可用重载VerifyRenderingI ...

  6. 如何在没有导入excel的情况下获取excel中的测试数据

    如何在没有导入excel的情况下获取excel中的测试数据 Set oExcel = CreateObject("excel.application") '创建excel对象 oE ...

  7. 导入 xlsx php,php如何使用phpexcel类导入excel表格数据

    第一步:我们要去官网下载phpexcel类文件. 第二步:我们要先自己模拟一个xlsx格式的文件. 我这里就新建一个123.xlsx文件.注意,文件名最好不要使用中文,如果是中文的话,建议先重命名成英 ...

  8. matlab数组 xp,windowsxp系统将matlab数据导入excel的方法

    matlab是一款非常强大的商业数学软件,不仅能够读取Excel表格中的数据,还支持将matlab中的变量导入到Excel表格中.接下来,系统城小编就为大家分享windowsxp系统将matlab数据 ...

  9. Java导入Excel工具类使用教程

    前言: 本工具类提供了Excel导入功能,通过反射机制将Excel中数据映射到实体类中,从而获取Excel数据,工具类依赖org.apache.poi包.支持RESTful API,支持Spring ...

最新文章

  1. 数组字段查询不包含_不可不知的可变Java长数组
  2. 关于无法显示-隐藏文件、文件夹以及操作系统文件夹
  3. ipvsadm的命令参考
  4. DropDownList中显示无限级树形结构
  5. 类内的函数共享给对象使用
  6. Android 开发知识集合目录
  7. windows下RocketMQ下载、安装、部署、控制台
  8. coroutine资源索引
  9. SAP License:SAP精细化的应收付及要素为根设计思想
  10. .net Core 部署到 Linux
  11. Java常用命令与参数设置
  12. 微信开发工具怎么模拟android环境,uni-app判断客户端环境是 安卓Android、iOS 、微信开发工具...
  13. h标签和p标签和hr标签
  14. Matlab 仿真——直流电机速度控制(5)通过频域分析进行控制器设计
  15. 九、奈氏准则和香农定理
  16. oracle userenv('language'),USERENV()获取Oracle环境信息
  17. c# 傅里叶变换 频域_C# 傅里叶变换 逆变换 调用MathNet包
  18. 数电知识点总结第二章:逻辑代数基础
  19. 安卓音乐播放器app开发(一)---功能分析及启动页的制作
  20. 解决Tomcat启动失败:严重 [main] org.apache.catalina.util.LifecycleBase.handleSubClassException 初始化组件失败

热门文章

  1. dw如何快速注释php代码,dreamweaver cs6如何添加注释
  2. POSTMAN实战使用教程
  3. 2020年全球及中国新药市场现状及发展趋势分析,国内市场国际化预期加快「图」
  4. Codeforces Round #716 (Div. 2) D. Cut and Stick
  5. 共享单车第八年:谁狂飙,谁躺平?
  6. 应届毕业生的第一份程序员工作
  7. muse计算机术语,MUSE 文件扩展名: 它是什么以及如何打开它?
  8. Acrel-EIoT能源物联网平台助力电网基础设施智能化改造和智能微电网建设-Susie 周
  9. 敏捷测试过程的问题汇总
  10. 使用 honeycam 在电脑上截取GIF动图