在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例Windows系统编程 → c++ list control导入导出Excel数据

c++ list control导入导出Excel数据

Windows系统编程

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.18M
  • 下载次数:47
  • 浏览次数:483
  • 发布时间:2018-07-02
  • 实例类别:Windows系统编程
  • 发 布 人:空盘量
  • 文件格式:.rar
  • 所需积分:1
 相关标签: Excel VC++ 导入导出excel

实例介绍

【实例简介】list control导入导出Excel数据,自动截取文件名和路径
【实例截图】


from clipboard


导出的excel如下:

from clipboard


【核心代码】


// list control 1Dlg.cpp : 实现文件
//

#include "stdafx.h"
#include "list control 1.h"
#include "list control 1Dlg.h"
#include "afxdialogex.h"
#include <afxdb.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// Clistcontrol1Dlg 对话框



Clistcontrol1Dlg::Clistcontrol1Dlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(Clistcontrol1Dlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void Clistcontrol1Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST1, m_list);
}

BEGIN_MESSAGE_MAP(Clistcontrol1Dlg, CDialogEx)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON1, &Clistcontrol1Dlg::OnBnClickedButton1)
	ON_BN_CLICKED(IDC_BUTTON2, &Clistcontrol1Dlg::OnBnClickedButton2)
END_MESSAGE_MAP()


// Clistcontrol1Dlg 消息处理程序

BOOL Clistcontrol1Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO:  在此添加额外的初始化代码
	CRect rtList;
	m_list.GetClientRect(rtList);
	m_list.InsertColumn(0, "整机号", LVCFMT_LEFT, 50);
	m_list.InsertColumn(1, _T("显示器"), LVCFMT_LEFT, 50);
	m_list.InsertColumn(2, _T("条码阅读器"), LVCFMT_LEFT, 50);
	m_list.InsertColumn(3, _T("显示器"), LVCFMT_LEFT, 50);
	m_list.InsertColumn(4, _T("显示器"), LVCFMT_LEFT, 50);
	m_list.InsertColumn(5, _T("显示器"), LVCFMT_LEFT, 50);
	m_list.InsertColumn(6, _T("显示器"), LVCFMT_LEFT, 50);
	m_list.InsertColumn(7, _T("显示器"), LVCFMT_LEFT, 50);
	m_list.InsertColumn(8, _T("显示器"), LVCFMT_LEFT, 50);
	m_list.InsertColumn(9, _T("显示器"), LVCFMT_LEFT, 50);
	m_list.InsertColumn(10, _T("显示器"), LVCFMT_LEFT, 50);
	m_list.InsertColumn(11, _T("显示器"), LVCFMT_LEFT, 50);
	m_list.InsertColumn(12, _T("显示器"), LVCFMT_LEFT, 50);
	m_list.InsertColumn(13, _T("显示器"), LVCFMT_LEFT, 50);



	m_list.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0,
		LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
	m_list.DeleteAllItems();

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void Clistcontrol1Dlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon   1) / 2;
		int y = (rect.Height() - cyIcon   1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR Clistcontrol1Dlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}



void Clistcontrol1Dlg::OnBnClickedButton1()
{
	// TODO:  在此添加控件通知处理程序代码
////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
	m_list.InsertItem(0, "**00");//直接插入数据
	m_list.SetItemText(0, 1, "**11");
	m_list.SetItemText(0, 2, "**22");
	m_list.SetItemText(0, 3, "**22");
	m_list.SetItemText(0, 4, "52");
	m_list.SetItemText(0, 5, "62");
	m_list.SetItemText(0, 6, "722");
	m_list.SetItemText(0, 7, "822");
	m_list.SetItemText(0, 8, "922");
	m_list.SetItemText(0, 9, "1022");
	m_list.SetItemText(0, 10, "1122");
	m_list.SetItemText(0, 11, "1222");
	m_list.SetItemText(0, 12, "1322");
	m_list.SetItemText(0, 13, "1422");


	m_list.InsertItem(1, "1100");
	m_list.SetItemText(1, 1, "1111手机");
	m_list.SetItemText(1, 2, "1122笔记本");
	m_list.SetItemText(1, 3, "书内容");
	m_list.SetItemText(2, 4, "书内容");


	m_list.InsertItem(2, "2200");
	m_list.SetItemText(2, 1, "2211电脑");
	m_list.SetItemText(2, 2, "2222数据");
	m_list.SetItemText(2, 3, "书内容");
	m_list.SetItemText(2, 4, "书内容");

	m_list.InsertItem(3, "书");
	m_list.SetItemText(3, 1, "书名");
	m_list.SetItemText(3, 2, "书内容");
	m_list.SetItemText(3, 3, "书内容");
	m_list.SetItemText(3, 4, "书内容");

	m_list.InsertItem(4, "书");
	m_list.SetItemText(4, 1, "书名");

	m_list.InsertItem(5, "书");
	m_list.SetItemText(5, 1, "书名");

	//m_list.InsertItem(6, "书");
	//m_list.InsertItem(7, "书");
	//m_list.InsertItem(8, "书");
	//m_list.InsertItem(9, "书");
	//m_list.InsertItem(10, "书");

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


}


