实例介绍
【实例简介】list control导入导出Excel数据,自动截取文件名和路径
【实例截图】
【实例截图】
导出的excel如下:
【核心代码】
// 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页面
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论