博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC -- Excel操作简介(基于VS2010)
阅读量:6376 次
发布时间:2019-06-23

本文共 6272 字,大约阅读时间需要 20 分钟。

 一、添加与 Excel 操作相关的头文件

  项目 -> 类向导,在右上方有一个下拉栏,选择其中的 类型库中的MFC类(T),即可看到下图所示界面,选择“文件”选项,然后在下方的位置选项中添加本地文件,本人电脑中的EXCEL是安装在 C 盘的,故文件目录为:C:\Program Files\Microsoft Office\Office14\EXCEL.EXE。

  添加了 EXCEL.EXE 后,可以看到一系列接口,选择其中的: _Application、_Workbook、_Worksheet、Workbooks、Worksheets、Font、Range 并添加,然后在主程序中添加其头文件:

#include "CApplication.h"#include "CWorkbook.h"#include "CWorkbooks.h"#include "CWorksheet.h"#include "CWorksheets.h"#include "CRange.h"#include "CFont0.h"

   逐次打开上述头文件,并将其中的 “ #import "C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE" no_namespace ” 这句话给屏蔽掉,不然会报错,无法编译成功。这样之后,编译还是不能通过,会出现以下报错:

  点击 warning 来到报错处,在 DialogBox() 前面加上下划线 "_",即 "_DialogBox()" 即可。

 

二、创建并保存一个 Excel

  直接上代码先:

void CExcel_ExampleDlg::SaveDataToExcel(){    CString cellNum;    CApplication m_ExcelApp;            // Excel 应用程序接口    CWorkbook m_ExcelBook;             // 工作簿    CWorkbooks m_ExcelBooks;           // 工作簿集合    CWorksheet m_ExcelSheet;            // 工作表    CWorksheets m_ExcelSheets;         // 工作表集合    CRange m_ExcelRange;                // 用于对单元格进行操作    CRange m_ExcelCols;    CFont0 m_ExcelFont;                    // 用于字体操作    // 获取系统时间并保存为 CString 类型    CString timeStr;                       // 获取系统时间    SYSTEMTIME sysTime;    GetLocalTime(&sysTime);    CString m_saveFilePath;                // 保存路径    timeStr.Format(L"_%4d.%2d.%2d_%2d.%2d",sysTime.wYear , sysTime.wMonth , sysTime.wDay , sysTime.wHour , sysTime.wMinute);    m_saveFilePath =  _T("E:\\Workplace\\ExcelExample") + timeStr + _T(".xlsx");       CString str;    for(int i = 0;i <20;i++)    {        str.Format(L"%d",i);        ValueArray1.Add(str);        str.Format(L"%d",2 * i);        ValueArray2.Add(str);        str.Format(L"%d",3 * i);        SumArray.Add(str);    }    COleVariant covTrue((short)TRUE);    COleVariant covFalse((short)FALSE);    COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);    if(!m_ExcelApp.CreateDispatch(_T("Excel.Application")))    {        AfxMessageBox(_T("创建Excel失败"),MB_OK | MB_ICONWARNING);        return;    }    m_ExcelBooks = m_ExcelApp.get_Workbooks();        // 获取一个工作簿集合    m_ExcelBook = m_ExcelBooks.Add(covOptional);        // 添加一个工作簿    m_ExcelSheets = m_ExcelBook.get_Sheets();            // 获取一个工作表集合    m_ExcelSheet = m_ExcelSheets.get_Item(COleVariant((short)1));   // 获取一个工作表    // 向 Excel 中添加数据    // 选择工作表中 A1-A1 单元格区域    m_ExcelRange = m_ExcelSheet.get_Range(COleVariant( _T("A1")), COleVariant(_T("A1")));            m_ExcelRange.put_Value2(COleVariant( _T("变量名1")));              // 设置 A1 内容    m_ExcelCols = m_ExcelRange.get_EntireColumn();                    // 选择整列    m_ExcelCols.put_HorizontalAlignment(COleVariant((long)-4108));    // 设置居中对齐    // 选择工作表中 B1-B1 单元格区域    m_ExcelRange = m_ExcelSheet.get_Range(COleVariant( _T("B1")), COleVariant(_T("B1")));                m_ExcelRange.put_Value2(COleVariant( _T("值")));                  // 设置 B1 内容    m_ExcelCols = m_ExcelRange.get_EntireColumn();                    // 选择整列    m_ExcelCols.put_HorizontalAlignment(COleVariant((long)-4108));    // 设置居中对齐    // 选择工作表中 C1-C1 单元格区域    m_ExcelRange = m_ExcelSheet.get_Range(COleVariant( _T("C1")), COleVariant(_T("C1")));                m_ExcelRange.put_Value2(COleVariant( _T("变量名2")));              // 设置 C1 内容    m_ExcelCols = m_ExcelRange.get_EntireColumn();                    // 选择整列    m_ExcelCols.put_HorizontalAlignment(COleVariant((long)-4108));    // 设置居中对齐         // 选择工作表中 D1-D1 单元格区域       m_ExcelRange = m_ExcelSheet.get_Range(COleVariant( _T("D1")), COleVariant(_T("D1")));            m_ExcelRange.put_Value2(COleVariant( _T("值")));                  // 设置 D1 内容    m_ExcelCols = m_ExcelRange.get_EntireColumn();                   // 选择整列    m_ExcelCols.put_HorizontalAlignment(COleVariant((long)-4108));   // 设置居中对齐    // 选择工作表中 E1-E1 单元格区域    m_ExcelRange = m_ExcelSheet.get_Range(COleVariant( _T("E1")), COleVariant(_T("E1")));                m_ExcelRange.put_Value2(COleVariant( _T("和")));                 // 设置 E1 内容    m_ExcelCols = m_ExcelRange.get_EntireColumn();                   // 选择整列    m_ExcelCols.put_HorizontalAlignment(COleVariant((long)-4108));   // 设置居中对齐    for(int i = 0;i < 20;i++)    {            cellNum.Format(L"%d",i+2);        cellNum = _T("A") + cellNum;        // 依次选择工作表中 A 列 的单元格        m_ExcelRange = m_ExcelSheet.get_Range(COleVariant(cellNum), COleVariant(cellNum));                m_ExcelRange.put_Value2(COleVariant(_T("a")));          // 设置 A 列内容        cellNum.Format(L"%d",i+2);        cellNum = _T("B") + cellNum;        // 依次选择工作表中 B 列 的单元格        m_ExcelRange = m_ExcelSheet.get_Range(COleVariant(cellNum), COleVariant(cellNum));                m_ExcelRange.put_Value2(COleVariant(ValueArray1[i]));   // 设置 B 列内容        cellNum.Format(L"%d",i+2);        cellNum = _T("C") + cellNum;        // 依次选择工作表中 C 列 的单元格        m_ExcelRange = m_ExcelSheet.get_Range(COleVariant(cellNum), COleVariant(cellNum));                m_ExcelRange.put_Value2(COleVariant(_T("b")));          // 设置 C 列内容        cellNum.Format(L"%d",i+2);        cellNum = _T("D") + cellNum;        // 依次选择工作表中 D 列 的单元格        m_ExcelRange = m_ExcelSheet.get_Range(COleVariant(cellNum), COleVariant(cellNum));                m_ExcelRange.put_Value2(COleVariant(ValueArray2[i]));  // 设置 D 列内容        cellNum.Format(L"%d",i+2);        cellNum = _T("E") + cellNum;        // 依次选择工作表中 E 列 的单元格        m_ExcelRange = m_ExcelSheet.get_Range(COleVariant(cellNum), COleVariant(cellNum));                m_ExcelRange.put_Value2(COleVariant(SumArray[i]));    // 设置 E 列内容    }    m_ExcelApp.put_Visible(FALSE);                        // 不显示 Excel 表格    m_ExcelApp.put_UserControl(FALSE);                    // 设置表格状态为用户不可控制    m_ExcelBook.SaveCopyAs(COleVariant(m_saveFilePath));  // 保存Excel表格    m_ExcelBook.put_Saved(TRUE);    // 释放对象    m_ExcelBooks.ReleaseDispatch();    m_ExcelBook.ReleaseDispatch();    m_ExcelSheets.ReleaseDispatch();    m_ExcelSheet.ReleaseDispatch();    m_ExcelRange.ReleaseDispatch();    m_ExcelApp.Quit();          // 退出 Excel 程序,注意这里要先退出,后释放    m_ExcelApp.ReleaseDispatch();}

  这段代码创建了一个 Excel ,然后向 Excel 中添加了 5 列 21 行的数据并保存到本地,最终所得到的 Excel 如下:

  整个代码不复杂,设置好一切后向 Excel 中添加数据即可,添加完数据后,记得保存表格,并释放相应的资源,否则程序结束后会有一个 Excel 进程驻留在内存中,这样重复运行程序时会出错。

转载于:https://www.cnblogs.com/tongye/p/10212901.html

你可能感兴趣的文章
iOS App无需跳转系统设置自动连接Wi-Fi
查看>>
一道柯里化面试题
查看>>
本科studying abroad 无法毕业申请硕士转学转校处理一切studying abroad 问题
查看>>
RxJava(RxAndroid)的简单学习
查看>>
Java8 函数式编程之函数接口(下)
查看>>
【本人秃顶程序员】MySQL 全表 COUNT(*) 简述
查看>>
centos7中使用febootstrap自制一个基础的centos 7.2的docker镜像
查看>>
系统优化和克隆过程
查看>>
C#开发Unity游戏教程之判断语句
查看>>
Windows自带Android模拟器启动失败
查看>>
安装 SharePoint Server 2007
查看>>
springmvc mybatis 调用sql , 转成json
查看>>
linux centos 7 网卡突然不能上网异常解决
查看>>
shell+Python实现简单的链路监控
查看>>
授之以渔-运维平台发布模块一(Jenkins篇)
查看>>
DedeCMS操作基础(一)
查看>>
FreeBSD部署dns缓存服务器
查看>>
实现MySQL允许远程连接
查看>>
Java Outputstream to String
查看>>
RS232C串口通信接线方法(三线制)
查看>>