环境:VS2013+office2007

头文件:

 #pragma once
#ifndef __MYEXCEL_H_
#define __MYEXCEL_H_
#include "CApplication.h"
#include "CFont0.h"
#include "CRange.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h" class CMyExcel
{
public:
CMyExcel();
~CMyExcel(); CApplication app;
CWorkbook book;
CWorkbooks books;
CWorksheet sheet;
CWorksheets sheets;
CRange range;
CFont0 font;
CRange cols;
LPDISPATCH lpDisp; void test();
void create_new_excel(CString filename);
CString change_name_to_current_path(CString filename);
void open_excel(CString filename);
void close_excel();
void save_excel();
void set_value(char* pos, char* val);
CString get_value(char* pos);
}; #endif

源文件:

#include "stdafx.h"
#include "MyExcel.h"
#include <shlwapi.h>
#pragma comment(lib,"Shlwapi.lib") //如果没有这行,会出现link错误 CMyExcel::CMyExcel()
{ } CMyExcel::~CMyExcel()
{ } void CMyExcel::test()
{
} //新建excel,通过save as
void CMyExcel::create_new_excel(CString path)
{
//导出
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if (!app.CreateDispatch(_T("Excel.Application")))
{
AfxMessageBox(_T("无法创建Excel应用!"));
return;
}
books = app.get_Workbooks();
//打开Excel,其中pathname为Excel表的路径名 book = books.Add(covOptional);
//CString path = change_name_to_path(filename);
if (!PathFileExists(path))
{
book.SaveAs(COleVariant(path), covOptional,
covOptional, covOptional,
covOptional, covOptional, (long), covOptional, covOptional, covOptional,
covOptional, covOptional);
} //释放对象(相当重要!)
book.ReleaseDispatch();
books.ReleaseDispatch();
//退出程序
app.Quit();
//m_ExlApp一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错
app.ReleaseDispatch();
} //将文件名转化为当前目录下文件的绝对路径
CString CMyExcel::change_name_to_current_path(CString filename)
{
CString theAppPath, theAppName;
char Path[MAX_PATH]; GetModuleFileName(NULL, Path, MAX_PATH);//得到应用程序的全路径
theAppPath = (CString)Path; theAppName = AfxGetApp()->m_pszAppName;
theAppName += ".exe"; //把最后的文件名去掉
int length1, length2; length1 = theAppPath.GetLength();
length2 = theAppName.GetLength(); theAppPath.Delete(length1 - length2, length2); CString TempPath = ""; return(theAppPath + filename);//EXCEL模板的路径
} //
void CMyExcel::open_excel(CString path)
{
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if (!app.CreateDispatch(_T("Excel.Application")))
{
AfxMessageBox("无法创建Excel应用!");
return;
}
//CString path = change_name_to_path(filename);
books = app.get_Workbooks();
lpDisp = books.Open(path, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional);
book.AttachDispatch(lpDisp);
} void CMyExcel::save_excel()
{
book.Save();
} //设置值,pos:指定位置 val:指定值
void CMyExcel::set_value(char* pos, char* val)
{
sheets = book.get_Worksheets();
sheet = sheets.get_Item(COleVariant((short)));
//sheet.put_Name("test");
range = sheet.get_Range(COleVariant(_T(pos)), COleVariant(_T(pos))); //获得坐标为(A,1)单元格
range.put_Value2(COleVariant(_T(val))); //设置单元格类容为Hello Exce
cols = range.get_EntireColumn();//选择整列,并设置宽度为自适应
cols.AutoFit();
//设置字体为粗体
font = range.get_Font();
font.put_Bold(COleVariant((short)TRUE));
//选择整列,并设置宽度为自适应
cols = range.get_EntireColumn();
cols.AutoFit();
//显示Excel表
//app.put_Visible(TRUE);
//app.put_UserControl(TRUE);
} CString CMyExcel::get_value(char* pos)
{
range = sheet.get_Range(COleVariant(_T(pos)), COleVariant(_T(pos)));
//获得单元格的内容
COleVariant rValue;
rValue = COleVariant(range.get_Value2());
//转换成宽字符
rValue.ChangeType(VT_BSTR);
//转换格式,并输出
AfxMessageBox(CString(rValue.bstrVal));
return CString(rValue.bstrVal);
} void CMyExcel::close_excel()
{
//释放对象(相当重要!)
range.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
//退出程序
app.Quit();
//m_ExlApp一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错
app.ReleaseDispatch();
}

使用:

CMyExcel t;
//t.test();
CString path = t.change_name_to_current_path("3.xlsx"); t.create_new_excel(path); t.open_excel(path);
t.set_value("A3","hello hello");
t.set_value("A8", "hello 123");
t.get_value("A8");
t.save_excel();
t.close_excel();