void Clistcontrol1Dlg::OnBnClickedButton2()
{
	// TODO:  在此添加控件通知处理程序代码
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//方法2:大型数据,可手动输入文件名,程序自动获取 列标题名称,未创建成功。。。
	//首先判断列表框中是否有记录
	//if (m_list.GetItemCount() <= 0)
	//{
	//	AfxMessageBox("列表中没有记录需要保存!");
	//	return;
	//}
	////打开另存为对话框 ,需要包含 #include <Afxdlgs.h>
	//CFileDialog dlg(FALSE,
	//	"xls",
	//	"FileList",
	//	OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
	//	"Excel 文件(*.xls)|*.xls||");
	//dlg.m_ofn.lpstrTitle = "文件列表另存为";

	//if (dlg.DoModal() != IDOK)
	//	return;
	//CString strFilePath;
	////获得文件路径名
	//strFilePath = dlg.GetPathName();
	////判断文件是否已经存在,存在则删除重建
	//DWORD dwRe = GetFileAttributes(strFilePath);
	//if (dwRe != (DWORD)-1)
	//{
	//	DeleteFile(strFilePath);
	//}

	//CDatabase database;//数据库库需要包含头文件 #include <afxdb.h>
	//CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel驱动
	//CString sSql, strInsert;

	//TRY
	//{
	//	
	//	// 创建进行存取的字符串
	//	sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s", sDriver, strFilePath, strFilePath);

	//	// 创建数据库 (既Excel表格文件)
	//	if (database.OpenEx(sSql, CDatabase::noOdbcDialog))
	//	{
	//		//获得列别框总列数
	//		int iColumnNum, iRowCount;
	//		LVCOLUMN lvCol;
	//		CString strColName; //用于保存列标题名称
	//		int i, j; //列、行循环参数

	//		iColumnNum = m_list.GetHeaderCtrl()->GetItemCount();//获取列数
	//		iRowCount = m_list.GetItemCount();//获取行数
	//		
	//		sSql = " CREATE TABLE DSO_DX ( ";
	//		strInsert = " INSERT INTO DSO_DX ( ";
	//		//获得列标题名称
	//		lvCol.mask = LVCF_TEXT; //必需设置,说明LVCOLUMN变量中pszText参数有效
	//		lvCol.cchTextMax = 32; //必设,pszText参数所指向的字符串的大小
	//		lvCol.pszText = strColName.GetBuffer(32); //必设,pszText 所指向的字符串的实际存储位置。
	//		//以上三个参数设置后才能通过 GetColumn()函数获得列标题的名称
	//		
	//		for (i = 0; i< iColumnNum; i  )
	//		{
	//			if (!(m_list.GetColumn(i, &lvCol)))
	//				return;
	//			if (i<iColumnNum - 1)
	//			{
	//				sSql = sSql   lvCol.pszText   " TEXT , ";
	//				strInsert = strInsert   lvCol.pszText   " , ";
	//				
	//			}
	//			else
	//			{
	//				sSql = sSql   lvCol.pszText   " TEXT ) ";
	//				strInsert = strInsert   lvCol.pszText   " )  VALUES ( ";
	//				//AfxMessageBox("程序到此一游。");
	//			}
	//		}

	//		//创建Excel表格文件
	//		database.ExecuteSQL(sSql);
	//		AfxMessageBox("程序到此一游。");/////////////////////////这里没有创建好文件?????????????
	//		//循环提取记录并插入到EXCEL中
	//		sSql = strInsert;
	//		char chTemp[33];
	//		for (j = 0; j<iRowCount; j  )
	//		{
	//			memset(chTemp, 0, 33); 
	//			for (i = 0; i<iColumnNum; i  )
	//			{
	//				m_list.GetItemText(j, i, chTemp, 33);
	//				if (i < (iColumnNum - 1))
	//				{
	//					sSql = sSql   "'"   chTemp   "' , ";   
	//				}
	//				else
	//				{
	//					sSql = sSql   "'"   chTemp   "' ) ";
	//				}
	//			}
	//			//将记录插入到表格中
	//			database.ExecuteSQL(sSql);
	//			sSql = strInsert;
	//		}
	//	}

	//	// 关闭Excel表格文件
	//	database.Close();

	//	AfxMessageBox("保存查询结果为Excel文件成功!");
	//}
	//CATCH_ALL(e)
	//{
	//	//错误类型很多,根据需要进行报错。
	//	AfxMessageBox("Excel文件保存失败。");
	//}
	//END_CATCH_ALL;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//方法1:小型数据,自动已时间为名,file.Write输入列标题名称
	////首先判断列表框中是否有记录
	if (m_list.GetItemCount() <= 0)
	{
		AfxMessageBox("列表中没有记录需要保存!");
		return;
	}
	CTime time = CTime::GetCurrentTime();
	CString strRptTime = time.Format("%Y%m%d%H%M%S");


	// TODO: 在此添加控件通知处理程序代码
	// 实现存盘
	CString buff0[1024], buff1[1024], buff2[1024], buff3[1024], buff4[1024], buff5[1024], buff6[1024], buff7[1024], buff8[1024], buff9[1024];

	//CString fileName = "20180607文件名.xls";//保存路径为当前程序
	CString fileName = "d:\\"   strRptTime   ".xls";//保存路径是d:盘根目录
	CFile file(fileName, CFile::modeCreate | CFile::modeReadWrite | CFile::shareExclusive);

	CString strHead = _T("日期\t装载开始时间\t卡车号\t驾驶员号\t装载次数\t净载量(公吨)\t装载百分比\t装铲铲数\t系统状态标志\t装载时间\t空载运输时间\t空车停等时间\t装载运输时间\t装载停等时间\t卸载时间\t装载运输距离\t空载运输距离\t总循环时间\t装载最高速度\t装载最高速度时间\t空载最高速度\t空载最高速度时间\n");
	file.Write(strHead, strHead.GetLength());//取文件列数,与下面的注释代码效果一样。
	//file.Write("日期\t装载开始时间\t卡车号\t驾驶员号\t装载次数\t净载量(公吨)\t装载百分比\t装铲铲数\t系统状态标志\t装载时间\t空载运输时间\t空车停等时间\t装载运输时间\t装载停等时间\t卸载时间\t装载运输距离\t空载运输距离\t总循环时间\t装载最高速度\t装载最高速度时间\t空载最高速度\t空载最高速度时间\n", 269);
	//后面数字=(标题数字x2 1)   (标题数字x2 1)   (标题数字x2 1)   (标题数字x2 1) ............,注:汉子为2,字符为1

	int i = 0,a=0;//列数
	int j = 0,b=0;//行数
	j = m_list.GetItemCount();//读取记录行数
	i = m_list.GetHeaderCtrl()->GetItemCount();//读取记录列数
	if (j > 0)
	{
		for (i = 0; i<j; i  )
		{
			buff0[i] = m_list.GetItemText(i, 0);//逐条赋值,这种方式适合较小数据,大数据可整个读取
			buff1[i] = m_list.GetItemText(i, 1);
			buff2[i] = m_list.GetItemText(i, 2);
			buff3[i] = m_list.GetItemText(i, 3);
			buff4[i] = m_list.GetItemText(i, 4);
			buff5[i] = m_list.GetItemText(i, 5);
			buff6[i] = m_list.GetItemText(i, 6);
			buff7[i] = m_list.GetItemText(i, 7);
			buff8[i] = m_list.GetItemText(i, 8);
			buff9[i] = m_list.GetItemText(i, 9);

			CString msg;
			//显示格式:列的条数
			msg.Format("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", buff0[i], buff1[i], buff2[i], buff3[i], buff4[i], buff5[i], buff6[i], buff7[i], buff8[i], buff9[i]);
			file.Write(msg, msg.GetLength());//
		}
	}

	file.Close();

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//保存后再打开
	CApplication m_ExlApp;
	CWorkbook m_ExlBook;
	CWorkbooks m_ExlBooks;
	CWorksheet m_ExlSheet;
	CWorksheets m_ExlSheets;
	CRange m_ExlRge;
	CFont0 font;
	CRange cols;
	LPDISPATCH lpDisp;

	if (!m_ExlApp.CreateDispatch(_T("Excel.Application")))
	{
		this->MessageBox(_T("无法创建Excel应用!"));
		return;
	}

	//设置为可见
	m_ExlApp.put_Visible(TRUE);
	///////////////////下面打开保存的数据文件///////////////////

	m_ExlBooks.AttachDispatch(m_ExlApp.get_Workbooks(), TRUE);
	m_ExlBook.AttachDispatch(m_ExlBooks.Add((_variant_t)fileName), TRUE);//加载EXCEL模板
	m_ExlSheets.AttachDispatch(m_ExlBook.get_Sheets(), TRUE);//加载Sheet页面



}


实例下载地址

c++ list control导入导出Excel数据

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警