MFC操作excel

VS2017 MFC操作Excel 1.首先安装OFFICE软件[Office 2021 ProPlus],此版本为OFFICE16 2.进入VS开发环境,使用快捷键调出CTRL+SHIFT+A调出【添加类】 选中Visual C++=》MFC=》Typelib中的MFC类 OFFICE的Excel地址为:C:\Program Files\Microsoft Office\root\Office16,其他OFFICE版本大同小异 3.设置 ... 阅读详情
CString GetExcelDriver()
{
    char szBuf[2001];
    WORD cbBufMax = 2000;
    WORD cbBufOut;
    char *pszBuf = szBuf;
    CString sDriver;
	
    // 获取已安装驱动的名称(涵数在odbcinst.h里)
    if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))
        return "";
    
    // 检索已安装的驱动是否有Excel...
    do
    {
        if (strstr(pszBuf, "Excel") != 0)
        {
            //发现 !
            sDriver = CString(pszBuf);
            break;
        }
        pszBuf = strchr(pszBuf, '\0') + 1;
    }
    while (pszBuf[1] != '\0');
	
    return sDriver;
}

BOOL MakeSurePathExists( CString &Path,
						bool FilenameIncluded)
{
	int Pos=0;
	while((Pos=Path.Find('\\',Pos+1))!=-1)
		CreateDirectory(Path.Left(Pos),NULL);
	if(!FilenameIncluded)
		CreateDirectory(Path,NULL);
	//	return ((!FilenameIncluded)?!_access(Path,0):
	//	!_access(Path.Left(Path.ReverseFind('\\')),0));
	
	return !_access(Path,0);
}

BOOL GetDefaultXlsFileName(CString& sExcelFile)
{
	///默认文件名:yyyymmddhhmmss.xls
	CString timeStr;
	CTime day;
	day=CTime::GetCurrentTime();
	int filenameday,filenamemonth,filenameyear,filehour,filemin,filesec;
	filenameday=day.GetDay();//dd
	filenamemonth=day.GetMonth();//mm月份
	filenameyear=day.GetYear();//yyyy
	filehour=day.GetHour();//hh
	filemin=day.GetMinute();//mm分钟
	filesec=day.GetSecond();//ss
	timeStr.Format("%04d%02d%02d%02d%02d%02d",filenameyear,filenamemonth,filenameday,filehour,filemin,filesec);
	
	sExcelFile =  timeStr + ".xls";
	// prompt the user (with all document templates)
	CFileDialog dlgFile(FALSE,".xls",sExcelFile);
	CString title;
	CString strFilter;
	
	title = "导出";
	strFilter = "Excel文件(*.xls)";
	strFilter += (TCHAR)'\0';   // next string please
	strFilter += _T("*.xls");
	strFilter += (TCHAR)'\0';   // last string
	dlgFile.m_ofn.nMaxCustFilter++;
	dlgFile.m_ofn.nFilterIndex = 1;
	// append the "*.*" all files filter
	CString allFilter;
	VERIFY(allFilter.LoadString(AFX_IDS_ALLFILTER));
	strFilter += allFilter;
	strFilter += (TCHAR)'\0';   // next string please
	strFilter += _T("*.*");
	strFilter += (TCHAR)'\0';   // last string
	dlgFile.m_ofn.nMaxCustFilter++;
	
	dlgFile.m_ofn.lpstrFilter = strFilter;
	dlgFile.m_ofn.lpstrTitle = title;
	
	if (dlgFile.DoModal()==IDCANCEL)
		return FALSE; // open cancelled
	sExcelFile.ReleaseBuffer();
	if (MakeSurePathExists(sExcelFile,true)) {
		if(!DeleteFile(sExcelFile)) {    // delete the file
			AfxMessageBox("覆盖文件时出错!");
			return FALSE;
		}
	}
	return TRUE;
}

