想要用MFC操作excel文件,有些问题向大侠们请教!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了想要用MFC操作excel文件,有些问题向大侠们请教!相关的知识,希望对你有一定的参考价值。
有一个已经存在的excel文件,里面只有一个sheet1,现在想对其操作,生成一个sheet2,并将sheet2改名为“测试结果”,看了很多例子,其中涉及到类、变量、路径、模板等问题,自己没有做过这方面的,有点理不清思路。请高手指点一下,要读写excel应该先干啥,再干啥,就是指点一下步骤,谢谢!
m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks());m_ExlBook.AttachDispatch(m_ExlBooks.Add(_variant_t(TempPath)));
//TempPath 获取文件路径
m_ExlSheets.AttachDispatch(m_ExlBook.GetWorksheets(),TRUE);
m_ExlSheets.Add(vtMissing,vtMissing,_variant_t((long)2),vtMissing);
m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)2)),TRUE);
m_ExlSheet.SetName("测试结果");追问
谢谢你的帮助。
我要实现的功能是要先把一些数据填写到sheet1中,然后生成sheet2,改名为“测试结果”,再把另外一些数据填写到sheet2中,数据填写我已经知道该怎么做。
以上的实现程序我是像都写在一个button里面,点击button实现。你给我的这些程序我看到过有些例子上类似的,但是我不太清楚其中一些变量的定义和声明,是直接写在button函数里就可以吗,还是要先给出一些声明,比如Workbooks workbooks这样的,这是关键!
Workbooks workbooks 这些要声明的,
_Application m_ExlApp;
Range m_ExlRge;
_Worksheet m_ExlSheet;
Worksheets m_ExlSheets;
_Workbook m_ExlBook;
Workbooks m_ExlBooks;
Font ft;
Shapes shapes;
Shape shape;
Characters characters;
TextFrame textFrame;
LineFormat lineformat;
ColorFormat colorformat;
最好是放在.h,具体要看你需要什么再添加类, 注意的是引用excel 如果在其他地方也用到,(不是一个DIALOG)就要
#ifndef EMP_H_H
#define EMP_H_H
#include "excel.h"
#endif
实现你前面一个功能只要加一个循环
while()
再设一个变量 i=1;
循环一次i++,添加一次数据,怎么循环,退出,你琢磨下。
m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)i)),TRUE);
if(i==1)
if(i==2)
m_ExlSheet.SetName("测试结果");//你想要的名字
m_ExlSheets.AttachDispatch(m_ExlBook.GetWorksheets(),TRUE);
您好,请问这句是什么意思呢?
m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)2)),TRUE);
m_ExlSheet.SetName("测试结果");
第一句:这个是不是说,要想操作某一个sheet,先用GetItem选定,然后对其操作呢?long1代表
sheet1?long2代表sheet2?
现在基本弄明白了要怎么做了,想再确定一下具体内容,谢谢!
m_ExlBook 前面是获取工作簿/模板
m_ExlSheets.AttachDispatch(m_ExlBook.GetWorksheets(),TRUE);
加载sheet页面
后面数字就代表第几个sheet
你说的“加载sheet页面”就是选定这个sheet,然后后面的操作(比如写入数据)就是写入到这个选定的sheet对吧?
另外:
(1)已经存在的文件为abc.xls,如何选定这个文件呢?语句是m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks());是这句吗?怎样将abc.xls加上呢?
(2)m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)3),_variant_t("课程名")); 这句意思是向第2行第3列单元格写入数据 “课程名” 吗?
1、差不多-
2、m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks());纯粹加载sheet
不是这句,这句在于获取一个前面的
m_ExlBook.AttachDispatch(m_ExlBooks.Add(_variant_t(TempPath)));这个的sheet //这个就是模板路径
这句。TempPath:文件的路径名(..debug\\abc.xls),你要去获取的,怎么读取文件你去看看怎么弄-有很多现成的代码,你可以设置断点debug下具体看看怎么获得文件的路径,可能跟你想的不一样-
3、是的-这些你去试下就知道--
就这样吧!
请问 “模板” 具体是什么啊,是microsoft office里的excel文件?还是指我要进行操作的文件?
CString theAppPath,theAppName;
char Path[MAX_PATH];
GetModuleFileName(NULL,Path,MAX_PATH);
theAppPath=(CString)Path;
theAppName=AfxGetApp()->m_pszAppName;
theAppName+=".exe";
CString TempPath="";
TempPath=theAppPath+"Template.xls";
可以针对我的问题解释一下有关路径和模板的问题吗,就差这一点了
模板可能是空的excel 也可以是你建立好的excel 。就是你要操作的excel。
GetModuleFileName(NULL,Path,MAX_PATH);//获取程序运行路径(包括程序文件名字),一般在DEBUG下面。
theAppName=AfxGetApp()->m_pszAppName;// theAppName获取程序文件名字,不带后缀格式。
theAppName+=".exe"; //程序文件名
中间一段就是程序运行路径-程序文件名=文件需要的前一个目录(路径);..\debug
CString TempPath="";
TempPath=theAppPath+"Template.xls";//你操作的文件名完整路径 Template.xls:你的文件名
写了这么多,你应该懂了!就这样 了---
难道还不满意..
啥意思啊,你这太专业了,看不懂!
MFC怎么读写EXCEL文件
可以用多种方法,比如说用ODBC对excel数据库进行操作,或者说用excel 的COM接口进行编程。我找到一个例子关键代码如下://创建并写入Excel文件
void CRWExcel::WriteToExcel()
CDatabase database;
CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动
CString sExcelFile = "c:\\\\demo.xls"; // 要建立的Excel文件
CString sSql;
TRY
// 创建进行存取的字符串
sSql.Format("DRIVER=%s;DSN=\'\'\'\';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\\"%s\\";DBQ=%s",
sDriver, sExcelFile, sExcelFile);
// 创建数据库 (既Excel表格文件)
if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
// 创建表结构(姓名、年龄)
sSql = "CREATE TABLE demo (Name TEXT,Age NUMBER)";
database.ExecuteSQL(sSql);
// 插入数值
sSql = "INSERT INTO demo (Name,Age) VALUES (\'\'徐景周\'\',26)";
database.ExecuteSQL(sSql);
sSql = "INSERT INTO demo (Name,Age) VALUES (\'\'徐志慧\'\',22)";
database.ExecuteSQL(sSql);
sSql = "INSERT INTO demo (Name,Age) VALUES (\'\'郭徽\'\',27)";
database.ExecuteSQL(sSql);
// 关闭数据库
database.Close();
CATCH_ALL(e)
TRACE1("Excel驱动没有安装: %s",sDriver);
END_CATCH_ALL;
// 读取Excel文件
void CRWExcel::ReadFromExcel()
CDatabase database;
CString sSql;
CString sItem1, sItem2;
CString sDriver;
CString sDsn;
CString sFile = "Demo.xls"; // 将被读取的Excel文件名
// 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"
sDriver = GetExcelDriver();
if (sDriver.IsEmpty())
// 没有发现Excel驱动
AfxMessageBox("没有安装Excel驱动!");
return;
// 创建进行存取的字符串
sDsn.Format("ODBC;DRIVER=%s;DSN=\'\'\'\';DBQ=%s", sDriver, sFile);
TRY
// 打开数据库(既Excel文件)
database.Open(NULL, false, false, sDsn);
CRecordset recset(&database);
// 设置读取的查询语句.
sSql = "SELECT Name, Age "
"FROM demo "
"ORDER BY Name ";
// 执行查询语句
recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
// 获取查询结果
while (!recset.IsEOF())
//读取Excel内部数值
recset.GetFieldValue("Name ", sItem1);
recset.GetFieldValue("Age", sItem2);
// 移到下一行
recset.MoveNext();
// 关闭数据库
database.Close();
CATCH(CDBException, e)
// 数据库操作产生异常时...
AfxMessageBox("数据库错误: " + e->m_strError);
END_CATCH; 参考技术A
以上是关于想要用MFC操作excel文件,有些问题向大侠们请教!的主要内容,如果未能解决你的问题,请参考以下文章
最近使用EPPlus 3.1.3操作EXCEL文件的时提示Error saving file E:\\*** ;请哪位大侠帮忙指点下,谢谢!