环境: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. js通过location.search来获取页面传来的参数

    这篇文章主要介绍了通过window.location.search来获取页面传来的参数,经测试是OK的 ? 1 2 3 4 5 function GetQueryString(name) { var ...

  2. winform TreeView的一些用法以及异步加载

    今天,主要弄了一下对于树型控件的一些方法,以及异步加载.参考: http://www.cnblogs.com/greatverve/archive/2012/03/23/winform-treevie ...

  3. Linux安装搜狗拼音输入法

    环境:Ubuntu1604 英文版 1.下载搜狗安装包 2.双击deb文件进行安装 3.在终端执行如下命令 im-config 弹出对话框,点击OK,然后又弹出一个对话框,点击YES.如果弹出的对话框 ...

  4. Nginx负载均衡

    负载均衡(做分发服器)1.基于浏览器的分发基于浏览器的分发,按照在不同平台的浏览器请求进行分发,比如手机浏览器讲究资源小速度快节省流量,所以将自手机浏览器的请求分发到专供处理移动平台的web服务器上, ...

  5. CSS3混合模式mix-blend-mode/background-blend-mode简介 ,PS中叠加效果

    一.CSS3 mix-blend-mode 首先,要知道”blend-mode”就是混合模式的意思.那mix, 恩,我也不知道为什么命名为mix, 可能是该属性不仅可以作用于HTML,还可以作用于SV ...

  6. supervisor拉起daemon进程(falcon-agent)测试

    falcon-agent started..., pid= falcon-agent now is running already, pid= falcon-agent now is running ...

  7. Alpha 测试

    活动助手Alpha--测试篇 测试分工 人员 分工 测试 牛姐 Android开发/ui设计 功能测试 橙汁 Android开发 功能测试 洪 数据库开发 数据库结构测试 佳凯 数据库设计与开发 接口 ...

  8. iOS 多快好省的宏定义

    http://my.oschina.net/yongbin45/blog/150149 // 字符串:#ifndef nilToEmpty#define nilToEmpty(object) (obj ...

  9. XIV Open Cup named after E.V. Pankratiev. GP of SPb

    A. Bracket Expression 直接按题意模拟即可. 时间复杂度$O(n)$. #include<stdio.h> #include<algorithm> #inc ...

  10. CentOS利用inotify+rsync实现文件同步

    1.环境部署 inotify-master 10.10.6.208 inotify-slave 10.10.6.149 2.两台服务器都安装rsync yum install -y rsync 3.i ...