void ExportListToExcel(CListCtrl* pList, CString strTitle)
{
	CString warningStr;
	if (pList->GetItemCount ()>0) {	
		CDatabase database;
		CString sDriver;
		CString sExcelFile; 
		CString sSql;
		CString tableName = strTitle;
		
		// 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)" 
		sDriver = GetExcelDriver();
		if (sDriver.IsEmpty())
		{
			// 没有发现Excel驱动
			AfxMessageBox("没有安装Excel!\n请先安装Excel软件才能使用导出功能!");
			return;
		}
		
		///默认文件名
		if (!GetDefaultXlsFileName(sExcelFile))
			return;
		
		// 创建进行存取的字符串
		sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile);
		
		// 创建数据库 (既Excel表格文件)
		if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
		{
			// 创建表结构
			int i;
			LVCOLUMN columnData;
			CString columnName;
			int columnNum = 0;
			CString strH;
			CString strV;

			sSql = "";
			strH = "";
			columnData.mask = LVCF_TEXT;
			columnData.cchTextMax =100;
			columnData.pszText = columnName.GetBuffer (100);
			for(i=0;pList->GetColumn(i,&columnData);i++)
			{
				if (i!=0)
				{
					sSql = sSql + ", " ;
					strH = strH + ", " ;
				}
				sSql = sSql + " " + columnData.pszText +" TEXT";
				strH = strH + " " + columnData.pszText +" ";
			}
			columnName.ReleaseBuffer ();
			columnNum = i;

			sSql = "CREATE TABLE " + tableName + " ( " + sSql +  " ) ";
			database.ExecuteSQL(sSql);
			
			// 插入数据项
			int nItemIndex;
			for (nItemIndex=0;nItemIndex<pList->GetItemCount ();nItemIndex++){
				strV = "";
				for(i=0;i<columnNum;i++)
				{
					if (i!=0)
					{
						strV = strV + ", " ;
					}
					/*else 
					{
						strV = strV + " '" + itemType[nItemIndex] +"' ";
						continue;
					}*/
					strV = strV + " '" + pList->GetItemText(nItemIndex,i) +"' ";
				}
				
				sSql = "INSERT INTO "+ tableName 
					+" ("+ strH + ")"
					+" VALUES("+ strV + ")";
				//AfxMessageBox(sSql);
				database.ExecuteSQL(sSql);
			}
			
		}      
		
		// 关闭数据库
		database.Close();
			
		warningStr.Format("导出文件保存于%s!",sExcelFile);
		AfxMessageBox(warningStr);
	}
}


void OnButtonExport() 
{
	// TODO: Add your control notification handler code here
	ExportListToExcel(&m_cList, "adfsaf");
}

MFC操作EXCEL的方法 <br />VC操作Excel <br />1、Excel的层次结构: <br />Application <br />Workbooks <br />Workbook <br />...... <br />Worksheets <br />Worksheet <br />...... <br />Range <br />Font <br />Borders <br />...... <br />....... <br />2、插入类型库 <br />(1)、在一个已有的MFC工程按Ctrl + W 弹出C 阅读详情

相关推荐

VS2008环境使用MFC操作读取excel文件

VS 2008 MFC EXCEL

icyfox_bupt的专栏 2万+

GetExcelDriver()获取到Excel驱动