MFC操作excel的更多相关文章

  1. 【VC++学习笔记一】MFC操作Excel

    最近在做一个读取Excel的功能,之前也做过相关的,但总是零零闪闪的,趁着正在劲头上,归纳一下: 利用Automation添加相关的类,在Excel2010中可以在安装文件夹下直接点击Excel.ex ...

  2. C++之操作Excel(抄录https://www.cnblogs.com/For-her/p/3499782.html)

    MFC操作Excel 下面的操作基于Excel2003 一.初始化操作 1.导入类库 点击查看->建立类向导-> Add Class...\From a type Library...-& ...

  3. MFC 与Excel文件的交互操作

    假日快要结束了.带着沉重的心情写下之前关于MFC与Excel文件交互的总结. 因为VS的版本号不同可能在操作上有些差异.所以在此指明下本篇文章的project环境为VS2013,也建议大家用最新的. ...

  4. VS2010 C++ 操作Excel表格的编程实现

    转载请注明原文网址: http://www.cnblogs.com/xianyunhe/archive/2011/09/25/2190485.html 通过VC实现对Excel表格的操作的方法有多种, ...

  5. OLE操作Excel编译错误处理

      Excel在公司用的很多,而这个东西我用的不是很好,就想用程序来处理,遇到很多错误.这几天研究了下OLE操作Excel.环境:VS2008 SP1+Excel 2007 加入OLE Type Li ...

  6. VC操作excel

    http://www.cnblogs.com/witxjp/archive/2010/06/05/1752181.html   最近在做个数据库程序,因为有些数据用户要求导出到Excel文件显示(需要 ...

  7. VC操作Excel之基本操作(颜色等)【转载】

    文章出处https://blog.csdn.net/form88/article/details/78566390 EXCEL里如何知道某种颜色的ColorIndex的值 ===fag::====== ...

  8. 免费高效实用的.NET操作Excel组件NPOI(.NET组件介绍之六)

    很多的软件项目几乎都包含着对文档的操作,前面已经介绍过两款操作文档的组件,现在介绍一款文档操作的组件NPOI. NPOI可以生成没有安装在您的服务器上的Microsoft Office套件的Excel ...

  9. C#通过NPOI操作Excel

    参考页面: http://www.yuanjiaocheng.net/webapi/create-crud-api-1-post.html http://www.yuanjiaocheng.net/w ...

随机推荐

  1. java获取汉字拼音首字母 --转载

    在项目中要更能根据某些查询条件(比如姓名)的首字母作为条件进行查询,比如查一个叫"李晓明"的人,可以输入'lxm'.写了一个工具类如下: import java.io.Unsupp ...

  2. 【转】B-树和B+树的应用:数据搜索和数据库索引

    B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树: ⑵若根结点不是叶子 ...

  3. 使用poi读取xlsx中的数据

    excel中的内容见下图: 详细代码: package dataprovider; import java.io.FileInputStream; import java.io.InputStream ...

  4. 再谈通过http访问SSAS

    问题: 在有些场景下,数据中心会分为不同的服务器场:数据库场和应用程序场.服务器场间有严格的防火墙控制,其中数据库场只能建立从应用程序场的防火墙穿越,也就是说不允许任何客户端直接连接到防火墙. 这种策 ...

  5. 不会全排列算法(Javascript实现),我教你呀!

    今天我很郁闷,在实验室凑合睡了一晚,准备白天大干一场,结果一整天就只做出了一道算法题.看来还是经验不足呀,同志仍需努力呀. 算法题目要求是这样的: Return the number of total ...

  6. 整理UWP中网络和设备信息获取的帮助类,需要的拿走。

    网络(运营商信息,网络类型) public static class NetworkInfo { /// <summary> /// 网络是否可用 /// </summary> ...

  7. Linux第01天

    Linux第01天 1.虚拟机安装linux(centos 32bit) 1.1 虚拟机安装前置工作的准备,如内存.硬盘.CPU分配.镜像下载等 1.2 安装方式(图形界面或者命令行 推荐图形界面即直 ...

  8. 注解@RequestMapping 的使用

    1首先@RequestMapping 中的值,我们说请求方法l路径,请求url我们都知道怎么请求了,在第一节helloworld中, 我们先说我们先建一个类,RequestMappingTest 方法 ...

  9. Linux Kernel Oops异常分析

    1.PowerPC小系统内核异常分析 1.1  异常打印 Unable to handle kernel paging request for data at address 0x36fef31eFa ...

  10. JDBC、JTA、Spring的事务管理

    Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务. 事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么 ...