环境: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. [转] CC 命令

    1.最基本的操作cleartool co -nc xxx.cppcleartool ci -nc xxx.cpp 2.查看自己总共co了多少文件cleartool lscheckout -cview ...

  2. 如何使用Android JetPlayer类

    在Android中,还提供了对Jet播放的支持,Jet是由OHA联盟成员SONiVOX开发的一个交互音乐引擎.其包括两部分:JET播放器和JET引擎.JET常用于控制游戏的声音特效,采用MIDI(Mu ...

  3. Power BI for Office 365(四)Power View第一部分

    Power View是一种可以创建动态的交互式报表的工具,并且支持丰富多样的图表类型,在Power View中创建的报表可以很容易地进行分享,以及供查看报表的用户对Power View报表进行交互.从 ...

  4. ASP.NET MVC与ASP.NET Web Form简单区别与适用场景

    概论: Asp.net  微软 提供web开发框架或者技术.分Web Form和ASP.NET MVC.下面简单说明各自优缺点及使用场景. Web Form 优点: 1.支持丰富的服务器控件.如:Gr ...

  5. 12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例

    EL应用      自定义一个标签,实现两个字符串的相加 1回顾      1.1servlet生命周期           init(ServletConfig)           service ...

  6. javascript将object转string字符串

    var jsonData = {a:1,b:2}; function obj2string(o) { var r = []; if (typeof o == "string") { ...

  7. AMR 转mp3 失败

    private void changeToMp3(String sourcePath) { File source = new File(sourcePath); String mp3TargetPa ...

  8. Windows中使用OpenBLAS加速R语言计算速度

    在使用R的时候会发现R对CPU的利用率并不是很高,反正当我在使用R的时候,无论R做何种运算R的CPU利用率都只有百分子几,这就导致一旦计算量大的时候计算时间非常长,会给人一种错觉(R真的在计算吗?会不 ...

  9. CodeForces 520B Two Buttons(用BFS)

     Two Buttons time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  10. Windows Server 2008 R2 DNS 服务器迁移