在用MFC读写Excel的时候,需要用到ODBC的方式。这个时候,如果不想手动输入Excel的驱动名称,就需要自动获取。 下面是两种情况的下的获取方式。 方式一:多字符集 CString MyDlg::GetExcelDriver() { char szBuf[2001]; WORD cbBufMax = 2000; WORD cbBufOut; char *pszBuf = szBuf; CString sDriver; // 获取已安装驱动的名称(

优快云的博客 1221

MFC与Excel的交互操作实现

在当今信息技术日新月异的背景下,自动化办公的需求愈显突出,而Microsoft Excel作为办公自动化中不可或缺的工具之一,其与其他应用软件的交互显得尤为重要。本章将介绍MFC(Microsoft Foundation Classes)与Excel交互的基础概念,为理解后续章节内容打下坚实的基础。

weixin_35094083的博客 982

java excel odbc_ODBC方式读写EXCEL文件

这种方法的好处是以数据库的方式读取文件而不需要打开EXCEL文件,节省资源第一步:在stdafx.h中添加头文件#include#include第二步:测试Excel驱动是否安装,CStringCHomisProView::GetExcelDriver(){char szBuf[2001];WORD cbBufMax = 2000;WORD cbBufOut;char *pszBuf = szBu...

weixin_31925685的博客 287

VC创建Excel写入内容

VC++、Windows XP 在VC++中使用EXCEL表格、操作EXCEL表格

Apache Doris IP变更问题详解

Apache Doris IP变更问题详解

ith321的博客 7274

GetExcelDriver函数需要自定义

这个是自定义函数,不是系统自带函数,所以。。你加什么头文件都没用。 自定义函数实现如下: CString GetExcelDriver() { char szBuf[2001]; WORD cbBufMax = 2000; WORD cbBufOut; char *pszBuf = szBuf; CString sDriver; // 获取已安

靖远CserRise的专栏 2397

告别OFDM卡顿:用MATLAB手把手仿真AFDM波形,搞定高铁、无人机通信的时变信道难题

本文详细介绍了如何使用MATLAB仿真AFDM波形,解决高铁和无人机通信中的时变信道难题。通过仿射变换技术,AFDM在多普勒频移严重的场景下表现优异,显著提升通信质量。文章包含参数配置、波形生成、性能对比等实战内容,适合通信工程师和研究人员参考。

weixin_27014595的博客 319

利用ODBC把数据库数据导出为Excel文件

Step1:取得Excel驱动程序,验证电脑是否安装了Excel驱动程序。代码如下:CString CReportCharge::GetExcelDriver(){    char szBuf[2001];    WORD cbBufMax = 2000;    WORD cbBufOut;    char *pszBuf = szBuf;    CString sDriver;   

创世纪 4082

window下迁移SVN仓库到新的windows服务器

window下迁移SVN仓库到新的windows服务器

Bertram的博客 4692

STM32解析航模遥控器的PPM信号

使用STM32对航模遥控器的PPM信号进行解析

qq_44343584的博客 9734

mfc对Excel的操作

mfc对Excel的操作:导入数据,导出数据。

Goodenough的博客 5519

视觉Transformer实战 | Data-efficient image Transformer(DeiT)详解与实现

在计算机视觉领域,Vision Transformer (ViT) 已经证明了纯 Transformer 架构在图像分类任务上的强大能力。然而,ViT 通常需要在大规模数据集上预训练才能达到最佳性能,DeiT (Data-efficient image Transformer) 通过引入一系列训练策略和优化,使得 Transformer 模型能够在相对较小的数据集上取得优异表现。本节将详细介绍 DeiT 的技术原理,并使用 PyTorch 从零开始实现 DeiT 模型。

盼小辉丶的博客 1341

mfc中操作excel

在 MFC(Microsoft Foundation Classes)中操作 Excel,主要通过 OLE 自动化(OLE Automation) 实现,本质是调用 Excel 暴露的 COM 接口。Excel 的对象模型是一个层次化的结构,MFC 通过包装这些 COM 接口(生成对应的类,如 _Application、Workbook 等),让开发者可以通过类的方法和属性操作 Excel。

feuiw的博客 1216

非结构化数据在大数据湖中的应用实践

想象一下,你正在整理一个杂乱的书房。有些书整整齐齐地放在书架上,每本书都有明确的标题、作者和出版日期——这些就是结构化数据,它们像数据库中的表格,有固定的格式和字段。但书房里还有更多东西:散落的照片、手写的笔记、录音带、视频光盘、甚至还有画作。这些物品没有固定的格式,每件都独一无二——这就是非结构化数据。在技术术语中,非结构化数据是指没有预定义数据模型或组织形式的信息。文本文档(Word、PDF、TXT)电子邮件和社交媒体内容图像和照片(JPG、PNG)音频文件(MP3、WAV)

软件工程实践的博客 361

180.在 Vue3 中使用 OpenLayers 实现多个多边形的绘制、编辑、删除与清空

【摘要】本文介绍如何在Vue3+TypeScript环境下使用OpenLayers实现多边形地图交互功能。通过Composition API封装核心逻辑,实现了多边形绘制、编辑、删除及清空等操作。关键技术包括:使用VectorLayer管理图形数据,Draw/Modify/Select交互控制,以及通过ref()管理交互状态。文中提供了完整代码示例,并解决了交互对象叠加问题,为开发GIS应用提供了基础模块。该方案支持扩展为数据库存储、后端交互等高级功能。

小彭的博客 770

【MFC/C++操作Excel】Excel篇

MFC操作Excel 下面的操作基于Excel2003 一.初始化操作 1.导入类库 点击查看->建立类向导-> Add Class...\From a type Library...-> C:\Program Files\Microsoft Office\Office\EXCEL.EXE,接下来就可以看到导入的类excel.h, excel.cpp。 2.初始化COM 找到App

zxx的专栏 1万+

【我的Android进阶之旅】Android自定义View实现一个游戏摇杆,来实现监听遥动的方向或者监听摇动的角度的功能

一、需求描述 去年有个需求,需要使用自定义View实现一个游戏摇杆,来识别上下左右摇动的方向。 有点类似下面这样的王者荣耀游戏摇杆的效果 二、业界已有的参考资料 在下面这篇博客介绍了如何自定义游戏摇杆 2.1 博客介绍 Android自定义摇杆 2.1.1 功能 支持自适应大小 支持2个方向、4个方向、8个方向的摇动监听 支持摇动角度获取 可选回调模式 支持可摇动区域自定义 支持摇杆自定义 支持设置图片、色值、Shape图形 2.1.2 效果图 2.1.3 设置回调方式 setCallBac

字节卷动 1409

《MFC如何添加EXCEL库和操作EXCEL》

EXCEL工作簿、工作表、单元格、行、列 我们在使用EXCEL时,需要搞清楚EXCEL应用程序、工作簿、工作表以及单元格的关系,还有如何设置字体和背景以及边框的属性。总之,就是1个工作簿(workbook)中含有很多个工作表(worksheet),工作表(worksheet)由行(cols)和列(rows)组成,行和列又由很多个单元格(cell)组成。由于在项目中使用到了EXCEL进行数据统计,...

GodLei1995 5533

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MFC读写Excel操作

前言 现在遇到特别的需求,需要将Excel中的数据提出,通过算法处理,然后将数据写会Excel。所以这篇文章,就主要来做这件事情。 参考博客: 博客1 :读Excel,写Excel,获取驱动。基于win32控制台写的。 博客2 :读Excel,写Excel,获取驱动。基于MFC写的。猜测,应该是多字符集,没有做多字符集与Unicode的转码。 官网API 这是官网的API可以参考 多字符转Unicode 我的程序是基于VS2010MFC开发的,Unicode项目,所以用到宽字符与多字...

优快云的博客 4069

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

MFC操作Excel增删改查

本文是在MFC中操作excel,并将excel中的数据导进到listCtrl控件中,并在控件中进行增删改查操作,同时保存到excel表中。 新建MFC项目 应用程序添加,基于对话框模式,下一步,直到 一定要勾选自动化。因为后面需要加入一些需要的库,不然会出现错误 对话框 在对话框中加入list Control控件,在属性中修改为report类型,并添加变量m_list 添加一个 edit control 控件,之后要在列表控件中双击修改,添加变量m_edit 在类视图中找到Dlg类,再在下面找到OnIni

weixin_46185442的博客 2983

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

使用MFC操作EXCEL文件

使用MFC操作EXCEL文件 分类: EXCEL 2012-09-03 09:30 14914人阅读 评论(5) 收藏 举报 excelmfcbooks工作applicationoffice 一、加载 1、 在VC6.0里创建一个MFC工程 2、打开MFCClassWizard窗口(查看—>建立类向导),选择Automation,单击AddClass按钮,选择Froma type libr

worldy的专栏 2884

MFC 创建和操作Excel2007 文件

目标: 生成一个excel文件,该文件可以使用exc

忘世麒麟的专栏 1万+

MFC操作EXCEL封装类

MFC操作EXCEL简单的功能封装,方便工作使用。 #pragma once #include "excel9.h" enum eAlignmentStatus { Alignment_Left = -4131, Alignment_Middle = -4108, Alignment_Right = -4152, Alignment_Top = -4160, Alignment_

裸奔人生 2803
上一篇: 一个工科研究生毕业后的职业规划
下一篇: STL填充与生成(fill,fill_n,generate,generate_n)的用法
_sunshine
博客等级 码龄14年 93粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值